diff options
| author | Matthias Melcher <fltk@matthiasm.com> | 2016-02-13 16:12:57 +0000 |
|---|---|---|
| committer | Matthias Melcher <fltk@matthiasm.com> | 2016-02-13 16:12:57 +0000 |
| commit | d8f96b579d9359f62b984b2043a8f8c6854efe98 (patch) | |
| tree | 00b5fa4cd4a195aa82431b0c211a717d6e4b6d86 /src/Fl_visual.cxx | |
| parent | 4af616a7a27c3104938bf580502c762becd4417b (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.cxx | 90 |
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$". |
