+ case REQUEST_SEGMENT: ;
+ struct request_segment *rs = (struct request_segment *) p->request;
+ struct sym_text *st = (struct sym_text *) rs->label;
+
+ double width = p->request->variants[p->variant_used].width;
+ double rotated_x = p->x + width * sin(st->rotate / (-180 / M_PI));
+ double rotated_y = p->y + width * cos(st->rotate / (-180 / M_PI));
+
+ if (rs->x1 < rs->x2)
+ {
+ if (p->x < rs->x1)
+ {
+ dx = rs->x1 - p->x;
+ dy = rs->y1 - p->y;
+ }
+ else if (rotated_x > rs->x2)
+ {
+ dx = rotated_x - rs->x2;
+ dy = rotated_y - rs->y2;
+ }
+ else
+ {
+ dx = dy = 0;
+ }
+ }
+ else
+ {
+ if (p->x < rs->x2)
+ {
+ dx = rs->x2 - p->x;
+ dy = rs->y2 - p->y;
+ }
+ else if (rotated_x > rs->x1)
+ {
+ dx = rotated_x - rs->x1;
+ dy = rotated_y - rs->y1;
+ }
+ else
+ {
+ dx = dy = 0;
+ }
+ }
+
+ distance = sqrt(dx*dx + dy*dy);
+ break;