From 5af6f7bd4db5a6e0ea0ad043909741603fe6d543 Mon Sep 17 00:00:00 2001 From: Yves Rizoud Date: Fri, 9 Mar 2012 20:06:55 +0000 Subject: [PATCH] Fix crash of layer preview in some sizes, and removed overdraw git-svn-id: svn://pulkomandy.tk/GrafX2/trunk@1927 416bcca6-2ee7-4201-b75f-2eb2f807beb1 --- src/engine.c | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/engine.c b/src/engine.c index 40fef2fe..2488a72d 100644 --- a/src/engine.c +++ b/src/engine.c @@ -1409,12 +1409,12 @@ void Main_handler(void) if (!preview_is_visible) { - previewW = Buttons_Pool[BUTTON_LAYER_SELECT].Width / Main_backups->Pages->Nb_layers; + previewW = Layer_button_width; previewH = previewW * Main_image_height / Main_image_width; if (previewH * Menu_factor_Y > Menu_Y) previewH = Menu_Y / Menu_factor_Y; Open_popup((Buttons_Pool[BUTTON_LAYER_SELECT].X_offset + 2)*Menu_factor_X, - Menu_Y - previewH * Menu_factor_Y, previewW * layercount, previewH); + Menu_Y - previewH * Menu_factor_Y, Buttons_Pool[BUTTON_LAYER_SELECT].Width, previewH); preview_is_visible = 1; // Make the system think the menu is visible (Open_popup hides it) @@ -1426,20 +1426,24 @@ void Main_handler(void) // NOT an else of the previous if - variable may have changed if (preview_is_visible) { - layer = Layer_under_mouse(); + //layer = Layer_under_mouse(); for(layer = 0; layer < layercount; ++layer) { - for (x = 0; x < Window_width; x++) - for (y = 0; y < Window_height; y++) + // Stop if the window is too small to show the + // layer button (ex: 320x200 can only display 12 layers) + if (layer*Layer_button_width+previewW > Window_width) + break; + + for (x = 0; x < previewW; x++) + for (y = 0; y < previewH; y++) { int imgx = x * Main_image_width / previewW; int imgy = y * Main_image_height / previewH; - Pixel_in_window(x + previewW*layer, y, *(Main_backups->Pages->Image[layer].Pixels + Pixel_in_window(layer*Layer_button_width + x, y, *(Main_backups->Pages->Image[layer].Pixels + imgx + imgy * Main_image_width)); } - - Update_window_area(0,0,Window_width, Window_height); } + Update_window_area(0,0,Window_width, Window_height); } } else if (preview_is_visible) { int x = Mouse_K;