Some more drawing things,

Tried to make miniframe stay on top, doesn't work,
  Make radio box big enough for its title,
  Can't anylong close disabled toplevel windows,
  Minor other changes.


git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@6438 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Robert Roebling
2000-03-04 18:40:52 +00:00
parent f1567cddea
commit a56fcaaf46
16 changed files with 175 additions and 83 deletions

View File

@@ -302,7 +302,6 @@ void wxWindowDC::SetUpDC()
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 );
@@ -311,7 +310,6 @@ void wxWindowDC::SetUpDC()
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 );
@@ -552,8 +550,6 @@ void wxWindowDC::DoDrawPolygon( int n, wxPoint points[], wxCoord xoffset, wxCoor
}
}
// To do: Fillstyle
if (m_pen.GetStyle() != wxTRANSPARENT)
{
for (i = 0 ; i < n ; i++)
@@ -666,12 +662,41 @@ void wxWindowDC::DoDrawRoundedRectangle( wxCoord x, wxCoord y, wxCoord width, wx
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)
@@ -708,7 +733,28 @@ void wxWindowDC::DoDrawEllipse( wxCoord x, wxCoord y, wxCoord width, wxCoord hei
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 );
@@ -798,14 +844,6 @@ void wxWindowDC::DoDrawBitmap( const wxBitmap &bitmap,
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 );
}
@@ -1060,27 +1098,21 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
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 );
}
@@ -1088,15 +1120,12 @@ bool wxWindowDC::DoBlit( wxCoord xdest, wxCoord ydest, wxCoord width, wxCoord he
{
/* 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 );
}
}

View File

@@ -59,7 +59,8 @@ bool gtk_dialog_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WXUNUSED
if (g_isIdle)
wxapp_install_idle_handler();
win->Close();
if (win->IsEnabled())
win->Close();
return TRUE;
}

View File

@@ -139,7 +139,7 @@ static gint gtk_frame_delete_callback( GtkWidget *WXUNUSED(widget), GdkEvent *WX
if (g_isIdle)
wxapp_install_idle_handler();
if (g_openDialogs == 0)
if ((g_openDialogs == 0) && (win->IsEnabled()))
win->Close();
return TRUE;

View File

@@ -318,6 +318,9 @@ bool wxMiniFrame::Create( wxWindow *parent, wxWindowID id, const wxString &title
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)))
{

View File

@@ -192,6 +192,12 @@ bool wxRadioBox::Create( wxWindow *parent, wxWindowID id, const wxString& title,
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;

View File

@@ -208,6 +208,8 @@ extern bool g_mainThreadLocked;
// debug
//-----------------------------------------------------------------------------
#define DISABLE_STYLE_IF_BROKEN_THEME 1
#ifdef __WXDEBUG__
#if wxUSE_THREADS
@@ -2157,10 +2159,11 @@ wxWindow::~wxWindow()
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;
}
@@ -3053,6 +3056,7 @@ GtkStyle *wxWindow::GetWidgetStyle()
void wxWindow::SetWidgetStyle()
{
#if DISABLE_STYLE_IF_BROKEN_THEM
if (m_widget->style->engine_data)
{
static bool s_warningPrinted = FALSE;
@@ -3064,6 +3068,7 @@ void wxWindow::SetWidgetStyle()
m_widgetStyle = m_widget->style;
return;
}
#endif
GtkStyle *style = GetWidgetStyle();