Adapted wxGTK to wxMSW's notion of region setting.

Made Julian's gc_include_inferior hack a bit less radical.
  Small addition to changes.txt,
  Compile fix to dbbrowse sample. Still crashes upon startup.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6432 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2000-03-04 09:24:17 +00:00
parent 36bec0acf0
commit 993f97eed6
5 changed files with 85 additions and 27 deletions

View File

@@ -159,7 +159,7 @@ int DBTree::OnPopulate()
Temp2 = ((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkTableName; Temp2 = ((ct_BrowserDB->pTableInf+x)->pColInf+y)->PkTableName;
if (Temp2 == "") if (Temp2 == "")
Temp2 = _("None"); Temp2 = _("None");
Temp2.Printf(_("This Primary Key is used in the following Tables : %s"),Temp2); Temp2.Printf(_("This Primary Key is used in the following Tables : %s"),Temp2.c_str());
Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEY")); Funkt = AppendItem(Docu,Temp2,TreeIc_DocClosed,TreeIc_DocOpen,new DBTreeData("KEY"));
} }
else else

View File

@@ -1,5 +1,13 @@
12th March '2000: wxWindows 2.1.14 released 12th March '2000: wxWindows 2.1.14 released
Added support for pipes and a stream class to get data
out of them.
Added memory file system (so you can save html pages with
images in memory).
Added wxDragImage class for dragging easily images. Added wxDragImage class for dragging easily images.
The DEB and RPM packages now conform better to various The DEB and RPM packages now conform better to various

View File

@@ -897,14 +897,18 @@ void MyCanvas::DrawRegions(wxDC& dc)
dc.SetPen( *wxTRANSPARENT_PEN ); dc.SetPen( *wxTRANSPARENT_PEN );
dc.DrawRectangle( 10,10,310,310 ); dc.DrawRectangle( 10,10,310,310 );
wxRegion region( 20,20,100,270 ); dc.SetClippingRegion( 20,20,100,270 );
dc.SetClippingRegion( region );
dc.SetBrush( *wxRED_BRUSH ); dc.SetBrush( *wxRED_BRUSH );
dc.DrawRectangle( 10,10,310,310 ); dc.DrawRectangle( 10,10,310,310 );
dc.SetClippingRegion( 20,20,100,100 );
region = wxRegion( 120,30,100,270 ); dc.SetBrush( *wxCYAN_BRUSH );
dc.SetClippingRegion( region ); dc.DrawRectangle( 10,10,310,310 );
dc.DestroyClippingRegion();
dc.SetClippingRegion( 120,30,100,270 );
dc.SetBrush( *wxGREY_BRUSH ); dc.SetBrush( *wxGREY_BRUSH );
dc.DrawRectangle( 10,10,310,310 ); dc.DrawRectangle( 10,10,310,310 );

View File

