Skip to content

Commit

Permalink
X11: fix Fl::w() and Fl::h() when the screen is rescaled.
Browse files Browse the repository at this point in the history
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.4@13041 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
  • Loading branch information
Manolo Gouy authored and Manolo Gouy committed Sep 6, 2018
1 parent 9a105ea commit 6e5c5d5
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 23 deletions.
1 change: 1 addition & 0 deletions src/drivers/X11/Fl_X11_Screen_Driver.H
Expand Up @@ -33,6 +33,7 @@ class Fl_Window;

class FL_EXPORT Fl_X11_Screen_Driver : public Fl_Screen_Driver
{
friend Fl_Screen_Driver;
protected:
typedef struct {
short x_org;
Expand Down
57 changes: 34 additions & 23 deletions src/drivers/X11/Fl_X11_Screen_Driver.cxx
Expand Up @@ -113,10 +113,13 @@ static double missed_timeout_by;
*/
Fl_Screen_Driver *Fl_Screen_Driver::newScreenDriver()
{
#if !USE_XFT
Fl_X11_Screen_Driver *d = new Fl_X11_Screen_Driver();
#if USE_XFT
for (int i = 0; i < MAX_SCREENS; i++) d->screens[i].scale = 1;
#else
secret_input_character = '*';
#endif
return new Fl_X11_Screen_Driver();
return d;
}


Expand Down Expand Up @@ -209,7 +212,7 @@ static int fl_workarea_xywh[4] = { -1, -1, -1, -1 };

void Fl_X11_Screen_Driver::init_workarea()
{
open_display();
if (!fl_display) open_display();

Atom actual;
unsigned long count, remaining;
Expand All @@ -227,45 +230,56 @@ void Fl_X11_Screen_Driver::init_workarea()
(unsigned char **)&xywh) || !xywh || !xywh[2] ||
!xywh[3])
{
Fl::screen_xywh(fl_workarea_xywh[0],
fl_workarea_xywh[1],
fl_workarea_xywh[2],
fl_workarea_xywh[3], 0);
fl_workarea_xywh[0] = screens[0].x_org;
fl_workarea_xywh[1] = screens[0].y_org;
fl_workarea_xywh[2] = screens[0].width;
fl_workarea_xywh[3] = screens[0].height;
}
else
{
#if USE_XFT
float s = screens[0].scale;
#else
float s = 1;
#endif
fl_workarea_xywh[0] = xywh[0] / s;
fl_workarea_xywh[1] = xywh[1] / s;
fl_workarea_xywh[2] = xywh[2] / s;
fl_workarea_xywh[3] = xywh[3] / s;
fl_workarea_xywh[0] = xywh[0];
fl_workarea_xywh[1] = xywh[1];
fl_workarea_xywh[2] = xywh[2];
fl_workarea_xywh[3] = xywh[3];
}
if ( xywh ) { XFree(xywh); xywh = 0; }
}


int Fl_X11_Screen_Driver::x() {
if (fl_workarea_xywh[0] < 0) init_workarea();
return fl_workarea_xywh[0];
return fl_workarea_xywh[0]
#if USE_XFT
/ screens[0].scale
#endif
;
}

int Fl_X11_Screen_Driver::y() {
if (fl_workarea_xywh[0] < 0) init_workarea();
return fl_workarea_xywh[1];
return fl_workarea_xywh[1]
#if USE_XFT
/ screens[0].scale
#endif
;
}

int Fl_X11_Screen_Driver::w() {
if (fl_workarea_xywh[0] < 0) init_workarea();
return fl_workarea_xywh[2];
return fl_workarea_xywh[2]
#if USE_XFT
/ screens[0].scale
#endif
;
}

int Fl_X11_Screen_Driver::h() {
if (fl_workarea_xywh[0] < 0) init_workarea();
return fl_workarea_xywh[3];
return fl_workarea_xywh[3]
#if USE_XFT
/ screens[0].scale
#endif
;
}

#define USE_XRANDR (HAVE_DLSYM && HAVE_DLFCN_H) // means attempt to dynamically load libXrandr.so
Expand Down Expand Up @@ -326,9 +340,6 @@ void Fl_X11_Screen_Driver::init() {
screens[i].y_org = xsi[i].y_org;
screens[i].width = xsi[i].width;
screens[i].height = xsi[i].height;
#if USE_XFT
screens[i].scale = 1;
#endif
if (dpi_by_randr) {
dpi[i][0] = dpih;
dpi[i][1] = dpiv;
Expand Down

0 comments on commit 6e5c5d5

Please sign in to comment.