diff options
| author | Manolo Gouy <Manolo> | 2018-05-06 06:46:40 +0000 |
|---|---|---|
| committer | Manolo Gouy <Manolo> | 2018-05-06 06:46:40 +0000 |
| commit | aab1b72af4924293ffc2fa74180480dc9afcc06f (patch) | |
| tree | 95cfd0d5e8deae9f3873c1fe2dfef3fd42f8b87b /src | |
| parent | e6929834c7f41b172b63795bd76cddb6295b7ca5 (diff) | |
Improve fl_overlay_rect() when GUI is scaled.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12901 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src')
| -rw-r--r-- | src/Fl_Graphics_Driver.cxx | 5 | ||||
| -rw-r--r-- | src/drivers/Android/Fl_Android_Graphics_Driver.H | 3 | ||||
| -rw-r--r-- | src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H | 1 | ||||
| -rw-r--r-- | src/fl_overlay.cxx | 77 |
4 files changed, 25 insertions, 61 deletions
diff --git a/src/Fl_Graphics_Driver.cxx b/src/Fl_Graphics_Driver.cxx index 648a9f2d0..0523e012d 100644 --- a/src/Fl_Graphics_Driver.cxx +++ b/src/Fl_Graphics_Driver.cxx @@ -192,11 +192,6 @@ unsigned Fl_Graphics_Driver::font_desc_size() { return (unsigned)sizeof(Fl_Fontdesc); } -bool Fl_Graphics_Driver::overlay_rect_unscaled() -{ - return (scale() == int(scale())); -} - /** Converts \p width and \p height from FLTK units to drawing units. The conversion performed consists in multiplying \p width and \p height by scale() and in slightly modifying that to help support tiled images. */ diff --git a/src/drivers/Android/Fl_Android_Graphics_Driver.H b/src/drivers/Android/Fl_Android_Graphics_Driver.H index 27ad998b6..16754a35c 100644 --- a/src/drivers/Android/Fl_Android_Graphics_Driver.H +++ b/src/drivers/Android/Fl_Android_Graphics_Driver.H @@ -274,9 +274,6 @@ public: virtual void font_name(int num, const char *name) override; /** Support function for fl_overlay_rect() and scaled GUI. Defaut implementation may be enough */ - // super: virtual bool overlay_rect_unscaled(); - /** Support function for fl_overlay_rect() and scaled GUI. - Defaut implementation may be enough */ // super: virtual void overlay_rect(int x, int y, int w , int h) { loop(x, y, x+w-1, y, x+w-1, y+h-1, x, y+h-1); } // --- end of original Fl_Graphics_Driver header ----------------------------- diff --git a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H index 034812d7c..a39dd7481 100644 --- a/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H +++ b/src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H @@ -190,7 +190,6 @@ protected: #else void descriptor_init(const char* name, Fl_Fontsize Size, Fl_Quartz_Font_Descriptor *d); #endif - virtual bool overlay_rect_unscaled() {return false; } virtual void overlay_rect(int x, int y, int w , int h); }; diff --git a/src/fl_overlay.cxx b/src/fl_overlay.cxx index ec64b4aa9..267fa58ae 100644 --- a/src/fl_overlay.cxx +++ b/src/fl_overlay.cxx @@ -35,8 +35,6 @@ static int px,py,pw,ph; #ifndef USE_XOR #include <stdlib.h> -static uchar *bgN = 0L, *bgS = 0L, *bgE = 0L, *bgW = 0L; - #include <FL/Fl_Screen_Driver.H> #include <FL/Fl_RGB_Image.H> static Fl_RGB_Image *s_bgN = 0, *s_bgS = 0, *s_bgE = 0, *s_bgW = 0; @@ -65,54 +63,37 @@ static void draw_current_rect() { # error unsupported platform # endif #else - bool unscaled = fl_graphics_driver->overlay_rect_unscaled(); - if (unscaled) { - if (bgN) { free(bgN); bgN = 0L; } - if (bgS) { free(bgS); bgS = 0L; } - if (bgE) { free(bgE); bgE = 0L; } - if (bgW) { free(bgW); bgW = 0L; } - } else { - if (s_bgN) { delete s_bgN; s_bgN = 0; } - if (s_bgS) { delete s_bgS; s_bgS = 0; } - if (s_bgE) { delete s_bgE; s_bgE = 0; } - if (s_bgW) { delete s_bgW; s_bgW = 0; } - } + if (s_bgN) { delete s_bgN; s_bgN = 0; } + if (s_bgS) { delete s_bgS; s_bgS = 0; } + if (s_bgE) { delete s_bgE; s_bgE = 0; } + if (s_bgW) { delete s_bgW; s_bgW = 0; } if (pw>0 && ph>0) { - if (unscaled) { - bgE = fl_read_image(0L, px+pw-1, py, 1, ph); - bgW = fl_read_image(0L, px, py, 1, ph); - bgS = fl_read_image(0L, px, py+ph-1, pw, 1); - bgN = fl_read_image(0L, px, py, pw, 1); - } else { - s_bgE = Fl::screen_driver()->read_win_rectangle( px+pw-1, py, 1, ph); - if(s_bgE && s_bgE->w() && s_bgE->h()) { - s_bgE->scale(1, ph,0,1); - } - s_bgW = Fl::screen_driver()->read_win_rectangle( px, py, 1, ph); - if(s_bgW && s_bgW->w() && s_bgW->h()) { - s_bgW->scale(1, ph,0,1); - } - s_bgS = Fl::screen_driver()->read_win_rectangle( px, py+ph-1, pw, 1); - if(s_bgS && s_bgS->w() && s_bgS->h()) { - s_bgS->scale(pw, 1,0,1); - } - s_bgN = Fl::screen_driver()->read_win_rectangle( px, py, pw, 1); - if(s_bgN && s_bgN->w() && s_bgN->h()) { - s_bgN->scale(pw, 1,0,1); - } + s_bgE = Fl::screen_driver()->read_win_rectangle( px+pw-1, py, 1, ph); + if(s_bgE && s_bgE->w() && s_bgE->h()) { + s_bgE->scale(1, ph,0,1); + } + s_bgW = Fl::screen_driver()->read_win_rectangle( px, py, 1, ph); + if(s_bgW && s_bgW->w() && s_bgW->h()) { + s_bgW->scale(1, ph,0,1); + } + s_bgS = Fl::screen_driver()->read_win_rectangle( px, py+ph-1, pw, 1); + if(s_bgS && s_bgS->w() && s_bgS->h()) { + s_bgS->scale(pw, 1,0,1); + } + s_bgN = Fl::screen_driver()->read_win_rectangle( px, py, pw, 1); + if(s_bgN && s_bgN->w() && s_bgN->h()) { + s_bgN->scale(pw, 1,0,1); } bgx = px; bgy = py; bgw = pw; bgh = ph; } fl_color(FL_WHITE); fl_line_style(FL_SOLID); - if (unscaled) fl_rect(px, py, pw, ph); - else fl_graphics_driver->overlay_rect(px, py, pw, ph); + fl_graphics_driver->overlay_rect(px, py, pw, ph); fl_color(FL_BLACK); fl_line_style(FL_DOT); - if (unscaled) fl_rect(px, py, pw, ph); - else fl_graphics_driver->overlay_rect(px, py, pw, ph); + fl_graphics_driver->overlay_rect(px, py, pw, ph); fl_line_style(FL_SOLID); #endif // USE_XOR } @@ -125,18 +106,10 @@ static void erase_current_rect() { draw_current_rect(); # endif #else - bool unscaled = fl_graphics_driver->overlay_rect_unscaled(); - if (unscaled) { - if (bgN) fl_draw_image(bgN, bgx, bgy, bgw, 1); - if (bgS) fl_draw_image(bgS, bgx, bgy+bgh-1, bgw, 1); - if (bgW) fl_draw_image(bgW, bgx, bgy, 1, bgh); - if (bgE) fl_draw_image(bgE, bgx+bgw-1, bgy, 1, bgh); - } else { - if (s_bgN) s_bgN->draw(bgx, bgy); - if (s_bgS) s_bgS->draw(bgx, (bgy+bgh-1)); - if (s_bgW) s_bgW->draw(bgx, bgy); - if (s_bgE) s_bgE->draw((bgx+bgw-1), bgy); - } + if (s_bgN) s_bgN->draw(bgx, bgy); + if (s_bgS) s_bgS->draw(bgx, (bgy+bgh-1)); + if (s_bgW) s_bgW->draw(bgx, bgy); + if (s_bgE) s_bgE->draw((bgx+bgw-1), bgy); #endif } |
