From a6163888f3c56123b1db313743c6147ba498732c Mon Sep 17 00:00:00 2001 From: Yuval Adam Date: Fri, 8 Aug 2014 14:42:07 +0300 Subject: Add third_party libs --- .../windows/fltk-1.1.10/test/list_visuals.cxx | 241 +++++++++++++++++++++ 1 file changed, 241 insertions(+) create mode 100644 third_party/windows/fltk-1.1.10/test/list_visuals.cxx (limited to 'third_party/windows/fltk-1.1.10/test/list_visuals.cxx') diff --git a/third_party/windows/fltk-1.1.10/test/list_visuals.cxx b/third_party/windows/fltk-1.1.10/test/list_visuals.cxx new file mode 100644 index 0000000..4d56996 --- /dev/null +++ b/third_party/windows/fltk-1.1.10/test/list_visuals.cxx @@ -0,0 +1,241 @@ +// +// "$Id: list_visuals.cxx 5519 2006-10-11 03:12:15Z mike $" +// +// Visual list utility for the Fast Light Tool Kit (FLTK). +// +// List all the visuals on the screen, and dumps anything interesting +// about them to stdout. +// +// Does not use FLTK. +// +// This file may be #included in another program to make a function to +// call to list the visuals. Fl.H must be included first to indicate this. +// +// Copyright 1998-2005 by Bill Spitzak and others. +// +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Library General Public +// License as published by the Free Software Foundation; either +// version 2 of the License, or (at your option) any later version. +// +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Library General Public License for more details. +// +// You should have received a copy of the GNU Library General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 +// USA. +// +// Please report all bugs and problems on the following page: +// +// http://www.fltk.org/str.php +// + +#if defined(WIN32) || defined(__APPLE__) +#include +#include + +int main(int, char**) { + fl_alert("Currently, this program works only under X."); + return 1; +} + +#else + +#include "config.h" + +#ifndef Fl_H + +#include +#include +#include +#include +#include + +Display *fl_display; +int fl_screen; +const char *dname; +void fl_open_display() { + fl_display = XOpenDisplay(dname); + if (!fl_display) { + fprintf(stderr,"Can't open display: %s\n",XDisplayName(dname)); + exit(1); + } + fl_screen = DefaultScreen(fl_display); +} + +#endif + +const char *ClassNames[] = { + "StaticGray ", + "GrayScale ", + "StaticColor", + "PseudoColor", + "TrueColor ", + "DirectColor" +}; + +// SERVER_OVERLAY_VISUALS property element: +typedef struct _OverlayInfo { + long overlay_visual; + long transparent_type; + long value; + long layer; +} OverlayInfo; + +#if HAVE_MULTIBUF +#include +#endif + +#if HAVE_XDBE +#include +#endif + +static void print_mask(XVisualInfo* p) { + int n = 0; + int what = 0; + int print_anything = 0; + char buf[20]; + char *q = buf; + *q = 0; + int b; unsigned int m; for (b=32,m=0x80000000; ; b--,m>>=1) { + int new_what = 0; + if (p->red_mask&m) new_what = 'r'; + else if (p->green_mask&m) new_what = 'g'; + else if (p->blue_mask&m) new_what = 'b'; + else new_what = '?'; + if (new_what != what) { + if (what && (what != '?' || print_anything)) { + q += sprintf(q,"%d%c", n, what); + print_anything = 1; + } + what = new_what; + n = 1; + } else { + n++; + } + if (!b) break; + } + printf("%7s", buf); +} + +void list_visuals() { + fl_open_display(); + XVisualInfo vTemplate; + int num; + XVisualInfo *visualList = XGetVisualInfo(fl_display,0,&vTemplate,&num); + + XPixmapFormatValues *pfvlist; + static int numpfv; + pfvlist = XListPixmapFormats(fl_display, &numpfv); + + OverlayInfo *overlayInfo = 0; + int numoverlayinfo = 0; + Atom overlayVisualsAtom = XInternAtom(fl_display,"SERVER_OVERLAY_VISUALS",1); + if (overlayVisualsAtom) { + unsigned long sizeData, bytesLeft; + Atom actualType; + int actualFormat; + if (!XGetWindowProperty(fl_display, RootWindow(fl_display, fl_screen), + overlayVisualsAtom, 0L, 10000L, False, + overlayVisualsAtom, &actualType, &actualFormat, + &sizeData, &bytesLeft, + (unsigned char **) &overlayInfo)) + numoverlayinfo = int(sizeData/4); + } + +#if HAVE_MULTIBUF + int event_base, error_base; + XmbufBufferInfo *mbuf, *sbuf; + int nmbuf = 0, nsbuf = 0; + if (XmbufQueryExtension(fl_display,&event_base, &error_base)) { + XmbufGetScreenInfo(fl_display,RootWindow(fl_display,fl_screen), + &nmbuf, &mbuf, &nsbuf, &sbuf); + } +#endif + +#if HAVE_XDBE + int event_base, error_base; + int numdouble = 0; + XdbeVisualInfo *dbe = 0; + if (XdbeQueryExtension(fl_display, &event_base, &error_base)) { + Drawable root = RootWindow(fl_display,fl_screen); + int numscreens = 1; + XdbeScreenVisualInfo *a = XdbeGetVisualInfo(fl_display,&root,&numscreens); + if (!a) printf("error getting double buffer visuals\n"); + else { + dbe = a->visinfo; + numdouble = a->count; + } + } +#endif + + for (int i=0; i= pfvlist+numpfv) {pfv = 0; break;} // should not happen! + if (pfv->depth == p->depth) break; + } + + int j = pfv ? pfv->bits_per_pixel : 0; + printf(" %2ld: %s %2d/%d", p->visualid, ClassNames[p->c_class], + p->depth, j); + if (j < 10) putchar(' '); + + print_mask(p); + + for (j=0; joverlay_visual == long(p->visualid)) { + printf(" overlay("); + if (o->transparent_type==1) printf("transparent pixel %ld, ",o->value); + else if (o->transparent_type==2) printf("transparent mask %ld, ",o->value); + else printf("opaque, "); + printf("layer %ld)", o->layer); + } + } + +#if HAVE_MULTIBUF + for (j=0; jvisualid == p->visualid) + printf(" multibuffer(%d)", m->max_buffers); + } + for (j=0; jvisualid == p->visualid) + printf(" stereo multibuffer(%d)", m->max_buffers); + } +#endif + +#if HAVE_XDBE + for (j = 0; j < numdouble; j++) if (dbe[j].visual == p->visualid) + printf(" doublebuf(perflevel %d)",dbe[j].perflevel); +#endif + + if (p->visualid==XVisualIDFromVisual(DefaultVisual(fl_display,fl_screen))) + printf(" (default visual)"); + + putchar('\n'); + } +} + +#endif + +#ifndef Fl_H +int main(int argc, char **argv) { + if (argc == 1); + else if (argc == 2 && argv[1][0]!='-') dname = argv[1]; + else {fprintf(stderr,"usage: %s \n",argv[0]); exit(1);} + list_visuals(); + return 0; +} +#endif + +// +// End of "$Id: list_visuals.cxx 5519 2006-10-11 03:12:15Z mike $". +// -- cgit v1.3.1