summaryrefslogtreecommitdiff
path: root/src/Fl_x.cxx
diff options
context:
space:
mode:
authorManolo Gouy <Manolo>2017-07-30 16:21:57 +0000
committerManolo Gouy <Manolo>2017-07-30 16:21:57 +0000
commitc4e04e4c7f446464ef65382cf10bc13417563b3b (patch)
treef012307f02f8fba85f406f533908f63f7b15ea1c /src/Fl_x.cxx
parent5a7a954ebd1005b30bbe48d84e4291c66ad30252 (diff)
Improve rescaling when window moved across screens: make sure center stays on new screen.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@12367 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_x.cxx')
-rw-r--r--src/Fl_x.cxx9
1 files changed, 5 insertions, 4 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 25ae92d55..9e51e7068 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -726,7 +726,8 @@ int Fl_X11_Screen_Driver::get_mouse_unscaled(int &mx, int &my) {
Window c; int cx,cy; unsigned int mask;
XQueryPointer(fl_display, root, &root, &c, &mx, &my, &cx, &cy, &mask);
#if USE_XFT
- return screen_num_unscaled(mx, my);
+ int screen = screen_num_unscaled(mx, my);
+ return screen >= 0 ? screen : 0;
#else
return screen_num(mx, my);
#endif
@@ -2015,12 +2016,12 @@ fprintf(stderr,"\n");*/
Window cr; int X, Y, W = actual.width, H = actual.height;
XTranslateCoordinates(fl_display, fl_xid(window), actual.root,
0, 0, &X, &Y, &cr);
-#if USE_XFT // detect when window changes screen
- int num = 0;
+#if USE_XFT // detect when window centre changes screen
Fl_X11_Screen_Driver *d = (Fl_X11_Screen_Driver*)Fl::screen_driver();
- num = d->screen_num_unscaled(X, Y, actual.width, actual.height);
Fl_X11_Window_Driver *wd = Fl_X11_Window_Driver::driver(window);
int olds = wd->screen_num();
+ int num = d->screen_num_unscaled(X+ actual.width/2, Y +actual.height/2);
+ if (num == -1) num = olds;
float s = d->scale(num);
if (num != olds) {
if (s != d->scale(olds) &&