summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Fl_x.cxx3
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H1
-rw-r--r--src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx12
3 files changed, 10 insertions, 6 deletions
diff --git a/src/Fl_x.cxx b/src/Fl_x.cxx
index 6f048aee5..cb87b9ee9 100644
--- a/src/Fl_x.cxx
+++ b/src/Fl_x.cxx
@@ -689,6 +689,9 @@ void fl_open_display() {
if (!d) Fl::fatal("Can't open display: %s",XDisplayName(0));
fl_open_display(d);
+ // the unique GC used by all X windows
+ GC gc = XCreateGC(fl_display, RootWindow(fl_display, fl_screen), 0, 0);
+ Fl_Display_Device::display_device()->driver()->gc(gc);
}
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
index c8d12d880..ef225092d 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.H
@@ -42,6 +42,7 @@ public:
Fl_Xlib_Graphics_Driver(void);
virtual int has_feature(driver_feature mask) { return mask & NATIVE; }
virtual void *gc() { return gc_; }
+ virtual void gc(void *value);
char can_do_alpha_blending();
// --- bitmap stuff
diff --git a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
index adc1c9362..83103c7e4 100644
--- a/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
+++ b/src/drivers/Xlib/Fl_Xlib_Graphics_Driver.cxx
@@ -50,15 +50,15 @@ Fl_Graphics_Driver *Fl_Graphics_Driver::newMainGraphicsDriver()
GC Fl_Xlib_Graphics_Driver::gc_ = NULL;
Fl_Xlib_Graphics_Driver::Fl_Xlib_Graphics_Driver(void) {
- if (!gc_) {
- fl_open_display();
- // the unique GC used by all X windows
- gc_ = XCreateGC(fl_display, RootWindow(fl_display, fl_screen), 0, 0);
- fl_gc = gc_;
- }
mask_bitmap_ = NULL;
}
+void Fl_Xlib_Graphics_Driver::gc(void *value) {
+ gc_ = (GC)value;
+ fl_gc = gc_;
+}
+
+
char Fl_Xlib_Graphics_Driver::can_do_alpha_blending() {
return Fl_X::xrender_supported();
}