summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2018-05-06 06:46:40 +0000
committerManolo Gouy <Manolo>2018-05-06 06:46:40 +0000
commitaab1b72af4924293ffc2fa74180480dc9afcc06f (patch)
tree95cfd0d5e8deae9f3873c1fe2dfef3fd42f8b87b
parente6929834c7f41b172b63795bd76cddb6295b7ca5 (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
-rw-r--r--FL/Fl_Graphics_Driver.H3
-rw-r--r--src/Fl_Graphics_Driver.cxx5
-rw-r--r--src/drivers/Android/Fl_Android_Graphics_Driver.H3
-rw-r--r--src/drivers/Quartz/Fl_Quartz_Graphics_Driver.H1
-rw-r--r--src/fl_overlay.cxx77
5 files changed, 25 insertions, 64 deletions
diff --git a/FL/Fl_Graphics_Driver.H b/FL/Fl_Graphics_Driver.H
index 3184dd5d2..be3239518 100644
--- a/FL/Fl_Graphics_Driver.H
+++ b/FL/Fl_Graphics_Driver.H
@@ -427,9 +427,6 @@ public:
virtual void font_name(int num, const char *name) {}
/** Support function for fl_overlay_rect() and scaled GUI.
Defaut implementation may be enough */
- virtual bool overlay_rect_unscaled();
- /** Support function for fl_overlay_rect() and scaled GUI.
- Defaut implementation may be enough */
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); }
};
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
}