@@ -278,6 +278,28 @@ regionview_draw_init_region_label(Regionview *regionview)
278278 2 * regionview_label_margin ;
279279}
280280
281+ static void
282+ regionview_draw_init_guide_label (Regionview * regionview )
283+ {
284+ if (regionview -> draw_type == REGIONVIEW_HGUIDE ) {
285+ regionview -> label .left = regionview -> frame .left ;
286+ regionview -> label .top = regionview -> frame .top
287+ - 2 * regionview_label_margin
288+ - regionview -> ink_rect .height
289+ - regionview_line_width ;
290+ }
291+ else {
292+ regionview -> label .left = regionview -> frame .left
293+ + regionview_line_width ;
294+ regionview -> label .top = regionview -> frame .top ;
295+ }
296+
297+ regionview -> label .width = regionview -> ink_rect .width +
298+ 2 * regionview_label_margin ;
299+ regionview -> label .height = regionview -> ink_rect .height +
300+ 2 * regionview_label_margin ;
301+ }
302+
281303/* gsk clips the case where the region is completely off screen, but does
282304 * NOT clip if we are within the rect. This will cause terrible
283305 * performance and even crashes with large zooms.
@@ -549,19 +571,24 @@ static void
549571regionview_draw_guide (Regionview * regionview , GtkSnapshot * snapshot )
550572{
551573 Imageui * imageui = regionview -> imageui ;
552- double zoom = imageui_get_zoom (imageui );
553-
554- // two points to mark
555- double left ;
556- double top ;
557- imageui_image_to_gtk (imageui ,
558- regionview -> draw_area .left , regionview -> draw_area .top , & left , & top );
559- regionview -> frame .left = left ;
560- regionview -> frame .top = top ;
561- regionview -> frame .width = regionview -> draw_area .width * zoom ;
562- regionview -> frame .height = regionview -> draw_area .height * zoom ;
574+ Tilesource * tilesource = imageui_get_tilesource (imageui );
575+
576+ // the full width or height of the image
577+ if (regionview -> draw_type == REGIONVIEW_HGUIDE ) {
578+ regionview -> frame .left = 0 ;
579+ regionview -> frame .top = VIPS_RECT_BOTTOM (& regionview -> draw_area );
580+ regionview -> frame .width = tilesource -> display_width ;
581+ regionview -> frame .height = 0 ;
582+ }
583+ else {
584+ regionview -> frame .left = VIPS_RECT_RIGHT (& regionview -> draw_area );
585+ regionview -> frame .top = 0 ;
586+ regionview -> frame .width = 0 ;
587+ regionview -> frame .height = tilesource -> display_height ;
588+ }
589+ imageui_image_to_gtk_rect (imageui , & regionview -> frame , & regionview -> frame );
563590
564- regionview_draw_init_region_label (regionview );
591+ regionview_draw_init_guide_label (regionview );
565592
566593 regionview_draw_label_shadow (regionview , snapshot );
567594
@@ -750,11 +777,18 @@ regionview_hit(Regionview *regionview, int x, int y)
750777static void
751778regionview_pick_type (Regionview * regionview )
752779{
753- if (abs (regionview -> our_area .width ) < 10 )
780+ if (abs (regionview -> our_area .width ) < 10 &&
781+ abs (regionview -> our_area .height ) < 10 )
754782 regionview -> type = REGIONVIEW_MARK ;
755783 else if (regionview -> our_area .width > 0 &&
756784 regionview -> our_area .height > 0 )
757785 regionview -> type = REGIONVIEW_REGION ;
786+ else if (regionview -> our_area .width < 0 &&
787+ regionview -> our_area .height > 0 )
788+ regionview -> type = REGIONVIEW_HGUIDE ;
789+ else if (regionview -> our_area .width > 0 &&
790+ regionview -> our_area .height < 0 )
791+ regionview -> type = REGIONVIEW_VGUIDE ;
758792 else
759793 regionview -> type = REGIONVIEW_ARROW ;
760794}
@@ -859,7 +893,6 @@ regionview_resize(Regionview *regionview, guint modifiers,
859893 break ;
860894 }
861895
862-
863896 if (!regionview -> frozen )
864897 regionview_pick_type (regionview );
865898
0 commit comments