@@ -21,6 +21,7 @@
#include <math.h> // for floating-point functions #include <math.h> // for floating-point functions
#include <gdk/gdk.h> #include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -153,10 +154,6 @@ static GdkGC* wxGetPoolGC( GdkWindow *window, wxPoolGCType type )
{ {
wxGCPool[i].m_gc = gdk_gc_new( window ); wxGCPool[i].m_gc = gdk_gc_new( window );
gdk_gc_set_exposures( wxGCPool[i].m_gc, FALSE ); gdk_gc_set_exposures( wxGCPool[i].m_gc, FALSE );
// This allows you to e.g. copy from the screen
// without clipping the windows on it.
gdk_gc_set_subwindow( wxGCPool[i].m_gc,
GDK_INCLUDE_INFERIORS );
wxGCPool[i].m_type = type; wxGCPool[i].m_type = type;
wxGCPool[i].m_used = FALSE; wxGCPool[i].m_used = FALSE;
} }
@@ -909,7 +906,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
int old_logical_func = m_logicalFunction; int old_logical_func = m_logicalFunction;
SetLogicalFunction( logical_func ); SetLogicalFunction( logical_func );
if (use_bitmap_method) if (use_bitmap_method)
{ {
/* scale/translate bitmap size */ /* scale/translate bitmap size */
@@ -986,6 +983,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
/* Draw XPixmap or XBitmap, depending on what the wxBitmap contains. For /* Draw XPixmap or XBitmap, depending on what the wxBitmap contains. For
drawing a mono-bitmap (XBitmap) we use the current text GC */ drawing a mono-bitmap (XBitmap) we use the current text GC */
if (is_mono) if (is_mono)
gdk_draw_bitmap( m_window, m_textGC, use_bitmap.GetBitmap(), xsrc, ysrc, xx, yy, ww, hh ); gdk_draw_bitmap( m_window, m_textGC, use_bitmap.GetBitmap(), xsrc, ysrc, xx, yy, ww, hh );
else else
@@ -1028,10 +1026,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
for a different implementation of the same problem. */ for a different implementation of the same problem. */
wxBitmap bitmap( width, height ); wxBitmap bitmap( width, height );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
/* We have to use the srcDC's GC as it might be a
wxScreenDC and we only have the GDK_INCLUDE_INFERIORS
flag set there. */
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( bitmap.GetPixmap(), srcDC->m_penGC, 0, 0,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
/* scale image */ /* scale image */
wxImage image( bitmap ); wxImage image( bitmap );
@@ -1048,11 +1057,17 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
} }
else else
{ {
/* no scaling and not a memory dc with a mask either */ /* No scaling and not a memory dc with a mask either */
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( m_window, m_penGC, xx, yy, gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
} }
} }
@@ -1635,8 +1650,11 @@ void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoo
rect.width = XLOG2DEVREL(width); rect.width = XLOG2DEVREL(width);
rect.height = YLOG2DEVREL(height); rect.height = YLOG2DEVREL(height);
m_currentClippingRegion.Clear(); if (!m_currentClippingRegion.IsEmpty())
m_currentClippingRegion.Union( rect ); m_currentClippingRegion.Intersect( rect );
else
m_currentClippingRegion.Union( rect );
#if USE_PAINT_REGION #if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Intersect( m_paintClippingRegion ); m_currentClippingRegion.Intersect( m_paintClippingRegion );
@@ -1665,8 +1683,11 @@ void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region )
if (!m_window) return; if (!m_window) return;
m_currentClippingRegion.Clear(); if (!m_currentClippingRegion.IsEmpty())
m_currentClippingRegion.Union( region ); m_currentClippingRegion.Intersect( region );
else
m_currentClippingRegion.Union( region );
#if USE_PAINT_REGION #if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Intersect( m_paintClippingRegion ); m_currentClippingRegion.Intersect( m_paintClippingRegion );
@@ -1686,8 +1707,10 @@ void wxWindowDC::DestroyClippingRegion()
m_currentClippingRegion.Clear(); m_currentClippingRegion.Clear();
#if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Union( m_paintClippingRegion ); m_currentClippingRegion.Union( m_paintClippingRegion );
#endif
if (!m_window) return; if (!m_window) return;

View File

