summaryrefslogtreecommitdiff
path: root/src/Fl_visual.cxx
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2016-02-13 16:12:57 +0000
committerMatthias Melcher <fltk@matthiasm.com>2016-02-13 16:12:57 +0000
commitd8f96b579d9359f62b984b2043a8f8c6854efe98 (patch)
tree00b5fa4cd4a195aa82431b0c211a717d6e4b6d86 /src/Fl_visual.cxx
parent4af616a7a27c3104938bf580502c762becd4417b (diff)
Moed Fl::visual and System_Scheme to the driver
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.3-porting@11166 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
Diffstat (limited to 'src/Fl_visual.cxx')
-rw-r--r--src/Fl_visual.cxx90
1 files changed, 4 insertions, 86 deletions
diff --git a/src/Fl_visual.cxx b/src/Fl_visual.cxx
index 65534e5a5..e3c08806e 100644
--- a/src/Fl_visual.cxx
+++ b/src/Fl_visual.cxx
@@ -20,7 +20,7 @@
#include <config.h>
#include <FL/Fl.H>
-#include <FL/x.H>
+#include <FL/Fl_Screen_Driver.H>
/** \fn Fl::visual(int flags)
Selects a visual so that your graphics are drawn correctly. This is
@@ -56,93 +56,11 @@
FLTK suceeded in turing them on. Your program will still work even if
this returns false (it just won't look as good).
*/
-#ifdef WIN32
-int Fl::visual(int flags) {
- fl_GetDC(0);
- if (flags & FL_DOUBLE) return 0;
- if (!(flags & FL_INDEX) &&
- GetDeviceCaps(fl_gc,BITSPIXEL) <= 8) return 0;
- if ((flags & FL_RGB8) && GetDeviceCaps(fl_gc,BITSPIXEL)<24) return 0;
- return 1;
+int Fl::visual(int flags)
+{
+ return screen_driver()->visual(flags);
}
-#elif defined(__APPLE__) // PORTME: Fl_Screen_Driver - platform visuals
-// \todo Mac : need to implement Visual flags
-int Fl::visual(int flags) {
- (void)flags;
- return 1;
-}
-
-#elif defined(FL_PORTING)
-# pragma message "FL_PORTING: add code to handle RGB and color index visuals"
-
-#else
-
-#if USE_XDBE
-#include <X11/extensions/Xdbe.h>
-#endif
-
-static int test_visual(XVisualInfo& v, int flags) {
- if (v.screen != fl_screen) return 0;
-#if USE_COLORMAP
- if (!(flags & FL_INDEX)) {
- if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
- if (v.depth <= 8) return 0; // fltk will work better in colormap mode
- }
- if (flags & FL_RGB8) {
- if (v.depth < 24) return 0;
- }
- // for now, fltk does not like colormaps of more than 8 bits:
- if ((v.c_class&1) && v.depth > 8) return 0;
-#else
- // simpler if we can't use colormapped visuals at all:
- if (v.c_class != StaticColor && v.c_class != TrueColor) return 0;
-#endif
-#if USE_XDBE
- if (flags & FL_DOUBLE) {
- static XdbeScreenVisualInfo *xdbejunk;
- if (!xdbejunk) {
- int event_base, error_base;
- if (!XdbeQueryExtension(fl_display, &event_base, &error_base)) return 0;
- Drawable root = RootWindow(fl_display,fl_screen);
- int numscreens = 1;
- xdbejunk = XdbeGetVisualInfo(fl_display,&root,&numscreens);
- if (!xdbejunk) return 0;
- }
- for (int j = 0; ; j++) {
- if (j >= xdbejunk->count) return 0;
- if (xdbejunk->visinfo[j].visual == v.visualid) break;
- }
- }
-#endif
- return 1;
-}
-
-int Fl::visual(int flags) {
-#if USE_XDBE == 0
- if (flags & FL_DOUBLE) return 0;
-#endif
- fl_open_display();
- // always use default if possible:
- if (test_visual(*fl_visual, flags)) return 1;
- // get all the visuals:
- XVisualInfo vTemplate;
- int num;
- XVisualInfo *visualList = XGetVisualInfo(fl_display, 0, &vTemplate, &num);
- // find all matches, use the one with greatest depth:
- XVisualInfo *found = 0;
- for (int i=0; i<num; i++) if (test_visual(visualList[i], flags)) {
- if (!found || found->depth < visualList[i].depth)
- found = &visualList[i];
- }
- if (!found) {XFree((void*)visualList); return 0;}
- fl_visual = found;
- fl_colormap = XCreateColormap(fl_display, RootWindow(fl_display,fl_screen),
- fl_visual->visual, AllocNone);
- return 1;
-}
-
-#endif
//
// End of "$Id$".