// Author: Robert Roebling
// Id: $Id$
// Copyright: (c) 1998 Robert Roebling
-// Licence: wxWindows licence
+// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
#ifdef __GNUG__
#include "wx/dcscreen.h"
#include "wx/window.h"
+#include "gdk/gdk.h"
+#include "gtk/gtk.h"
+
//-----------------------------------------------------------------------------
// global data initialization
//-----------------------------------------------------------------------------
GdkWindow *wxScreenDC::sm_overlayWindow = (GdkWindow*) NULL;
- int wxScreenDC::sm_overlayWindowX = 0;
- int wxScreenDC::sm_overlayWindowY = 0;
+int wxScreenDC::sm_overlayWindowX = 0;
+int wxScreenDC::sm_overlayWindowY = 0;
-
//-----------------------------------------------------------------------------
// create X window
//-----------------------------------------------------------------------------
StructureNotifyMask,
PropertyChangeMask,
VisibilityChangeMask,
- 0, /* PROXIMITY_IN */
- 0 /* PROXIMTY_OUT */
+ 0, /* PROXIMITY_IN */
+ 0 /* PROXIMTY_OUT */
};
GdkWindow*
gdk_window_transparent_new ( GdkWindow *parent,
- GdkWindowAttr *attributes,
- gint attributes_mask)
+ GdkWindowAttr *attributes,
+ gint attributes_mask)
{
GdkWindow *window;
GdkWindowPrivate *gprivate;
gprivate->height = (attributes->height > 1) ? (attributes->height) : (1);
gprivate->window_type = attributes->window_type;
gprivate->extension_events = FALSE;
+
+#if (GTK_MINOR_VERSION == 0)
gprivate->dnd_drag_data_type = None;
gprivate->dnd_drag_data_typesavail =
gprivate->dnd_drop_data_typesavail = NULL;
gprivate->dnd_drop_data_numtypesavail =
gprivate->dnd_drag_data_numtypesavail = 0;
gprivate->dnd_drag_eventmask = gprivate->dnd_drag_savedeventmask = 0;
+#endif
gprivate->filters = NULL;
gprivate->children = NULL;
for (i = 0; i < my_nevent_masks; i++)
{
if (attributes->event_mask & (1 << (i + 1)))
- xattributes.event_mask |= my_event_masks_table[i];
+ xattributes.event_mask |= my_event_masks_table[i];
}
if (xattributes.event_mask)
xattributes_mask |= CWEventMask;
if(attributes_mask & GDK_WA_NOREDIR) {
- xattributes.override_redirect =
- (attributes->override_redirect == FALSE)?False:True;
- xattributes_mask |= CWOverrideRedirect;
+ xattributes.override_redirect =
+ (attributes->override_redirect == FALSE)?False:True;
+ xattributes_mask |= CWOverrideRedirect;
} else
xattributes.override_redirect = False;
depth = visual->depth;
if (attributes_mask & GDK_WA_COLORMAP)
- gprivate->colormap = attributes->colormap;
+ gprivate->colormap = attributes->colormap;
else
- gprivate->colormap = gdk_colormap_get_system ();
+ gprivate->colormap = gdk_colormap_get_system ();
- xattributes.colormap = ((GdkColormapPrivate*) gprivate->colormap)->xcolormap;
- xattributes_mask |= CWColormap;
+ xattributes.colormap = ((GdkColormapPrivate*) gprivate->colormap)->xcolormap;
+ xattributes_mask |= CWColormap;
- xparent = gdk_root_window;
+ xparent = gdk_root_window;
- xattributes.save_under = True;
- xattributes.override_redirect = True;
- xattributes.cursor = None;
- xattributes_mask |= CWSaveUnder | CWOverrideRedirect;
+ xattributes.save_under = True;
+ xattributes.override_redirect = True;
+ xattributes.cursor = None;
+ xattributes_mask |= CWSaveUnder | CWOverrideRedirect;
gprivate->xwindow = XCreateWindow (gprivate->xdisplay, xparent,
- x, y, gprivate->width, gprivate->height,
- 0, depth, gclass, xvisual,
- xattributes_mask, &xattributes);
+ x, y, gprivate->width, gprivate->height,
+ 0, depth, gclass, xvisual,
+ xattributes_mask, &xattributes);
gdk_window_ref (window);
gdk_xid_table_insert (&gprivate->xwindow, window);
if (attributes_mask & GDK_WA_TITLE)
title = attributes->title;
else
-#if (GTK_MINOR_VERSION == 1)
+#if (GTK_MINOR_VERSION > 0)
title = "Unknown"; // GLH: Well I don't know for the moment what to write here.
#else
title = gdk_progname;
IMPLEMENT_DYNAMIC_CLASS(wxScreenDC,wxPaintDC)
-wxScreenDC::wxScreenDC(void)
+wxScreenDC::wxScreenDC()
{
- m_ok = FALSE;
- m_window = (GdkWindow *) NULL;
- m_cmap = gdk_colormap_get_system();
-
- if (sm_overlayWindow)
- {
- m_window = sm_overlayWindow;
- m_deviceOriginX = - sm_overlayWindowX;
- m_deviceOriginY = - sm_overlayWindowY;
- }
- else
- m_window = GDK_ROOT_PARENT();
-
- SetUpDC();
-
- gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
- gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
- gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
- gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
+ m_ok = FALSE;
+ m_window = (GdkWindow *) NULL;
+ m_cmap = gdk_colormap_get_system();
+
+ if (sm_overlayWindow)
+ {
+ m_window = sm_overlayWindow;
+ m_deviceOriginX = - sm_overlayWindowX;
+ m_deviceOriginY = - sm_overlayWindowY;
+ }
+ else
+ {
+ m_window = GDK_ROOT_PARENT();
+ }
+
+ SetUpDC();
+
+ gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
+ gdk_gc_set_subwindow( m_brushGC, GDK_INCLUDE_INFERIORS );
+ gdk_gc_set_subwindow( m_textGC, GDK_INCLUDE_INFERIORS );
+ gdk_gc_set_subwindow( m_bgGC, GDK_INCLUDE_INFERIORS );
}
-wxScreenDC::~wxScreenDC(void)
+wxScreenDC::~wxScreenDC()
{
- EndDrawingOnTop();
+ EndDrawingOnTop();
}
bool wxScreenDC::StartDrawingOnTop( wxWindow *window )
{
- if (!window) return StartDrawingOnTop();
-
- int x = 0;
- int y = 0;
- window->GetPosition( &x, &y );
- int w = 0;
- int h = 0;
- window->GetSize( &w, &h );
- window->ClientToScreen( &x, &y );
-
- wxRectangle rect;
- rect.x = x;
- rect.y = y;
- rect.width = 0;
- rect.height = 0;
-
- return StartDrawingOnTop( &rect );
+ if (!window) return StartDrawingOnTop();
+
+ int x = 0;
+ int y = 0;
+ window->GetPosition( &x, &y );
+ int w = 0;
+ int h = 0;
+ window->GetSize( &w, &h );
+ window->ClientToScreen( &x, &y );
+
+ wxRect rect;
+ rect.x = x;
+ rect.y = y;
+ rect.width = 0;
+ rect.height = 0;
+
+ return StartDrawingOnTop( &rect );
}
-bool wxScreenDC::StartDrawingOnTop( wxRectangle *rect )
+bool wxScreenDC::StartDrawingOnTop( wxRect *rect )
{
int x = 0;
int y = 0;
width = rect->width;
height = rect->height;
}
-
+
sm_overlayWindowX = x;
sm_overlayWindowY = y;
attr.wclass = GDK_INPUT_OUTPUT;
attr.event_mask = 0;
attr.window_type = GDK_WINDOW_TEMP;
-
+
// GTK cannot set transparent backgrounds. :-(
sm_overlayWindow = gdk_window_transparent_new( NULL, &attr, GDK_WA_NOREDIR | GDK_WA_X | GDK_WA_Y );
-
+
if (sm_overlayWindow) gdk_window_show( sm_overlayWindow );
- return (sm_overlayWindow);
+ return (sm_overlayWindow != NULL);
}
-bool wxScreenDC::EndDrawingOnTop(void)
+bool wxScreenDC::EndDrawingOnTop()
{
- if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
-
- sm_overlayWindow = NULL;
- sm_overlayWindowX = 0;
- sm_overlayWindowY = 0;
-
- return TRUE;
+ if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow );
+
+ sm_overlayWindow = NULL;
+ sm_overlayWindowX = 0;
+ sm_overlayWindowY = 0;
+
+ return TRUE;
}