diff options
| author | Albrecht Schlosser <albrechts.fltk@online.de> | 2011-01-07 12:39:51 +0000 |
|---|---|---|
| committer | Albrecht Schlosser <albrechts.fltk@online.de> | 2011-01-07 12:39:51 +0000 |
| commit | cdaff761f7259e9a0bafa349257abf538afe4b9f (patch) | |
| tree | 629db8740ced41dd05dd510a53511f8080441d43 | |
| parent | 3c25646121df925034cd3f306e8b8a0dcefcb2b5 (diff) | |
src/screen_xywh.cxx:
Fix X11 screen_init() if Xinerama is available, but not active.
Still investigating why there are nonsense dpi values under Cygwin/X11,
but maybe this is an X server problem.
test/hello.cxx:
Extended test statements - don't forget to remove before release.
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3@8210 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
| -rw-r--r-- | src/screen_xywh.cxx | 21 | ||||
| -rw-r--r-- | test/hello.cxx | 14 |
2 files changed, 24 insertions, 11 deletions
diff --git a/src/screen_xywh.cxx b/src/screen_xywh.cxx index 6becbf979..9ed788d0b 100644 --- a/src/screen_xywh.cxx +++ b/src/screen_xywh.cxx @@ -56,7 +56,7 @@ typedef BOOL (WINAPI* fl_gmi_func)(HMONITOR, LPMONITORINFO); static fl_gmi_func fl_gmi = NULL; // used to get a proc pointer for GetMonitorInfoA static RECT screens[16]; -static int dpi[16][2] = { { 0.0f, 0.0f } }; +static float dpi[16][2]; static BOOL CALLBACK screen_cb(HMONITOR mon, HDC, LPRECT r, LPARAM) { if (num_screens >= 16) return TRUE; @@ -135,14 +135,19 @@ static void screen_init() { if (XineramaIsActive(fl_display)) { screens = XineramaQueryScreens(fl_display, &num_screens); - } else num_screens = 1; - - int i; - for (i=0; i<num_screens; i++) { - int mm = DisplayWidthMM(fl_display, i); - dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f; + int i; + for (i=0; i<num_screens; i++) { + int mm = DisplayWidthMM(fl_display, i); + dpi[i][0] = mm ? screens[i].width*25.4f/mm : 0.0f; + mm = DisplayHeightMM(fl_display, fl_screen); + dpi[i][1] = mm ? screens[i].height*25.4f/mm : dpi[i][0]; + } + } else { // ! XineramaIsActive() + num_screens = 1; + int mm = DisplayWidthMM(fl_display, fl_screen); + dpi[0][0] = mm ? Fl::w()*25.4f/mm : 0.0f; mm = DisplayHeightMM(fl_display, fl_screen); - dpi[i][1] = mm ? screens[i].height*25.4f/mm : dpi[i][0]; + dpi[0][1] = mm ? Fl::h()*25.4f/mm : dpi[0][0]; } } #else diff --git a/test/hello.cxx b/test/hello.cxx index e4372e49a..d0daff93f 100644 --- a/test/hello.cxx +++ b/test/hello.cxx @@ -30,9 +30,17 @@ #include <FL/Fl_Box.H> int main(int argc, char **argv) { - float h, v; - Fl::screen_dpi(h, v); - printf("Screen res is %g x %g ppi\n", h, v); +#if (1) // FIXME: test screen dimensions and resolution. Remove before release ! + float ppi_h, ppi_v; + int x,y,w,h; + int n = Fl::screen_count(); + for (int i=0; i<n; i++) { + Fl::screen_xywh(x,y,w,h,i); + Fl::screen_dpi(ppi_h, ppi_v, i); + printf("Screen %2d (%4d,%4d,%4d,%4d) res. is %7.3f x %7.3f ppi\n", i, x,y,w,h, ppi_h, ppi_v); + } + fflush(stdout); +#endif // FIXME: test screen dimensions and resolution. Remove before release ! Fl_Window *window = new Fl_Window(340,180); Fl_Box *box = new Fl_Box(20,40,300,100,"Hello, World!"); box->box(FL_UP_BOX); |
