summaryrefslogtreecommitdiffstats
path: root/qtinterface/interface_qt3/tqpaintdevice.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'qtinterface/interface_qt3/tqpaintdevice.cpp')
-rw-r--r--qtinterface/interface_qt3/tqpaintdevice.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/qtinterface/interface_qt3/tqpaintdevice.cpp b/qtinterface/interface_qt3/tqpaintdevice.cpp
new file mode 100644
index 0000000..846342a
--- /dev/null
+++ b/qtinterface/interface_qt3/tqpaintdevice.cpp
@@ -0,0 +1,123 @@
+/*
+
+Copyright (C) 2010 Timothy Pearson <kb9vqf@pearsoncomputing.net>
+
+This library is free software; you can redistribute it and/or
+modify it under the terms of the GNU 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; see the file COPYING.LIB. If not, write to
+the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+Boston, MA 02110-1301, USA.
+
+*/
+
+#include <tqt.h>
+#include <tqpaintdevice.h>
+
+#ifdef USE_QT4
+
+// the following is necessary to work around breakage in many versions
+// of XFree86's Xlib.h still in use
+// ### which versions?
+#if defined(_XLIB_H_) // crude hack, but...
+#error "cannot include <X11/Xlib.h> before this file"
+#endif
+#define XRegisterIMInstantiateCallback qt_XRegisterIMInstantiateCallback
+#define XUnregisterIMInstantiateCallback qt_XUnregisterIMInstantiateCallback
+#define XSetIMValues qt_XSetIMValues
+#include <X11/Xlib.h>
+#undef XRegisterIMInstantiateCallback
+#undef XUnregisterIMInstantiateCallback
+#undef XSetIMValues
+
+#include <X11/Xutil.h>
+#include <X11/Xos.h>
+#include <X11/Xatom.h>
+
+#include <Qt/qcolormap.h>
+
+/*!
+ Returns the window system handle of the paint device for XRender
+ support. Use of this function is not portable. This function will
+ return 0 if XRender support is not compiled into Qt, if the
+ XRender extension is not supported on the X11 display, or if the
+ handle could not be created.
+*/
+Qt::HANDLE QPaintDevice::x11RenderHandle() const
+{
+// #ifndef QT_NO_XFTFREETYPE
+// return rendhd ? XftDrawPicture( (XftDraw *) rendhd ) : 0;
+// #else
+ return 0;
+// #endif // QT_NO_XFTFREETYPE
+}
+
+static GC* app_gc_tmp = 0; // temporary GC
+static GC* app_gc_tmp_m = 0; // temporary GC (monochrome)
+
+static GC create_gc( int scrn, bool monochrome )
+{
+ GC gc;
+ Display *appDpy = QX11Info::display();
+ if ( monochrome ) {
+ Pixmap pm = XCreatePixmap( appDpy, RootWindow( appDpy, scrn ), 8, 8, 1 );
+ gc = XCreateGC( appDpy, pm, 0, 0 );
+ XFreePixmap( appDpy, pm );
+ } else {
+ if ( QPaintDevice::x11AppDefaultVisual( scrn ) ) {
+ gc = XCreateGC( appDpy, RootWindow( appDpy, scrn ), 0, 0 );
+ } else {
+ Window w;
+ XSetWindowAttributes a;
+ QColormap cmap_background = QColormap::instance( scrn );
+ QColormap cmap_border = QColormap::instance( scrn );
+ a.background_pixel = cmap_background.pixel( Qt::black );
+ a.border_pixel = cmap_border.pixel( Qt::black );
+
+ a.colormap = QPaintDevice::x11AppColormap( scrn );
+ w = XCreateWindow( appDpy, RootWindow( appDpy, scrn ), 0, 0, 100, 100,
+ 0, QPaintDevice::x11AppDepth( scrn ), InputOutput,
+ (Visual*)QPaintDevice::x11AppVisual( scrn ),
+ CWBackPixel|CWBorderPixel|CWColormap, &a );
+ gc = XCreateGC( appDpy, w, 0, 0 );
+ XDestroyWindow( appDpy, w );
+ }
+ }
+ XSetGraphicsExposures( appDpy, gc, False );
+ return gc;
+}
+
+GC qt_xget_temp_gc( int scrn, bool monochrome ) // get temporary GC
+{
+ int appScreenCount = QApplication::desktop()->numScreens();
+ if ( scrn < 0 || scrn >= appScreenCount ) {
+ qDebug("invalid screen (tmp) %d %d", scrn, appScreenCount );
+ QWidget* bla = 0;
+ bla->setName("hello");
+ }
+ GC gc;
+ if ( monochrome ) {
+ if ( !app_gc_tmp_m ) // create GC for bitmap
+ memset( (app_gc_tmp_m = new GC[appScreenCount]), 0, appScreenCount * sizeof( GC ) );
+ if ( !app_gc_tmp_m[scrn] )
+ app_gc_tmp_m[scrn] = create_gc( scrn, TRUE );
+ gc = app_gc_tmp_m[scrn];
+ } else { // create standard GC
+ if ( !app_gc_tmp )
+ memset( (app_gc_tmp = new GC[appScreenCount]), 0, appScreenCount * sizeof( GC ) );
+ if ( !app_gc_tmp[scrn] )
+ app_gc_tmp[scrn] = create_gc( scrn, FALSE );
+ gc = app_gc_tmp[scrn];
+ }
+ return gc;
+}
+
+#endif // USE_QT4 \ No newline at end of file