dc.SetTextBackground(m_owner->m_colourBackground);
dc.DrawRectangle( x+50, y+50, 200, 200 );
+ dc.DrawCircle( x+400, y+50, 130 );
+
dc.SetBrush(wxNullBrush);
dc.SetPen(wxNullPen);
break;
// ... and attach this menu bar to the frame
SetMenuBar(menuBar);
- CreateStatusBar(1);
+ CreateStatusBar(2);
html = new wxHtmlWindow(this);
html -> SetRelatedFrame(this, "VFS Demo: '%s'");
// main frame
bool MyApp::OnInit()
{
- // Create the mini frame window
- mini_frame = new MyMiniFrame((wxFrame *) NULL, -1, "wxMiniFrame sample",
- wxPoint(100, 100), wxSize(220, 100));
- mini_frame_exists = TRUE;
-
- mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
- InitToolbar(mini_frame->GetToolBar());
-
// Create the main frame window
main_frame = new MyMainFrame((wxFrame *) NULL, -1, "wxFrame sample",
wxPoint(100, 100), wxSize(300, 200));
button = new wxButton( main_frame, ID_REPARENT, "Press to reparent!" );
+ // Create the mini frame window
+ mini_frame = new MyMiniFrame( main_frame, -1, "wxMiniFrame sample",
+ wxPoint(100, 100), wxSize(220, 100));
+ mini_frame_exists = TRUE;
+
+ mini_frame->CreateToolBar(wxNO_BORDER|wxTB_HORIZONTAL|wxTB_FLAT, ID_TOOLBAR);
+ InitToolbar(mini_frame->GetToolBar());
+
#ifdef __WXMSW__
main_frame->SetIcon(wxIcon("mondrian"));
mini_frame->SetIcon(wxIcon("mondrian"));
wxPaintDC dc(this);
PrepareDC( dc );
+/*
#ifdef __WXGTK__
if (!GetUpdateRegion().IsEmpty())
dc.SetClippingRegion( GetUpdateRegion() );
#endif
+*/
if (m_printPreview)
{
gdk_gc_set_background( m_penGC, bg_col );
gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
/* m_brushGC */
m_brush.GetColour().CalcPixel( m_cmap );
gdk_gc_set_fill( m_brushGC, GDK_SOLID );
-
/* m_bgGC */
gdk_gc_set_background( m_bgGC, bg_col );
gdk_gc_set_foreground( m_bgGC, bg_col );
}
}
- // To do: Fillstyle
-
if (m_pen.GetStyle() != wxTRANSPARENT)
{
for (i = 0 ; i < n ; i++)
if (m_brush.GetStyle() != wxTRANSPARENT)
{
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+ {
+ gdk_gc_set_ts_origin( m_textGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+ }
+ else if (m_brush.GetStyle() == wxSTIPPLE)
+ {
+ gdk_gc_set_ts_origin( m_brushGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+ }
+ else
+ {
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ }
}
if (m_pen.GetStyle() != wxTRANSPARENT)
if (m_window)
{
if (m_brush.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ {
+ if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+ {
+ gdk_gc_set_ts_origin( m_textGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+ }
+ else if (m_brush.GetStyle() == wxSTIPPLE)
+ {
+ gdk_gc_set_ts_origin( m_brushGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+ }
+ else
+ {
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ }
+ }
if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
gdk_gc_set_stipple( gc, mask );
gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*
- gdk_gc_set_clip_mask( m_brushGC, NULL );
- gdk_gc_set_clip_mask( m_textGC, NULL );
- SetBrush( *wxRED_BRUSH );
- DrawRectangle( 70, 0, 70, 1000 );
- gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
- gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/
gdk_gc_unref( gc );
}
wxBitmap bitmap( width, height );
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+ /* copy including child window contents */
+ gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
srcDC->GetWindow(),
xsrc, ysrc, width, height );
-
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+ gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
/* scale image */
-
wxImage image( bitmap );
image = image.Scale( ww, hh );
/* convert to bitmap */
-
bitmap = image.ConvertToBitmap();
/* draw scaled bitmap */
-
gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
}
{
/* No scaling and not a memory dc with a mask either */
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+ /* copy including child window contents */
+ gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(),
xsrc, ysrc, width, height );
-
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+ gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
}
}
if (g_isIdle)
wxapp_install_idle_handler();
- win->Close();
+ if (win->IsEnabled())
+ win->Close();
return TRUE;
}
if (g_isIdle)
wxapp_install_idle_handler();
- if (g_openDialogs == 0)
+ if ((g_openDialogs == 0) && (win->IsEnabled()))
win->Close();
return TRUE;
wxFrame::Create( parent, id, title, pos, size, style, name );
+ if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+ gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
if ((style & wxSYSTEM_MENU) &&
((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
{
wxSize ls = LayoutItems();
+ GtkRequisition req;
+ req.width = 2;
+ req.height = 2;
+ (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+ if (req.width > ls.x) ls.x = req.width;
+
wxSize newSize = size;
if (newSize.x == -1) newSize.x = ls.x;
if (newSize.y == -1) newSize.y = ls.y;
// debug
//-----------------------------------------------------------------------------
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
#ifdef __WXDEBUG__
#if wxUSE_THREADS
if (m_widgetStyle)
{
+#if DISABLE_STYLE_IF_BROKEN_THEME
// don't delete if it's a pixmap theme style
if (!m_widgetStyle->engine_data)
gtk_style_unref( m_widgetStyle );
-
+#endif
m_widgetStyle = (GtkStyle*) NULL;
}
void wxWindow::SetWidgetStyle()
{
+#if DISABLE_STYLE_IF_BROKEN_THEM
if (m_widget->style->engine_data)
{
static bool s_warningPrinted = FALSE;
m_widgetStyle = m_widget->style;
return;
}
+#endif
GtkStyle *style = GetWidgetStyle();
gdk_gc_set_background( m_penGC, bg_col );
gdk_gc_set_line_attributes( m_penGC, 0, GDK_LINE_SOLID, GDK_CAP_NOT_LAST, GDK_JOIN_ROUND );
-
/* m_brushGC */
m_brush.GetColour().CalcPixel( m_cmap );
gdk_gc_set_fill( m_brushGC, GDK_SOLID );
-
/* m_bgGC */
gdk_gc_set_background( m_bgGC, bg_col );
gdk_gc_set_foreground( m_bgGC, bg_col );
}
}
- // To do: Fillstyle
-
if (m_pen.GetStyle() != wxTRANSPARENT)
{
for (i = 0 ; i < n ; i++)
if (m_brush.GetStyle() != wxTRANSPARENT)
{
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
- gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+ {
+ gdk_gc_set_ts_origin( m_textGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_rectangle( m_window, m_textGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_textGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+ }
+ else if (m_brush.GetStyle() == wxSTIPPLE)
+ {
+ gdk_gc_set_ts_origin( m_brushGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+ }
+ else
+ {
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx+rr, yy, ww-dd+1, hh );
+ gdk_draw_rectangle( m_window, m_brushGC, TRUE, xx, yy+rr, ww, hh-dd+1 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, dd, dd, 90*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy, dd, dd, 0, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx+ww-dd, yy+hh-dd, dd, dd, 270*64, 90*64 );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy+hh-dd, dd, dd, 180*64, 90*64 );
+ }
}
if (m_pen.GetStyle() != wxTRANSPARENT)
if (m_window)
{
if (m_brush.GetStyle() != wxTRANSPARENT)
- gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ {
+ if ((m_brush.GetStyle() == wxSTIPPLE_MASK_OPAQUE) && (m_brush.GetStipple()->GetMask()))
+ {
+ gdk_gc_set_ts_origin( m_textGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_arc( m_window, m_textGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ gdk_gc_set_ts_origin( m_textGC, 0, 0 );
+ }
+ else if (m_brush.GetStyle() == wxSTIPPLE)
+ {
+ gdk_gc_set_ts_origin( m_brushGC,
+ m_deviceOriginX % m_brush.GetStipple()->GetWidth(),
+ m_deviceOriginY % m_brush.GetStipple()->GetHeight() );
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ gdk_gc_set_ts_origin( m_brushGC, 0, 0 );
+ }
+ else
+ {
+ gdk_draw_arc( m_window, m_brushGC, TRUE, xx, yy, ww, hh, 0, 360*64 );
+ }
+ }
if (m_pen.GetStyle() != wxTRANSPARENT)
gdk_draw_arc( m_window, m_penGC, FALSE, xx, yy, ww, hh, 0, 360*64 );
gdk_gc_set_fill( gc, GDK_OPAQUE_STIPPLED );
gdk_gc_set_stipple( gc, mask );
gdk_draw_rectangle( new_mask, gc, TRUE, 0, 0, ww, hh );
-/*
- gdk_gc_set_clip_mask( m_brushGC, NULL );
- gdk_gc_set_clip_mask( m_textGC, NULL );
- SetBrush( *wxRED_BRUSH );
- DrawRectangle( 70, 0, 70, 1000 );
- gdk_draw_bitmap( m_window, m_textGC, new_mask, 0, 0, 100, 5, ww, hh );
- gdk_draw_bitmap( m_window, m_textGC, mask, 0, 0, 80, 5, ww, hh );
-*/
gdk_gc_unref( gc );
}
wxBitmap bitmap( width, height );
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+ /* copy including child window contents */
+ gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( bitmap.GetPixmap(), m_penGC, 0, 0,
srcDC->GetWindow(),
xsrc, ysrc, width, height );
-
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+ gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
/* scale image */
-
wxImage image( bitmap );
image = image.Scale( ww, hh );
/* convert to bitmap */
-
bitmap = image.ConvertToBitmap();
/* draw scaled bitmap */
-
gdk_draw_pixmap( m_window, m_penGC, bitmap.GetPixmap(), 0, 0, xx, yy, -1, -1 );
}
{
/* No scaling and not a memory dc with a mask either */
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
-
+ /* copy including child window contents */
+ gdk_gc_set_subwindow( m_penGC, GDK_INCLUDE_INFERIORS );
gdk_window_copy_area( m_window, m_penGC, xx, yy,
srcDC->GetWindow(),
xsrc, ysrc, width, height );
-
- if (srcDC->m_isScreenDC)
- gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
+ gdk_gc_set_subwindow( m_penGC, GDK_CLIP_BY_CHILDREN );
}
}
if (g_isIdle)
wxapp_install_idle_handler();
- win->Close();
+ if (win->IsEnabled())
+ win->Close();
return TRUE;
}
if (g_isIdle)
wxapp_install_idle_handler();
- if (g_openDialogs == 0)
+ if ((g_openDialogs == 0) && (win->IsEnabled()))
win->Close();
return TRUE;
wxFrame::Create( parent, id, title, pos, size, style, name );
+ if ((m_parent) && (GTK_IS_WINDOW(m_parent->m_widget)))
+ gtk_window_set_transient_for( GTK_WINDOW(m_widget), GTK_WINDOW(m_parent->m_widget) );
+
if ((style & wxSYSTEM_MENU) &&
((style & wxCAPTION) || (style & wxTINY_CAPTION_HORIZ) || (style & wxTINY_CAPTION_VERT)))
{
wxSize ls = LayoutItems();
+ GtkRequisition req;
+ req.width = 2;
+ req.height = 2;
+ (* GTK_WIDGET_CLASS( GTK_OBJECT(m_widget)->klass )->size_request ) (m_widget, &req );
+ if (req.width > ls.x) ls.x = req.width;
+
wxSize newSize = size;
if (newSize.x == -1) newSize.x = ls.x;
if (newSize.y == -1) newSize.y = ls.y;
// debug
//-----------------------------------------------------------------------------
+#define DISABLE_STYLE_IF_BROKEN_THEME 1
+
#ifdef __WXDEBUG__
#if wxUSE_THREADS
if (m_widgetStyle)
{
+#if DISABLE_STYLE_IF_BROKEN_THEME
// don't delete if it's a pixmap theme style
if (!m_widgetStyle->engine_data)
gtk_style_unref( m_widgetStyle );
-
+#endif
m_widgetStyle = (GtkStyle*) NULL;
}
void wxWindow::SetWidgetStyle()
{
+#if DISABLE_STYLE_IF_BROKEN_THEM
if (m_widget->style->engine_data)
{
static bool s_warningPrinted = FALSE;
m_widgetStyle = m_widget->style;
return;
}
+#endif
GtkStyle *style = GetWidgetStyle();