From dbf858b5d69f53efd3950cae99322f54355aa983 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Mon, 26 Oct 1998 10:56:58 +0000 Subject: [PATCH] Implemented wxScreenDC the hard way INcreased menu bar size Ripped off handles (a few days ago) Corrected $Id:$ somewhere git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@916 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/accel.h | 5 +- include/wx/gtk/app.h | 3 +- include/wx/gtk/bmpbuttn.h | 2 +- include/wx/gtk/brush.h | 2 +- include/wx/gtk/button.h | 2 +- include/wx/gtk/checkbox.h | 2 +- include/wx/gtk/choice.h | 2 +- include/wx/gtk/colour.h | 2 +- include/wx/gtk/combobox.h | 2 +- include/wx/gtk/control.h | 5 +- include/wx/gtk/cursor.h | 5 +- include/wx/gtk/dc.h | 5 +- include/wx/gtk/dcclient.h | 6 +- include/wx/gtk/dcmemory.h | 5 +- include/wx/gtk/dcscreen.h | 25 +++- include/wx/gtk1/accel.h | 5 +- include/wx/gtk1/app.h | 3 +- include/wx/gtk1/bmpbuttn.h | 2 +- include/wx/gtk1/brush.h | 2 +- include/wx/gtk1/button.h | 2 +- include/wx/gtk1/checkbox.h | 2 +- include/wx/gtk1/choice.h | 2 +- include/wx/gtk1/colour.h | 2 +- include/wx/gtk1/combobox.h | 2 +- include/wx/gtk1/control.h | 5 +- include/wx/gtk1/cursor.h | 5 +- include/wx/gtk1/dc.h | 5 +- include/wx/gtk1/dcclient.h | 6 +- include/wx/gtk1/dcmemory.h | 5 +- include/wx/gtk1/dcscreen.h | 25 +++- src/gtk/button.cpp | 2 +- src/gtk/checkbox.cpp | 2 +- src/gtk/choice.cpp | 2 +- src/gtk/colour.cpp | 5 +- src/gtk/combobox.cpp | 2 +- src/gtk/control.cpp | 2 +- src/gtk/cursor.cpp | 2 +- src/gtk/data.cpp | 4 +- src/gtk/dc.cpp | 2 +- src/gtk/dcclient.cpp | 18 ++- src/gtk/dcscreen.cpp | 292 ++++++++++++++++++++++++++++++++----- src/gtk/frame.cpp | 2 +- src/gtk1/button.cpp | 2 +- src/gtk1/checkbox.cpp | 2 +- src/gtk1/choice.cpp | 2 +- src/gtk1/colour.cpp | 5 +- src/gtk1/combobox.cpp | 2 +- src/gtk1/control.cpp | 2 +- src/gtk1/cursor.cpp | 2 +- src/gtk1/data.cpp | 4 +- src/gtk1/dc.cpp | 2 +- src/gtk1/dcclient.cpp | 18 ++- src/gtk1/dcscreen.cpp | 292 ++++++++++++++++++++++++++++++++----- src/gtk1/frame.cpp | 2 +- user/wxTest/wxTest.cpp | 8 +- 55 files changed, 642 insertions(+), 182 deletions(-) diff --git a/include/wx/gtk/accel.h b/include/wx/gtk/accel.h index 9b2f0e69d0..d2eb53c070 100644 --- a/include/wx/gtk/accel.h +++ b/include/wx/gtk/accel.h @@ -1,9 +1,8 @@ ///////////////////////////////////////////////////////////////////////////// // Name: accel.h // Purpose: wxAcceleratorTable class -// Author: Robert -// Modified by: -// RCS-ID: $id$ +// Author: Robert Roebling +// RCS-ID: $Id$ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/app.h b/include/wx/gtk/app.h index 2df05b4886..c697207972 100644 --- a/include/wx/gtk/app.h +++ b/include/wx/gtk/app.h @@ -2,8 +2,7 @@ // Name: app.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/bmpbuttn.h b/include/wx/gtk/bmpbuttn.h index 5d61d0708b..380642dc6a 100644 --- a/include/wx/gtk/bmpbuttn.h +++ b/include/wx/gtk/bmpbuttn.h @@ -2,7 +2,7 @@ // Name: bmpbutton.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/brush.h b/include/wx/gtk/brush.h index 8a9fd41bf4..bd3eeeba5f 100644 --- a/include/wx/gtk/brush.h +++ b/include/wx/gtk/brush.h @@ -2,7 +2,7 @@ // Name: brush.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/button.h b/include/wx/gtk/button.h index f5a88d0a50..f4bfe395ed 100644 --- a/include/wx/gtk/button.h +++ b/include/wx/gtk/button.h @@ -2,7 +2,7 @@ // Name: button.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/checkbox.h b/include/wx/gtk/checkbox.h index 36730fb54b..a2f858b791 100644 --- a/include/wx/gtk/checkbox.h +++ b/include/wx/gtk/checkbox.h @@ -2,7 +2,7 @@ // Name: checkbox.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/choice.h b/include/wx/gtk/choice.h index 2ccd1f22e8..70f5f4bd7e 100644 --- a/include/wx/gtk/choice.h +++ b/include/wx/gtk/choice.h @@ -2,7 +2,7 @@ // Name: choice.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/colour.h b/include/wx/gtk/colour.h index 77e4155350..e994c2e089 100644 --- a/include/wx/gtk/colour.h +++ b/include/wx/gtk/colour.h @@ -2,7 +2,7 @@ // Name: colour.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/combobox.h b/include/wx/gtk/combobox.h index 12c632e480..5b8046a4a5 100644 --- a/include/wx/gtk/combobox.h +++ b/include/wx/gtk/combobox.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Created: 01/02/97 // Id: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/control.h b/include/wx/gtk/control.h index 3e874707d0..80cc74b331 100644 --- a/include/wx/gtk/control.h +++ b/include/wx/gtk/control.h @@ -2,9 +2,8 @@ // Name: control.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/cursor.h b/include/wx/gtk/cursor.h index b760e0b512..f0391af65b 100644 --- a/include/wx/gtk/cursor.h +++ b/include/wx/gtk/cursor.h @@ -2,9 +2,8 @@ // Name: cursor.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/dc.h b/include/wx/gtk/dc.h index 1fca0bcf10..1c778cfbf8 100644 --- a/include/wx/gtk/dc.h +++ b/include/wx/gtk/dc.h @@ -2,9 +2,8 @@ // Name: dc.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk/dcclient.h b/include/wx/gtk/dcclient.h index be532ec577..2797a151cf 100644 --- a/include/wx/gtk/dcclient.h +++ b/include/wx/gtk/dcclient.h @@ -2,9 +2,8 @@ // Name: dcclient.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -103,6 +102,7 @@ class wxPaintDC: public wxDC bool m_isMemDC; void SetUpDC(void); + void Destroy(void); GdkWindow *GetWindow(void); }; diff --git a/include/wx/gtk/dcmemory.h b/include/wx/gtk/dcmemory.h index c5854c5110..be4a0ffa42 100644 --- a/include/wx/gtk/dcmemory.h +++ b/include/wx/gtk/dcmemory.h @@ -2,9 +2,8 @@ // Name: dcmemory.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,7 +28,7 @@ class wxMemoryDC; // wxMemoryDC //----------------------------------------------------------------------------- -class WXDLLEXPORT wxMemoryDC: public wxPaintDC +class wxMemoryDC: public wxPaintDC { DECLARE_DYNAMIC_CLASS(wxMemoryDC) diff --git a/include/wx/gtk/dcscreen.h b/include/wx/gtk/dcscreen.h index fdbb7344cc..c0136643c0 100644 --- a/include/wx/gtk/dcscreen.h +++ b/include/wx/gtk/dcscreen.h @@ -2,19 +2,27 @@ // Name: dcscreen.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKDCSCREENH__ #define __GTKDCSCREENH__ #include "wx/dcclient.h" -class WXDLLEXPORT wxScreenDC: public wxPaintDC +//----------------------------------------------------------------------------- +// classes +//----------------------------------------------------------------------------- + +class wxScreenDC; + +//----------------------------------------------------------------------------- +// wxScreenDC +//----------------------------------------------------------------------------- + +class wxScreenDC: public wxPaintDC { DECLARE_DYNAMIC_CLASS(wxScreenDC) @@ -25,8 +33,15 @@ class WXDLLEXPORT wxScreenDC: public wxPaintDC static bool StartDrawingOnTop( wxWindow *window ); static bool StartDrawingOnTop( wxRectangle *rect = (wxRectangle *) NULL ); static bool EndDrawingOnTop(void); + + // implementation + + static GdkWindow *sm_overlayWindow; + static int sm_overlayWindowX; + static int sm_overlayWindowY; }; #endif + // __GTKDCSCREENH__ diff --git a/include/wx/gtk1/accel.h b/include/wx/gtk1/accel.h index 9b2f0e69d0..d2eb53c070 100644 --- a/include/wx/gtk1/accel.h +++ b/include/wx/gtk1/accel.h @@ -1,9 +1,8 @@ ///////////////////////////////////////////////////////////////////////////// // Name: accel.h // Purpose: wxAcceleratorTable class -// Author: Robert -// Modified by: -// RCS-ID: $id$ +// Author: Robert Roebling +// RCS-ID: $Id$ // Copyright: (c) Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/app.h b/include/wx/gtk1/app.h index 2df05b4886..c697207972 100644 --- a/include/wx/gtk1/app.h +++ b/include/wx/gtk1/app.h @@ -2,8 +2,7 @@ // Name: app.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/bmpbuttn.h b/include/wx/gtk1/bmpbuttn.h index 5d61d0708b..380642dc6a 100644 --- a/include/wx/gtk1/bmpbuttn.h +++ b/include/wx/gtk1/bmpbuttn.h @@ -2,7 +2,7 @@ // Name: bmpbutton.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/brush.h b/include/wx/gtk1/brush.h index 8a9fd41bf4..bd3eeeba5f 100644 --- a/include/wx/gtk1/brush.h +++ b/include/wx/gtk1/brush.h @@ -2,7 +2,7 @@ // Name: brush.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/button.h b/include/wx/gtk1/button.h index f5a88d0a50..f4bfe395ed 100644 --- a/include/wx/gtk1/button.h +++ b/include/wx/gtk1/button.h @@ -2,7 +2,7 @@ // Name: button.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/checkbox.h b/include/wx/gtk1/checkbox.h index 36730fb54b..a2f858b791 100644 --- a/include/wx/gtk1/checkbox.h +++ b/include/wx/gtk1/checkbox.h @@ -2,7 +2,7 @@ // Name: checkbox.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/choice.h b/include/wx/gtk1/choice.h index 2ccd1f22e8..70f5f4bd7e 100644 --- a/include/wx/gtk1/choice.h +++ b/include/wx/gtk1/choice.h @@ -2,7 +2,7 @@ // Name: choice.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/colour.h b/include/wx/gtk1/colour.h index 77e4155350..e994c2e089 100644 --- a/include/wx/gtk1/colour.h +++ b/include/wx/gtk1/colour.h @@ -2,7 +2,7 @@ // Name: colour.h // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/combobox.h b/include/wx/gtk1/combobox.h index 12c632e480..5b8046a4a5 100644 --- a/include/wx/gtk1/combobox.h +++ b/include/wx/gtk1/combobox.h @@ -4,7 +4,7 @@ // Author: Robert Roebling // Created: 01/02/97 // Id: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/control.h b/include/wx/gtk1/control.h index 3e874707d0..80cc74b331 100644 --- a/include/wx/gtk1/control.h +++ b/include/wx/gtk1/control.h @@ -2,9 +2,8 @@ // Name: control.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling, Julian Smart // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/cursor.h b/include/wx/gtk1/cursor.h index b760e0b512..f0391af65b 100644 --- a/include/wx/gtk1/cursor.h +++ b/include/wx/gtk1/cursor.h @@ -2,9 +2,8 @@ // Name: cursor.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/dc.h b/include/wx/gtk1/dc.h index 1fca0bcf10..1c778cfbf8 100644 --- a/include/wx/gtk1/dc.h +++ b/include/wx/gtk1/dc.h @@ -2,9 +2,8 @@ // Name: dc.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/include/wx/gtk1/dcclient.h b/include/wx/gtk1/dcclient.h index be532ec577..2797a151cf 100644 --- a/include/wx/gtk1/dcclient.h +++ b/include/wx/gtk1/dcclient.h @@ -2,9 +2,8 @@ // Name: dcclient.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -103,6 +102,7 @@ class wxPaintDC: public wxDC bool m_isMemDC; void SetUpDC(void); + void Destroy(void); GdkWindow *GetWindow(void); }; diff --git a/include/wx/gtk1/dcmemory.h b/include/wx/gtk1/dcmemory.h index c5854c5110..be4a0ffa42 100644 --- a/include/wx/gtk1/dcmemory.h +++ b/include/wx/gtk1/dcmemory.h @@ -2,9 +2,8 @@ // Name: dcmemory.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -29,7 +28,7 @@ class wxMemoryDC; // wxMemoryDC //----------------------------------------------------------------------------- -class WXDLLEXPORT wxMemoryDC: public wxPaintDC +class wxMemoryDC: public wxPaintDC { DECLARE_DYNAMIC_CLASS(wxMemoryDC) diff --git a/include/wx/gtk1/dcscreen.h b/include/wx/gtk1/dcscreen.h index fdbb7344cc..c0136643c0 100644 --- a/include/wx/gtk1/dcscreen.h +++ b/include/wx/gtk1/dcscreen.h @@ -2,19 +2,27 @@ // Name: dcscreen.h // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// - #ifndef __GTKDCSCREENH__ #define __GTKDCSCREENH__ #include "wx/dcclient.h" -class WXDLLEXPORT wxScreenDC: public wxPaintDC +//----------------------------------------------------------------------------- +// classes +//----------------------------------------------------------------------------- + +class wxScreenDC; + +//----------------------------------------------------------------------------- +// wxScreenDC +//----------------------------------------------------------------------------- + +class wxScreenDC: public wxPaintDC { DECLARE_DYNAMIC_CLASS(wxScreenDC) @@ -25,8 +33,15 @@ class WXDLLEXPORT wxScreenDC: public wxPaintDC static bool StartDrawingOnTop( wxWindow *window ); static bool StartDrawingOnTop( wxRectangle *rect = (wxRectangle *) NULL ); static bool EndDrawingOnTop(void); + + // implementation + + static GdkWindow *sm_overlayWindow; + static int sm_overlayWindowX; + static int sm_overlayWindowY; }; #endif + // __GTKDCSCREENH__ diff --git a/src/gtk/button.cpp b/src/gtk/button.cpp index f2a516ec65..e74cbc83ff 100644 --- a/src/gtk/button.cpp +++ b/src/gtk/button.cpp @@ -2,7 +2,7 @@ // Name: button.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/checkbox.cpp b/src/gtk/checkbox.cpp index b33fd486e6..818619187d 100644 --- a/src/gtk/checkbox.cpp +++ b/src/gtk/checkbox.cpp @@ -2,7 +2,7 @@ // Name: checkbox.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/choice.cpp b/src/gtk/choice.cpp index d11061e9a5..5d76b098ff 100644 --- a/src/gtk/choice.cpp +++ b/src/gtk/choice.cpp @@ -2,7 +2,7 @@ // Name: choice.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/colour.cpp b/src/gtk/colour.cpp index 7e57df104f..de361155a8 100644 --- a/src/gtk/colour.cpp +++ b/src/gtk/colour.cpp @@ -2,9 +2,8 @@ // Name: colour.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/combobox.cpp b/src/gtk/combobox.cpp index 906f31c2e5..3208d7ef92 100644 --- a/src/gtk/combobox.cpp +++ b/src/gtk/combobox.cpp @@ -2,7 +2,7 @@ // Name: combobox.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/control.cpp b/src/gtk/control.cpp index 658ebcd8c9..c9064a3413 100644 --- a/src/gtk/control.cpp +++ b/src/gtk/control.cpp @@ -2,7 +2,7 @@ // Name: control.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/cursor.cpp b/src/gtk/cursor.cpp index 20a8d3c19e..01a469f84f 100644 --- a/src/gtk/cursor.cpp +++ b/src/gtk/cursor.cpp @@ -2,7 +2,7 @@ // Name: cursor.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/data.cpp b/src/gtk/data.cpp index 815bdca347..3d9ae3d037 100644 --- a/src/gtk/data.cpp +++ b/src/gtk/data.cpp @@ -2,8 +2,8 @@ // Name: data.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/dc.cpp b/src/gtk/dc.cpp index 3678494de4..a519e5fd40 100644 --- a/src/gtk/dc.cpp +++ b/src/gtk/dc.cpp @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk/dcclient.cpp b/src/gtk/dcclient.cpp index 1d46f8b455..3e8025961b 100644 --- a/src/gtk/dcclient.cpp +++ b/src/gtk/dcclient.cpp @@ -119,6 +119,7 @@ wxPaintDC::wxPaintDC( wxWindow *window ) wxPaintDC::~wxPaintDC(void) { + Destroy(); } void wxPaintDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), @@ -827,15 +828,12 @@ void wxPaintDC::DestroyClippingRegion(void) void wxPaintDC::SetUpDC(void) { + Destroy(); m_ok = TRUE; m_logicalFunction = wxCOPY; - if (m_penGC) gdk_gc_unref( m_penGC ); m_penGC = gdk_gc_new( m_window ); - if (m_brushGC) gdk_gc_unref( m_brushGC ); m_brushGC = gdk_gc_new( m_window ); - if (m_textGC) gdk_gc_unref( m_textGC ); m_textGC = gdk_gc_new( m_window ); - if (m_bgGC) gdk_gc_unref( m_bgGC ); m_bgGC = gdk_gc_new( m_window ); SetTextForeground( m_textForegroundColour ); SetTextBackground( m_textBackgroundColour ); @@ -857,6 +855,18 @@ void wxPaintDC::SetUpDC(void) } } +void wxPaintDC::Destroy(void) +{ + if (m_penGC) gdk_gc_unref( m_penGC ); + m_penGC = (GdkGC*) NULL; + if (m_brushGC) gdk_gc_unref( m_brushGC ); + m_brushGC = (GdkGC*) NULL; + if (m_textGC) gdk_gc_unref( m_textGC ); + m_textGC = (GdkGC*) NULL; + if (m_bgGC) gdk_gc_unref( m_bgGC ); + m_bgGC = (GdkGC*) NULL; +} + GdkWindow *wxPaintDC::GetWindow(void) { return m_window; diff --git a/src/gtk/dcscreen.cpp b/src/gtk/dcscreen.cpp index cd47777fdb..ed085d15d7 100644 --- a/src/gtk/dcscreen.cpp +++ b/src/gtk/dcscreen.cpp @@ -2,7 +2,7 @@ // Name: dcscreen.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,7 +13,222 @@ #include "wx/dcscreen.h" #include "wx/window.h" + +//----------------------------------------------------------------------------- +// global data initialization +//----------------------------------------------------------------------------- + +GdkWindow *wxScreenDC::sm_overlayWindow = (GdkWindow*) NULL; + int wxScreenDC::sm_overlayWindowX = 0; + int wxScreenDC::sm_overlayWindowY = 0; + + +//----------------------------------------------------------------------------- +// create X window +//----------------------------------------------------------------------------- + +extern "C" { + +#include "gdk/gdk.h" +#include "gdk/gdkprivate.h" #include "gdk/gdkx.h" +#include + +int nevent_masks = 17; +int event_mask_table[19] = +{ + ExposureMask, + PointerMotionMask, + PointerMotionHintMask, + ButtonMotionMask, + Button1MotionMask, + Button2MotionMask, + Button3MotionMask, + ButtonPressMask | OwnerGrabButtonMask, + ButtonReleaseMask | OwnerGrabButtonMask, + KeyPressMask, + KeyReleaseMask, + EnterWindowMask, + LeaveWindowMask, + FocusChangeMask, + StructureNotifyMask, + PropertyChangeMask, + VisibilityChangeMask, + 0, /* PROXIMITY_IN */ + 0 /* PROXIMTY_OUT */ +}; + +GdkWindow* +gdk_window_transparent_new ( GdkWindow *parent, + GdkWindowAttr *attributes, + gint attributes_mask) +{ + GdkWindow *window; + GdkWindowPrivate *gprivate; + GdkWindowPrivate *parent_private; + GdkVisual *visual; + Display *parent_display; + Window xparent; + Visual *xvisual; + XSetWindowAttributes xattributes; + long xattributes_mask; + XSizeHints size_hints; + XWMHints wm_hints; + XClassHint *class_hint; + int x, y, depth; + unsigned int gclass; + char *title; + int i; + + g_return_val_if_fail (attributes != NULL, NULL); + + if (!parent) + parent = (GdkWindow*) &gdk_root_parent; + + parent_private = (GdkWindowPrivate*) parent; + if (parent_private->destroyed) + return NULL; + + xparent = parent_private->xwindow; + parent_display = parent_private->xdisplay; + + gprivate = g_new (GdkWindowPrivate, 1); + window = (GdkWindow*) gprivate; + + gprivate->parent = parent; + + if (parent_private != &gdk_root_parent) + parent_private->children = g_list_prepend (parent_private->children, window); + + gprivate->xdisplay = parent_display; + gprivate->destroyed = FALSE; + gprivate->resize_count = 0; + gprivate->ref_count = 1; + xattributes_mask = 0; + + if (attributes_mask & GDK_WA_X) + x = attributes->x; + else + x = 0; + + if (attributes_mask & GDK_WA_Y) + y = attributes->y; + else + y = 0; + + gprivate->x = x; + gprivate->y = y; + gprivate->width = (attributes->width > 1) ? (attributes->width) : (1); + gprivate->height = (attributes->height > 1) ? (attributes->height) : (1); + gprivate->window_type = attributes->window_type; + gprivate->extension_events = FALSE; + gprivate->dnd_drag_data_type = None; + gprivate->dnd_drag_data_typesavail = + gprivate->dnd_drop_data_typesavail = NULL; + gprivate->dnd_drop_enabled = gprivate->dnd_drag_enabled = + gprivate->dnd_drag_accepted = gprivate->dnd_drag_datashow = + gprivate->dnd_drop_data_numtypesavail = + gprivate->dnd_drag_data_numtypesavail = 0; + gprivate->dnd_drag_eventmask = gprivate->dnd_drag_savedeventmask = 0; + + gprivate->filters = NULL; + gprivate->children = NULL; + + window->user_data = NULL; + + if (attributes_mask & GDK_WA_VISUAL) + visual = attributes->visual; + else + visual = gdk_visual_get_system (); + xvisual = ((GdkVisualPrivate*) visual)->xvisual; + + xattributes.event_mask = StructureNotifyMask; + for (i = 0; i < nevent_masks; i++) + { + if (attributes->event_mask & (1 << (i + 1))) + xattributes.event_mask |= event_mask_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; + } else + xattributes.override_redirect = False; + + gclass = InputOutput; + depth = visual->depth; + + if (attributes_mask & GDK_WA_COLORMAP) + gprivate->colormap = attributes->colormap; + else + gprivate->colormap = gdk_colormap_get_system (); + + xattributes.colormap = ((GdkColormapPrivate*) gprivate->colormap)->xcolormap; + xattributes_mask |= CWColormap; + + xparent = gdk_root_window; + + 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); + gdk_window_ref (window); + gdk_xid_table_insert (&gprivate->xwindow, window); + + if (gprivate->colormap) + gdk_colormap_ref (gprivate->colormap); + + XSetWMProtocols (gprivate->xdisplay, gprivate->xwindow, gdk_wm_window_protocols, 2); + + size_hints.flags = PSize; + size_hints.width = gprivate->width; + size_hints.height = gprivate->height; + + wm_hints.flags = InputHint | StateHint | WindowGroupHint; + wm_hints.window_group = gdk_leader_window; + wm_hints.input = True; + wm_hints.initial_state = NormalState; + + /* FIXME: Is there any point in doing this? Do any WM's pay + * attention to PSize, and even if they do, is this the + * correct value??? + */ + XSetWMNormalHints (gprivate->xdisplay, gprivate->xwindow, &size_hints); + + XSetWMHints (gprivate->xdisplay, gprivate->xwindow, &wm_hints); + + if (attributes_mask & GDK_WA_TITLE) + title = attributes->title; + else + title = gdk_progname; + + XmbSetWMProperties (gprivate->xdisplay, gprivate->xwindow, + title, title, + NULL, 0, + NULL, NULL, NULL); + + if (attributes_mask & GDK_WA_WMCLASS) + { + class_hint = XAllocClassHint (); + class_hint->res_name = attributes->wmclass_name; + class_hint->res_class = attributes->wmclass_class; + XSetClassHint (gprivate->xdisplay, gprivate->xwindow, class_hint); + XFree (class_hint); + } + + return window; +} + +} // extern "C" //----------------------------------------------------------------------------- // wxScreenDC @@ -27,7 +242,14 @@ wxScreenDC::wxScreenDC(void) m_window = (GdkWindow *) NULL; m_cmap = gdk_colormap_get_system(); - m_window = GDK_ROOT_PARENT(); + if (sm_overlayWindow) + { + m_window = sm_overlayWindow; + m_deviceOriginX = - sm_overlayWindowX; + m_deviceOriginY = - sm_overlayWindowY; + } + else + m_window = GDK_ROOT_PARENT(); SetUpDC(); @@ -42,32 +264,29 @@ wxScreenDC::~wxScreenDC(void) EndDrawingOnTop(); } -bool wxScreenDC::StartDrawingOnTop( wxWindow *WXUNUSED(window) ) +bool wxScreenDC::StartDrawingOnTop( wxWindow *window ) { - return TRUE; -/* - if (!window) - { - StartDrawingOnTop(); - return; - } + 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 = 0; - rect.y = 0; - window->GetPosition( &rect.x, &rect.y ); + rect.x = x; + rect.y = y; rect.width = 0; rect.height = 0; - window->GetSize( &rect.width, &rect.height ); - window->ClientToScreen( &rect.x, &rect.y ); - StartDrawingOnTop( &rect ); - return TRUE; -*/ + + return StartDrawingOnTop( &rect ); } -bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) +bool wxScreenDC::StartDrawingOnTop( wxRectangle *rect ) { - return TRUE; -/* int x = 0; int y = 0; int width = gdk_screen_width(); @@ -80,7 +299,8 @@ bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) height = rect->height; } - GTK cannot set transparent backgrounds. :-( + sm_overlayWindowX = x; + sm_overlayWindowY = y; GdkWindowAttr attr; attr.x = x; @@ -91,31 +311,23 @@ bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) attr.wclass = GDK_INPUT_OUTPUT; attr.event_mask = 0; attr.window_type = GDK_WINDOW_TEMP; - m_window = gdk_window_new( NULL, &attr, GDK_WA_NOREDIR | GDK_WA_X | GDK_WA_Y ); - - gdk_window_show( m_window ); - - m_window = GDK_ROOT_PARENT(); - SetUpDC(); + // GTK cannot set transparent backgrounds. :-( + sm_overlayWindow = gdk_window_transparent_new( NULL, &attr, GDK_WA_NOREDIR | GDK_WA_X | GDK_WA_Y ); - 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 ); + if (sm_overlayWindow) gdk_window_show( sm_overlayWindow ); - return TRUE; -*/ + return (sm_overlayWindow); } bool wxScreenDC::EndDrawingOnTop(void) { + if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow ); + + sm_overlayWindow = NULL; + sm_overlayWindowX = 0; + sm_overlayWindowY = 0; + return TRUE; -/* - if (m_window) gdk_window_destroy( m_window ); - m_window = NULL; - m_isOk = FALSE; - return TRUE; -*/ } diff --git a/src/gtk/frame.cpp b/src/gtk/frame.cpp index 2f1d747558..5864db957f 100644 --- a/src/gtk/frame.cpp +++ b/src/gtk/frame.cpp @@ -26,7 +26,7 @@ // constants //----------------------------------------------------------------------------- -const int wxMENU_HEIGHT = 28; +const int wxMENU_HEIGHT = 30; const int wxSTATUS_HEIGHT = 25; //----------------------------------------------------------------------------- diff --git a/src/gtk1/button.cpp b/src/gtk1/button.cpp index f2a516ec65..e74cbc83ff 100644 --- a/src/gtk1/button.cpp +++ b/src/gtk1/button.cpp @@ -2,7 +2,7 @@ // Name: button.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/checkbox.cpp b/src/gtk1/checkbox.cpp index b33fd486e6..818619187d 100644 --- a/src/gtk1/checkbox.cpp +++ b/src/gtk1/checkbox.cpp @@ -2,7 +2,7 @@ // Name: checkbox.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/choice.cpp b/src/gtk1/choice.cpp index d11061e9a5..5d76b098ff 100644 --- a/src/gtk1/choice.cpp +++ b/src/gtk1/choice.cpp @@ -2,7 +2,7 @@ // Name: choice.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/colour.cpp b/src/gtk1/colour.cpp index 7e57df104f..de361155a8 100644 --- a/src/gtk1/colour.cpp +++ b/src/gtk1/colour.cpp @@ -2,9 +2,8 @@ // Name: colour.cpp // Purpose: // Author: Robert Roebling -// Created: 01/02/97 -// Id: -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/combobox.cpp b/src/gtk1/combobox.cpp index 906f31c2e5..3208d7ef92 100644 --- a/src/gtk1/combobox.cpp +++ b/src/gtk1/combobox.cpp @@ -2,7 +2,7 @@ // Name: combobox.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/control.cpp b/src/gtk1/control.cpp index 658ebcd8c9..c9064a3413 100644 --- a/src/gtk1/control.cpp +++ b/src/gtk1/control.cpp @@ -2,7 +2,7 @@ // Name: control.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling, Julian Smart and Vadim Zeitlin // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/cursor.cpp b/src/gtk1/cursor.cpp index 20a8d3c19e..01a469f84f 100644 --- a/src/gtk1/cursor.cpp +++ b/src/gtk1/cursor.cpp @@ -2,7 +2,7 @@ // Name: cursor.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/data.cpp b/src/gtk1/data.cpp index 815bdca347..3d9ae3d037 100644 --- a/src/gtk1/data.cpp +++ b/src/gtk1/data.cpp @@ -2,8 +2,8 @@ // Name: data.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Id: $Id$ +// Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/dc.cpp b/src/gtk1/dc.cpp index 3678494de4..a519e5fd40 100644 --- a/src/gtk1/dc.cpp +++ b/src/gtk1/dc.cpp @@ -3,7 +3,7 @@ // Purpose: // Author: Robert Roebling // RCS-ID: $Id$ -// Copyright: (c) 1998 Robert Roebling, Julian Smart and Markus Holzem +// Copyright: (c) 1998 Robert Roebling, Markus Holzem // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// diff --git a/src/gtk1/dcclient.cpp b/src/gtk1/dcclient.cpp index 1d46f8b455..3e8025961b 100644 --- a/src/gtk1/dcclient.cpp +++ b/src/gtk1/dcclient.cpp @@ -119,6 +119,7 @@ wxPaintDC::wxPaintDC( wxWindow *window ) wxPaintDC::~wxPaintDC(void) { + Destroy(); } void wxPaintDC::FloodFill( long WXUNUSED(x1), long WXUNUSED(y1), @@ -827,15 +828,12 @@ void wxPaintDC::DestroyClippingRegion(void) void wxPaintDC::SetUpDC(void) { + Destroy(); m_ok = TRUE; m_logicalFunction = wxCOPY; - if (m_penGC) gdk_gc_unref( m_penGC ); m_penGC = gdk_gc_new( m_window ); - if (m_brushGC) gdk_gc_unref( m_brushGC ); m_brushGC = gdk_gc_new( m_window ); - if (m_textGC) gdk_gc_unref( m_textGC ); m_textGC = gdk_gc_new( m_window ); - if (m_bgGC) gdk_gc_unref( m_bgGC ); m_bgGC = gdk_gc_new( m_window ); SetTextForeground( m_textForegroundColour ); SetTextBackground( m_textBackgroundColour ); @@ -857,6 +855,18 @@ void wxPaintDC::SetUpDC(void) } } +void wxPaintDC::Destroy(void) +{ + if (m_penGC) gdk_gc_unref( m_penGC ); + m_penGC = (GdkGC*) NULL; + if (m_brushGC) gdk_gc_unref( m_brushGC ); + m_brushGC = (GdkGC*) NULL; + if (m_textGC) gdk_gc_unref( m_textGC ); + m_textGC = (GdkGC*) NULL; + if (m_bgGC) gdk_gc_unref( m_bgGC ); + m_bgGC = (GdkGC*) NULL; +} + GdkWindow *wxPaintDC::GetWindow(void) { return m_window; diff --git a/src/gtk1/dcscreen.cpp b/src/gtk1/dcscreen.cpp index cd47777fdb..ed085d15d7 100644 --- a/src/gtk1/dcscreen.cpp +++ b/src/gtk1/dcscreen.cpp @@ -2,7 +2,7 @@ // Name: dcscreen.cpp // Purpose: // Author: Robert Roebling -// Id: $id$ +// Id: $Id$ // Copyright: (c) 1998 Robert Roebling // Licence: wxWindows licence ///////////////////////////////////////////////////////////////////////////// @@ -13,7 +13,222 @@ #include "wx/dcscreen.h" #include "wx/window.h" + +//----------------------------------------------------------------------------- +// global data initialization +//----------------------------------------------------------------------------- + +GdkWindow *wxScreenDC::sm_overlayWindow = (GdkWindow*) NULL; + int wxScreenDC::sm_overlayWindowX = 0; + int wxScreenDC::sm_overlayWindowY = 0; + + +//----------------------------------------------------------------------------- +// create X window +//----------------------------------------------------------------------------- + +extern "C" { + +#include "gdk/gdk.h" +#include "gdk/gdkprivate.h" #include "gdk/gdkx.h" +#include + +int nevent_masks = 17; +int event_mask_table[19] = +{ + ExposureMask, + PointerMotionMask, + PointerMotionHintMask, + ButtonMotionMask, + Button1MotionMask, + Button2MotionMask, + Button3MotionMask, + ButtonPressMask | OwnerGrabButtonMask, + ButtonReleaseMask | OwnerGrabButtonMask, + KeyPressMask, + KeyReleaseMask, + EnterWindowMask, + LeaveWindowMask, + FocusChangeMask, + StructureNotifyMask, + PropertyChangeMask, + VisibilityChangeMask, + 0, /* PROXIMITY_IN */ + 0 /* PROXIMTY_OUT */ +}; + +GdkWindow* +gdk_window_transparent_new ( GdkWindow *parent, + GdkWindowAttr *attributes, + gint attributes_mask) +{ + GdkWindow *window; + GdkWindowPrivate *gprivate; + GdkWindowPrivate *parent_private; + GdkVisual *visual; + Display *parent_display; + Window xparent; + Visual *xvisual; + XSetWindowAttributes xattributes; + long xattributes_mask; + XSizeHints size_hints; + XWMHints wm_hints; + XClassHint *class_hint; + int x, y, depth; + unsigned int gclass; + char *title; + int i; + + g_return_val_if_fail (attributes != NULL, NULL); + + if (!parent) + parent = (GdkWindow*) &gdk_root_parent; + + parent_private = (GdkWindowPrivate*) parent; + if (parent_private->destroyed) + return NULL; + + xparent = parent_private->xwindow; + parent_display = parent_private->xdisplay; + + gprivate = g_new (GdkWindowPrivate, 1); + window = (GdkWindow*) gprivate; + + gprivate->parent = parent; + + if (parent_private != &gdk_root_parent) + parent_private->children = g_list_prepend (parent_private->children, window); + + gprivate->xdisplay = parent_display; + gprivate->destroyed = FALSE; + gprivate->resize_count = 0; + gprivate->ref_count = 1; + xattributes_mask = 0; + + if (attributes_mask & GDK_WA_X) + x = attributes->x; + else + x = 0; + + if (attributes_mask & GDK_WA_Y) + y = attributes->y; + else + y = 0; + + gprivate->x = x; + gprivate->y = y; + gprivate->width = (attributes->width > 1) ? (attributes->width) : (1); + gprivate->height = (attributes->height > 1) ? (attributes->height) : (1); + gprivate->window_type = attributes->window_type; + gprivate->extension_events = FALSE; + gprivate->dnd_drag_data_type = None; + gprivate->dnd_drag_data_typesavail = + gprivate->dnd_drop_data_typesavail = NULL; + gprivate->dnd_drop_enabled = gprivate->dnd_drag_enabled = + gprivate->dnd_drag_accepted = gprivate->dnd_drag_datashow = + gprivate->dnd_drop_data_numtypesavail = + gprivate->dnd_drag_data_numtypesavail = 0; + gprivate->dnd_drag_eventmask = gprivate->dnd_drag_savedeventmask = 0; + + gprivate->filters = NULL; + gprivate->children = NULL; + + window->user_data = NULL; + + if (attributes_mask & GDK_WA_VISUAL) + visual = attributes->visual; + else + visual = gdk_visual_get_system (); + xvisual = ((GdkVisualPrivate*) visual)->xvisual; + + xattributes.event_mask = StructureNotifyMask; + for (i = 0; i < nevent_masks; i++) + { + if (attributes->event_mask & (1 << (i + 1))) + xattributes.event_mask |= event_mask_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; + } else + xattributes.override_redirect = False; + + gclass = InputOutput; + depth = visual->depth; + + if (attributes_mask & GDK_WA_COLORMAP) + gprivate->colormap = attributes->colormap; + else + gprivate->colormap = gdk_colormap_get_system (); + + xattributes.colormap = ((GdkColormapPrivate*) gprivate->colormap)->xcolormap; + xattributes_mask |= CWColormap; + + xparent = gdk_root_window; + + 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); + gdk_window_ref (window); + gdk_xid_table_insert (&gprivate->xwindow, window); + + if (gprivate->colormap) + gdk_colormap_ref (gprivate->colormap); + + XSetWMProtocols (gprivate->xdisplay, gprivate->xwindow, gdk_wm_window_protocols, 2); + + size_hints.flags = PSize; + size_hints.width = gprivate->width; + size_hints.height = gprivate->height; + + wm_hints.flags = InputHint | StateHint | WindowGroupHint; + wm_hints.window_group = gdk_leader_window; + wm_hints.input = True; + wm_hints.initial_state = NormalState; + + /* FIXME: Is there any point in doing this? Do any WM's pay + * attention to PSize, and even if they do, is this the + * correct value??? + */ + XSetWMNormalHints (gprivate->xdisplay, gprivate->xwindow, &size_hints); + + XSetWMHints (gprivate->xdisplay, gprivate->xwindow, &wm_hints); + + if (attributes_mask & GDK_WA_TITLE) + title = attributes->title; + else + title = gdk_progname; + + XmbSetWMProperties (gprivate->xdisplay, gprivate->xwindow, + title, title, + NULL, 0, + NULL, NULL, NULL); + + if (attributes_mask & GDK_WA_WMCLASS) + { + class_hint = XAllocClassHint (); + class_hint->res_name = attributes->wmclass_name; + class_hint->res_class = attributes->wmclass_class; + XSetClassHint (gprivate->xdisplay, gprivate->xwindow, class_hint); + XFree (class_hint); + } + + return window; +} + +} // extern "C" //----------------------------------------------------------------------------- // wxScreenDC @@ -27,7 +242,14 @@ wxScreenDC::wxScreenDC(void) m_window = (GdkWindow *) NULL; m_cmap = gdk_colormap_get_system(); - m_window = GDK_ROOT_PARENT(); + if (sm_overlayWindow) + { + m_window = sm_overlayWindow; + m_deviceOriginX = - sm_overlayWindowX; + m_deviceOriginY = - sm_overlayWindowY; + } + else + m_window = GDK_ROOT_PARENT(); SetUpDC(); @@ -42,32 +264,29 @@ wxScreenDC::~wxScreenDC(void) EndDrawingOnTop(); } -bool wxScreenDC::StartDrawingOnTop( wxWindow *WXUNUSED(window) ) +bool wxScreenDC::StartDrawingOnTop( wxWindow *window ) { - return TRUE; -/* - if (!window) - { - StartDrawingOnTop(); - return; - } + 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 = 0; - rect.y = 0; - window->GetPosition( &rect.x, &rect.y ); + rect.x = x; + rect.y = y; rect.width = 0; rect.height = 0; - window->GetSize( &rect.width, &rect.height ); - window->ClientToScreen( &rect.x, &rect.y ); - StartDrawingOnTop( &rect ); - return TRUE; -*/ + + return StartDrawingOnTop( &rect ); } -bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) +bool wxScreenDC::StartDrawingOnTop( wxRectangle *rect ) { - return TRUE; -/* int x = 0; int y = 0; int width = gdk_screen_width(); @@ -80,7 +299,8 @@ bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) height = rect->height; } - GTK cannot set transparent backgrounds. :-( + sm_overlayWindowX = x; + sm_overlayWindowY = y; GdkWindowAttr attr; attr.x = x; @@ -91,31 +311,23 @@ bool wxScreenDC::StartDrawingOnTop( wxRectangle *WXUNUSED(rect) ) attr.wclass = GDK_INPUT_OUTPUT; attr.event_mask = 0; attr.window_type = GDK_WINDOW_TEMP; - m_window = gdk_window_new( NULL, &attr, GDK_WA_NOREDIR | GDK_WA_X | GDK_WA_Y ); - - gdk_window_show( m_window ); - - m_window = GDK_ROOT_PARENT(); - SetUpDC(); + // GTK cannot set transparent backgrounds. :-( + sm_overlayWindow = gdk_window_transparent_new( NULL, &attr, GDK_WA_NOREDIR | GDK_WA_X | GDK_WA_Y ); - 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 ); + if (sm_overlayWindow) gdk_window_show( sm_overlayWindow ); - return TRUE; -*/ + return (sm_overlayWindow); } bool wxScreenDC::EndDrawingOnTop(void) { + if (sm_overlayWindow) gdk_window_destroy( sm_overlayWindow ); + + sm_overlayWindow = NULL; + sm_overlayWindowX = 0; + sm_overlayWindowY = 0; + return TRUE; -/* - if (m_window) gdk_window_destroy( m_window ); - m_window = NULL; - m_isOk = FALSE; - return TRUE; -*/ } diff --git a/src/gtk1/frame.cpp b/src/gtk1/frame.cpp index 2f1d747558..5864db957f 100644 --- a/src/gtk1/frame.cpp +++ b/src/gtk1/frame.cpp @@ -26,7 +26,7 @@ // constants //----------------------------------------------------------------------------- -const int wxMENU_HEIGHT = 28; +const int wxMENU_HEIGHT = 30; const int wxSTATUS_HEIGHT = 25; //----------------------------------------------------------------------------- diff --git a/user/wxTest/wxTest.cpp b/user/wxTest/wxTest.cpp index 8e5f747858..4ffdab896b 100644 --- a/user/wxTest/wxTest.cpp +++ b/user/wxTest/wxTest.cpp @@ -28,6 +28,7 @@ #include "folder.xpm" #include "list.xpm" +#include "test.xpm" //----------------------------------------------------------------------------- // main program @@ -324,8 +325,7 @@ MyCanvas::MyCanvas( wxWindow *parent, const wxWindowID id, const wxPoint &pos, c : wxScrolledWindow( parent, id, pos, size, wxSUNKEN_BORDER ) { my_bitmap = new wxBitmap( folder_xpm ); -// my_horse = new wxBitmap(); -// my_horse->LoadFile( "horse.png", 0 ); + my_horse = new wxBitmap( test_xpm); my_backstore = new wxBitmap( 150, 150 ); my_font = new wxFont( 20, wxROMAN, wxNORMAL, wxNORMAL ); m_isCreated = FALSE; @@ -337,7 +337,7 @@ MyCanvas::~MyCanvas(void) { delete my_bitmap; delete my_backstore; -// delete my_horse; + delete my_horse; delete my_font; }; @@ -387,7 +387,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) ) dc.DrawText( "Hej, ho, hej, ho. (ItalicFont)", 80, 100 ); dc.DrawBitmap( *my_bitmap, 30, 80, TRUE ); -// dc.DrawBitmap( *my_horse, 30, 120 ); + dc.DrawBitmap( *my_horse, 30, 120 ); dc.Blit( 200, 200, 150, 150, &memDC, 0, 0, 0 ); -- 2.45.2