X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/eba91e51e8d7cce2c5c9a99d8ddcad5b29a114a8..c0da0dbabf2d3cf8e1a76a2c82608822d15d0625:/src/gtk/tbargtk.cpp diff --git a/src/gtk/tbargtk.cpp b/src/gtk/tbargtk.cpp index 166df0600c..f1e0bcc9ad 100644 --- a/src/gtk/tbargtk.cpp +++ b/src/gtk/tbargtk.cpp @@ -52,8 +52,7 @@ extern wxCursor g_globalCursor; static void GetGtkStyle(long style, GtkOrientation *orient, GtkToolbarStyle *gtkStyle) { - *orient = style & wxTB_VERTICAL ? GTK_ORIENTATION_VERTICAL - : GTK_ORIENTATION_HORIZONTAL; + *orient = ( style & wxTB_LEFT || style & wxTB_RIGHT ) ? GTK_ORIENTATION_VERTICAL : GTK_ORIENTATION_HORIZONTAL; if ( style & wxTB_TEXT ) @@ -216,6 +215,27 @@ static gint gtk_toolbar_tool_callback( GtkWidget *WXUNUSED(widget), } } +extern "C" { +static +void gtktoolwidget_size_callback( GtkWidget *widget, + GtkAllocation *alloc, + wxWindow *win ) +{ + // this shouldn't happen... + if (win->GetParent()->m_wxwindow) return; + + wxSize size = win->GetEffectiveMinSize(); + if (size.y != alloc->height) + { + GtkAllocation alloc2; + alloc2.x = alloc->x; + alloc2.y = (alloc->height - size.y + 3) / 2; + alloc2.width = alloc->width; + alloc2.height = size.y; + gtk_widget_size_allocate( widget, &alloc2 ); + } +} +} //----------------------------------------------------------------------------- // InsertChild callback for wxToolBar //----------------------------------------------------------------------------- @@ -288,6 +308,8 @@ bool wxToolBar::Create( wxWindow *parent, return false; } + FixupStyle(); + m_toolbar = GTK_TOOLBAR( gtk_toolbar_new() ); GtkSetStyle(); @@ -340,7 +362,7 @@ void wxToolBar::GtkSetStyle() gtk_toolbar_set_orientation(m_toolbar, orient); gtk_toolbar_set_style(m_toolbar, style); - gtk_toolbar_set_tooltips( GTK_TOOLBAR(m_toolbar), !(style & wxTB_NO_TOOLTIPS) ); + gtk_toolbar_set_tooltips(m_toolbar, !(style & wxTB_NO_TOOLTIPS)); } void wxToolBar::SetWindowStyleFlag( long style ) @@ -353,9 +375,7 @@ void wxToolBar::SetWindowStyleFlag( long style ) bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) { - wxToolBarTool *tool = (wxToolBarTool *)toolBase; - - size_t posGtk = pos; + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, toolBase); if ( tool->IsButton() ) { @@ -366,12 +386,6 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) wxCHECK_MSG( bitmap.Ok(), false, wxT("invalid bitmap for wxToolBar icon") ); - wxCHECK_MSG( bitmap.GetDepth() != 1, false, - wxT("wxToolBar doesn't support GdkBitmap") ); - - wxCHECK_MSG( bitmap.GetPixmap() != NULL, false, - wxT("wxToolBar::Add needs a wxBitmap") ); - tool->m_image = gtk_image_new(); tool->SetImage(bitmap); @@ -379,6 +393,8 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) } } + const int posGtk = int(pos); + switch ( tool->GetStyle() ) { case wxTOOL_STYLE_BUTTON: @@ -458,6 +474,11 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) (const char *) NULL, posGtk ); + + // connect after in order to correct size_allocate events + g_signal_connect_after (tool->GetControl()->m_widget, "size_allocate", + G_CALLBACK (gtktoolwidget_size_callback), tool->GetControl()); + break; } @@ -473,7 +494,7 @@ bool wxToolBar::DoInsertTool(size_t pos, wxToolBarToolBase *toolBase) bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *toolBase) { - wxToolBarTool *tool = (wxToolBarTool *)toolBase; + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, toolBase); switch ( tool->GetStyle() ) { @@ -500,7 +521,7 @@ bool wxToolBar::DoDeleteTool(size_t pos, wxToolBarToolBase *toolBase) void wxToolBar::DoEnableTool(wxToolBarToolBase *toolBase, bool enable) { - wxToolBarTool *tool = (wxToolBarTool *)toolBase; + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, toolBase); if (tool->m_item) { @@ -510,7 +531,7 @@ void wxToolBar::DoEnableTool(wxToolBarToolBase *toolBase, bool enable) void wxToolBar::DoToggleTool( wxToolBarToolBase *toolBase, bool toggle ) { - wxToolBarTool *tool = (wxToolBarTool *)toolBase; + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, toolBase); GtkWidget *item = tool->m_item; if ( item && GTK_IS_TOGGLE_BUTTON(item) ) @@ -566,7 +587,7 @@ void wxToolBar::SetToolSeparation( int separation ) void wxToolBar::SetToolShortHelp( int id, const wxString& helpString ) { - wxToolBarTool *tool = (wxToolBarTool *)FindById(id); + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, FindById(id)); if ( tool ) { @@ -576,6 +597,30 @@ void wxToolBar::SetToolShortHelp( int id, const wxString& helpString ) } } +void wxToolBar::SetToolNormalBitmap( int id, const wxBitmap& bitmap ) +{ + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, FindById(id)); + if ( tool ) + { + wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools.")); + + tool->SetNormalBitmap(bitmap); + tool->SetImage(tool->GetBitmap()); + } +} + +void wxToolBar::SetToolDisabledBitmap( int id, const wxBitmap& bitmap ) +{ + wxToolBarTool* tool = wx_static_cast(wxToolBarTool*, FindById(id)); + if ( tool ) + { + wxCHECK_RET( tool->IsButton(), wxT("Can only set bitmap on button tools.")); + + tool->SetDisabledBitmap(bitmap); + tool->SetImage(tool->GetBitmap()); + } +} + // ---------------------------------------------------------------------------- // wxToolBar idle handling // ----------------------------------------------------------------------------