From 048f197636e97c2ec414a2ca23fc58e2c6ead263 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Mon, 5 Apr 2010 17:56:36 +0000 Subject: [PATCH] Continuation of Issue 210:Bottom pixels not complete visable in some zoom modes. I chose to have a dead zone at bottom of zoomed area only when it's at bottom of image too. The dead zone is created only if the remaining space is <= 50 of a normal zoomed line, So the usable pixels are guaranteed to be > half a normal line, and the dead space is always <= half a line. git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1445 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/brush_ops.c | 11 +---------- src/buttons.c | 27 ++------------------------ src/special.c | 9 +-------- src/windows.c | 50 ++++++++++++++++++++++++++----------------------- src/windows.h | 1 + 5 files changed, 32 insertions(+), 66 deletions(-) diff --git a/src/brush_ops.c b/src/brush_ops.c index 18bbbc8b..79ba4710 100644 --- a/src/brush_ops.c +++ b/src/brush_ops.c @@ -96,20 +96,11 @@ void Magnifier_12_0(void) Main_magnifier_offset_X=Mouse_X-(Main_magnifier_width>>1); Main_magnifier_offset_Y=Mouse_Y-(Main_magnifier_height>>1); - // Calcul du coin haut_gauche de la fenêtre devant être zoomée DANS L'ECRAN - if (Main_magnifier_offset_X+Main_magnifier_width>=Limit_right-Main_offset_X) - Main_magnifier_offset_X=Limit_right-Main_magnifier_width-Main_offset_X+1; - if (Main_magnifier_offset_Y+Main_magnifier_height>=Limit_bottom-Main_offset_Y) - Main_magnifier_offset_Y=Limit_bottom-Main_magnifier_height-Main_offset_Y+1; - // Calcul des coordonnées absolues de ce coin DANS L'IMAGE Main_magnifier_offset_X+=Main_offset_X; Main_magnifier_offset_Y+=Main_offset_Y; - if (Main_magnifier_offset_X<0) - Main_magnifier_offset_X=0; - if (Main_magnifier_offset_Y<0) - Main_magnifier_offset_Y=0; + Clip_magnifier_offsets(&Main_magnifier_offset_X, &Main_magnifier_offset_Y); // On calcule les bornes visibles dans l'écran Position_screen_according_to_zoom(); diff --git a/src/buttons.c b/src/buttons.c index 8cdb33c9..21dd6027 100644 --- a/src/buttons.c +++ b/src/buttons.c @@ -347,13 +347,6 @@ void Button_Hide_menu(void) if (Main_magnifier_mode) { Compute_magnifier_data(); - if (Main_magnifier_offset_Y+Main_magnifier_height>Main_image_height) - { - if (Main_magnifier_height>Main_image_height) - Main_magnifier_offset_Y=0; - else - Main_magnifier_offset_Y=Main_image_height-Main_magnifier_height+1; - } } // On repositionne le décalage de l'image pour qu'il n'y ait pas d'in- @@ -416,13 +409,6 @@ void Set_bar_visibility(word bar, byte visible) if (Main_magnifier_mode) { Compute_magnifier_data(); - if (Main_magnifier_offset_Y+Main_magnifier_height>Main_image_height) - { - if (Main_magnifier_height>Main_image_height) - Main_magnifier_offset_Y=0; - else - Main_magnifier_offset_Y=Main_image_height-Main_magnifier_height+1; - } } // On repositionne le décalage de l'image pour qu'il n'y ait pas d'in- @@ -3263,20 +3249,11 @@ void Button_Magnify(void) Main_magnifier_offset_X=Mouse_X-(Main_magnifier_width>>1); Main_magnifier_offset_Y=Mouse_Y-(Main_magnifier_height>>1); - // Calcul du coin haut_gauche de la fenêtre devant être zoomée DANS L'ECRAN - if (Main_magnifier_offset_X+Main_magnifier_width>=Limit_right-Main_offset_X) - Main_magnifier_offset_X=Limit_right-Main_magnifier_width-Main_offset_X+1; - if (Main_magnifier_offset_Y+Main_magnifier_height>=Limit_bottom-Main_offset_Y) - Main_magnifier_offset_Y=Limit_bottom-Main_magnifier_height-Main_offset_Y+1; - - // Calcul des coordonnées absolues de ce coin DANS L'IMAGE + // Calcul des coordonnées absolues de ce coin DANS L'IMAGE Main_magnifier_offset_X+=Main_offset_X; Main_magnifier_offset_Y+=Main_offset_Y; - if (Main_magnifier_offset_X<0) - Main_magnifier_offset_X=0; - if (Main_magnifier_offset_Y<0) - Main_magnifier_offset_Y=0; + Clip_magnifier_offsets(&Main_magnifier_offset_X, &Main_magnifier_offset_Y); // On calcule les bornes visibles dans l'écran Position_screen_according_to_zoom(); diff --git a/src/special.c b/src/special.c index 5451c1a8..4f7a60cc 100644 --- a/src/special.c +++ b/src/special.c @@ -353,14 +353,7 @@ void Scroll_magnifier(short delta_x,short delta_y) temp_x_offset=Main_magnifier_offset_X+delta_x; temp_y_offset=Main_magnifier_offset_Y+delta_y; - if (temp_x_offset+Main_magnifier_width>Main_image_width) - temp_x_offset=Main_image_width-Main_magnifier_width; - if (temp_y_offset+Main_magnifier_height>Main_image_height) - temp_y_offset=Main_image_height-Main_magnifier_height+1; - if (temp_x_offset<0) - temp_x_offset=0; - if (temp_y_offset<0) - temp_y_offset=0; + Clip_magnifier_offsets(&temp_x_offset, &temp_y_offset); if ( (Main_magnifier_offset_X!=temp_x_offset) || (Main_magnifier_offset_Y!=temp_y_offset) ) diff --git a/src/windows.c b/src/windows.c index dfa95ef5..8af0c31d 100644 --- a/src/windows.c +++ b/src/windows.c @@ -1767,21 +1767,29 @@ void Compute_magnifier_data(void) if (Menu_Y%Main_magnifier_factor) Main_magnifier_height++; - if (Main_magnifier_mode && Main_magnifier_offset_X) - { - if (Main_image_width=Main_magnifier_factor/2); + if (*y_offset<0) + *y_offset=0; + } + } +} /// Changes magnifier factor and updates everything needed void Change_magnifier_factor(byte factor_index, byte point_at_mouse) @@ -1832,14 +1840,7 @@ void Change_magnifier_factor(byte factor_index, byte point_at_mouse) Main_magnifier_offset_Y = target_y-(Main_magnifier_height>>1); } // Fix cases where the image would overflow on edges - if (Main_magnifier_offset_X+Main_magnifier_width>Main_image_width) - Main_magnifier_offset_X=Main_image_width-Main_magnifier_width; - if (Main_magnifier_offset_Y+Main_magnifier_height>Main_image_height) - Main_magnifier_offset_Y=Main_image_height-Main_magnifier_height+1; - if (Main_magnifier_offset_X<0) - Main_magnifier_offset_X=0; - if (Main_magnifier_offset_Y<0) - Main_magnifier_offset_Y=0; + Clip_magnifier_offsets(&Main_magnifier_offset_X, &Main_magnifier_offset_Y); if (magnified_view_leads) Position_screen_according_to_zoom(); @@ -2601,9 +2602,12 @@ void Display_all_screen(void) // Calcul du nombre de lignes visibles de l'image zoomée if (Main_image_heightPages->Transparent_color); - if (Main_image_heightPages->Transparent_color); } diff --git a/src/windows.h b/src/windows.h index 0b00e8e1..420d44c5 100644 --- a/src/windows.h +++ b/src/windows.h @@ -46,6 +46,7 @@ void Remap_menu_sprites(); void Position_screen_according_to_zoom(void); void Compute_separator_data(void); void Compute_magnifier_data(void); +void Clip_magnifier_offsets(short *x_offset, short *y_offset); void Compute_limits(void); void Compute_paintbrush_coordinates(void);