@@ -21,6 +21,7 @@
#include <math.h> // for floating-point functions #include <math.h> // for floating-point functions
#include <gdk/gdk.h> #include <gdk/gdk.h>
#include <gdk/gdkx.h>
#include <gtk/gtk.h> #include <gtk/gtk.h>
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
@@ -153,10 +154,6 @@ static GdkGC* wxGetPoolGC( GdkWindow *window, wxPoolGCType type )
{ {
wxGCPool[i].m_gc = gdk_gc_new( window ); wxGCPool[i].m_gc = gdk_gc_new( window );
gdk_gc_set_exposures( wxGCPool[i].m_gc, FALSE ); gdk_gc_set_exposures( wxGCPool[i].m_gc, FALSE );
// This allows you to e.g. copy from the screen
// without clipping the windows on it.
gdk_gc_set_subwindow( wxGCPool[i].m_gc,
GDK_INCLUDE_INFERIORS );
wxGCPool[i].m_type = type; wxGCPool[i].m_type = type;
wxGCPool[i].m_used = FALSE; wxGCPool[i].m_used = FALSE;
} }
@@ -909,7 +906,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
int old_logical_func = m_logicalFunction; int old_logical_func = m_logicalFunction;
SetLogicalFunction( logical_func ); SetLogicalFunction( logical_func );
if (use_bitmap_method) if (use_bitmap_method)
{ {
/* scale/translate bitmap size */ /* scale/translate bitmap size */
@@ -986,6 +983,7 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
/* Draw XPixmap or XBitmap, depending on what the wxBitmap contains. For /* Draw XPixmap or XBitmap, depending on what the wxBitmap contains. For
drawing a mono-bitmap (XBitmap) we use the current text GC */ drawing a mono-bitmap (XBitmap) we use the current text GC */
if (is_mono) if (is_mono)
gdk_draw_bitmap( m_window, m_textGC, use_bitmap.GetBitmap(), xsrc, ysrc, xx, yy, ww, hh ); gdk_draw_bitmap( m_window, m_textGC, use_bitmap.GetBitmap(), xsrc, ysrc, xx, yy, ww, hh );
else else
@@ -1028,10 +1026,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
for a different implementation of the same problem. */ for a different implementation of the same problem. */
wxBitmap bitmap( width, height ); wxBitmap bitmap( width, height );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
/* We have to use the srcDC's GC as it might be a
wxScreenDC and we only have the GDK_INCLUDE_INFERIORS
flag set there. */
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( bitmap.GetPixmap(), srcDC->m_penGC, 0, 0,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
/* scale image */ /* scale image */
wxImage image( bitmap ); wxImage image( bitmap );
@@ -1048,11 +1057,17 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
} }
else else
{ {
/* no scaling and not a memory dc with a mask either */ /* No scaling and not a memory dc with a mask either */
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( m_window, m_penGC, xx, yy, gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(), srcDC->GetWindow(),
xsrc, ysrc, width, height ); xsrc, ysrc, width, height );
if (srcDC->GetWindow() == GDK_ROOT_PARENT())
gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
} }
} }
@@ -1635,8 +1650,11 @@ void wxWindowDC::DoSetClippingRegion( wxCoord x, wxCoord y, wxCoord width, wxCoo
rect.width = XLOG2DEVREL(width); rect.width = XLOG2DEVREL(width);
rect.height = YLOG2DEVREL(height); rect.height = YLOG2DEVREL(height);
m_currentClippingRegion.Clear(); if (!m_currentClippingRegion.IsEmpty())
m_currentClippingRegion.Union( rect ); m_currentClippingRegion.Intersect( rect );
else
m_currentClippingRegion.Union( rect );
#if USE_PAINT_REGION #if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Intersect( m_paintClippingRegion ); m_currentClippingRegion.Intersect( m_paintClippingRegion );
@@ -1665,8 +1683,11 @@ void wxWindowDC::DoSetClippingRegionAsRegion( const wxRegion &region )
if (!m_window) return; if (!m_window) return;
m_currentClippingRegion.Clear(); if (!m_currentClippingRegion.IsEmpty())
m_currentClippingRegion.Union( region ); m_currentClippingRegion.Intersect( region );
else
m_currentClippingRegion.Union( region );
#if USE_PAINT_REGION #if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Intersect( m_paintClippingRegion ); m_currentClippingRegion.Intersect( m_paintClippingRegion );
@@ -1686,8 +1707,10 @@ void wxWindowDC::DestroyClippingRegion()
m_currentClippingRegion.Clear(); m_currentClippingRegion.Clear();
#if USE_PAINT_REGION
if (!m_paintClippingRegion.IsEmpty()) if (!m_paintClippingRegion.IsEmpty())
m_currentClippingRegion.Union( m_paintClippingRegion ); m_currentClippingRegion.Union( m_paintClippingRegion );
#endif
if (!m_window) return; if (!m_window) return;