Further attempts at getting the header buttons right
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@58299 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -122,6 +122,7 @@ GtkWidget *GetCheckButtonWidget();
|
|||||||
GtkWidget *GetComboBoxWidget();
|
GtkWidget *GetComboBoxWidget();
|
||||||
GtkWidget *GetEntryWidget();
|
GtkWidget *GetEntryWidget();
|
||||||
GtkWidget *GetHeaderButtonWidgetFirst();
|
GtkWidget *GetHeaderButtonWidgetFirst();
|
||||||
|
GtkWidget *GetHeaderButtonWidgetLast();
|
||||||
GtkWidget *GetHeaderButtonWidget();
|
GtkWidget *GetHeaderButtonWidget();
|
||||||
GtkWidget *GetRadioButtonWidget();
|
GtkWidget *GetRadioButtonWidget();
|
||||||
GtkWidget *GetSplitterWidget();
|
GtkWidget *GetSplitterWidget();
|
||||||
|
|||||||
@@ -133,11 +133,14 @@ void wxHeaderCtrl::DoScrollHorz(int dx)
|
|||||||
|
|
||||||
wxSize wxHeaderCtrl::DoGetBestSize() const
|
wxSize wxHeaderCtrl::DoGetBestSize() const
|
||||||
{
|
{
|
||||||
|
wxWindow *win = GetParent();
|
||||||
|
int height = wxRendererNative::Get().GetHeaderButtonHeight( win );
|
||||||
|
|
||||||
// the vertical size is rather arbitrary but it looks better if we leave
|
// the vertical size is rather arbitrary but it looks better if we leave
|
||||||
// some space around the text
|
// some space around the text
|
||||||
const wxSize size(IsEmpty() ? wxHeaderCtrlBase::DoGetBestSize().x
|
const wxSize size(IsEmpty() ? wxHeaderCtrlBase::DoGetBestSize().x
|
||||||
: GetColEnd(GetColumnCount() - 1),
|
: GetColEnd(GetColumnCount() - 1),
|
||||||
(7*GetCharHeight())/4);
|
height ); // (7*GetCharHeight())/4);
|
||||||
CacheBestSize(size);
|
CacheBestSize(size);
|
||||||
return size;
|
return size;
|
||||||
}
|
}
|
||||||
@@ -493,6 +496,11 @@ void wxHeaderCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
|
|||||||
int w, h;
|
int w, h;
|
||||||
GetClientSize(&w, &h);
|
GetClientSize(&w, &h);
|
||||||
|
|
||||||
|
#ifdef __WXGTK__
|
||||||
|
int vw;
|
||||||
|
GetVirtualSize(&vw, NULL);
|
||||||
|
#endif
|
||||||
|
|
||||||
wxAutoBufferedPaintDC dc(this);
|
wxAutoBufferedPaintDC dc(this);
|
||||||
|
|
||||||
dc.SetBackground(GetBackgroundColour());
|
dc.SetBackground(GetBackgroundColour());
|
||||||
@@ -510,7 +518,7 @@ void wxHeaderCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
|
|||||||
if ( col.IsHidden() )
|
if ( col.IsHidden() )
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
const int colWidth = col.GetWidth();
|
int colWidth = col.GetWidth();
|
||||||
|
|
||||||
wxHeaderSortIconType sortArrow;
|
wxHeaderSortIconType sortArrow;
|
||||||
if ( col.IsSortKey() )
|
if ( col.IsSortKey() )
|
||||||
@@ -534,11 +542,22 @@ void wxHeaderCtrl::OnPaint(wxPaintEvent& WXUNUSED(event))
|
|||||||
state = wxCONTROL_DISABLED;
|
state = wxCONTROL_DISABLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (i == 0)
|
||||||
|
state |= wxCONTROL_SPECIAL;
|
||||||
|
|
||||||
wxHeaderButtonParams params;
|
wxHeaderButtonParams params;
|
||||||
params.m_labelText = col.GetTitle();
|
params.m_labelText = col.GetTitle();
|
||||||
params.m_labelBitmap = col.GetBitmap();
|
params.m_labelBitmap = col.GetBitmap();
|
||||||
params.m_labelAlignment = col.GetAlignment();
|
params.m_labelAlignment = col.GetAlignment();
|
||||||
|
|
||||||
|
#ifdef __WXGTK__
|
||||||
|
if (i == count-1)
|
||||||
|
{
|
||||||
|
colWidth = wxMax( colWidth, vw - xpos );
|
||||||
|
state |= wxCONTROL_EXPANDED;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
wxRendererNative::Get().DrawHeaderButton
|
wxRendererNative::Get().DrawHeaderButton
|
||||||
(
|
(
|
||||||
this,
|
this,
|
||||||
|
|||||||
@@ -117,11 +117,8 @@ static GtkWidget *s_first_button = NULL;
|
|||||||
static GtkWidget *s_other_button = NULL;
|
static GtkWidget *s_other_button = NULL;
|
||||||
static GtkWidget *s_last_button = NULL;
|
static GtkWidget *s_last_button = NULL;
|
||||||
|
|
||||||
GtkWidget *GetHeaderButtonWidgetFirst()
|
static void CreateHeaderButtona()
|
||||||
{
|
{
|
||||||
|
|
||||||
if ( !s_first_button )
|
|
||||||
{
|
|
||||||
// Get the dummy tree widget, give it a column, and then use the
|
// Get the dummy tree widget, give it a column, and then use the
|
||||||
// widget in the column header for the rendering code.
|
// widget in the column header for the rendering code.
|
||||||
GtkWidget* treewidget = GetTreeWidget();
|
GtkWidget* treewidget = GetTreeWidget();
|
||||||
@@ -137,31 +134,28 @@ GtkWidget *GetHeaderButtonWidgetFirst()
|
|||||||
column = gtk_tree_view_column_new();
|
column = gtk_tree_view_column_new();
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
|
gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
|
||||||
s_last_button = column->button;
|
s_last_button = column->button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GtkWidget *GetHeaderButtonWidgetFirst()
|
||||||
|
{
|
||||||
|
if (!s_first_button)
|
||||||
|
CreateHeaderButtons();
|
||||||
|
|
||||||
return s_first_button;
|
return s_first_button;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
GtkWidget *GetHeaderButtonWidgetLast()
|
||||||
|
{
|
||||||
|
if (!s_last_button)
|
||||||
|
CreateHeaderButtons();
|
||||||
|
|
||||||
|
return s_last_button;
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *GetHeaderButtonWidget()
|
GtkWidget *GetHeaderButtonWidget()
|
||||||
{
|
{
|
||||||
if ( !s_other_button )
|
if (!s_other_button)
|
||||||
{
|
CreateHeaderButtons();
|
||||||
// Get the dummy tree widget, give it a column, and then use the
|
|
||||||
// widget in the column header for the rendering code.
|
|
||||||
GtkWidget* treewidget = GetTreeWidget();
|
|
||||||
|
|
||||||
GtkTreeViewColumn *column = gtk_tree_view_column_new();
|
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
|
|
||||||
s_first_button = column->button;
|
|
||||||
|
|
||||||
column = gtk_tree_view_column_new();
|
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
|
|
||||||
s_other_button = column->button;
|
|
||||||
|
|
||||||
column = gtk_tree_view_column_new();
|
|
||||||
gtk_tree_view_append_column(GTK_TREE_VIEW(treewidget), column);
|
|
||||||
s_last_button = column->button;
|
|
||||||
}
|
|
||||||
|
|
||||||
return s_other_button;
|
return s_other_button;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -173,6 +173,8 @@ wxRendererGTK::DrawHeaderButton(wxWindow *win,
|
|||||||
GtkWidget *button = wxGTKPrivate::GetHeaderButtonWidget();
|
GtkWidget *button = wxGTKPrivate::GetHeaderButtonWidget();
|
||||||
if (flags & wxCONTROL_SPECIAL)
|
if (flags & wxCONTROL_SPECIAL)
|
||||||
button = wxGTKPrivate::GetHeaderButtonWidgetFirst();
|
button = wxGTKPrivate::GetHeaderButtonWidgetFirst();
|
||||||
|
if (flags & wxCONTROL_EXPANDED)
|
||||||
|
button = wxGTKPrivate::GetHeaderButtonWidgetLast();
|
||||||
|
|
||||||
GdkWindow* gdk_window = wxGetGdkWindowForDC(win, dc);
|
GdkWindow* gdk_window = wxGetGdkWindowForDC(win, dc);
|
||||||
wxASSERT_MSG( gdk_window,
|
wxASSERT_MSG( gdk_window,
|
||||||
|
|||||||
Reference in New Issue
Block a user