From c077ee943391930e0a7550f7ce810cb72a6d5820 Mon Sep 17 00:00:00 2001 From: Robert Roebling Date: Sat, 20 Mar 2004 12:57:46 +0000 Subject: [PATCH] Applied notebook font patch. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@26284 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- include/wx/gtk/notebook.h | 3 ++ include/wx/gtk1/notebook.h | 3 ++ src/gtk/notebook.cpp | 99 +++++++++++++++++++++++++++++++++----- src/gtk1/notebook.cpp | 99 +++++++++++++++++++++++++++++++++----- 4 files changed, 180 insertions(+), 24 deletions(-) diff --git a/include/wx/gtk/notebook.h b/include/wx/gtk/notebook.h index 2441d64b3a..9dfef193c1 100644 --- a/include/wx/gtk/notebook.h +++ b/include/wx/gtk/notebook.h @@ -106,6 +106,9 @@ public: bool DoPhase(int phase); #endif + // set all page's font + bool SetFont(const wxFont& font); + void ApplyWidgetStyle(); // report if window belongs to notebook diff --git a/include/wx/gtk1/notebook.h b/include/wx/gtk1/notebook.h index 2441d64b3a..9dfef193c1 100644 --- a/include/wx/gtk1/notebook.h +++ b/include/wx/gtk1/notebook.h @@ -106,6 +106,9 @@ public: bool DoPhase(int phase); #endif + // set all page's font + bool SetFont(const wxFont& font); + void ApplyWidgetStyle(); // report if window belongs to notebook diff --git a/src/gtk/notebook.cpp b/src/gtk/notebook.cpp index 8b23e3256e..ef02dbb756 100644 --- a/src/gtk/notebook.cpp +++ b/src/gtk/notebook.cpp @@ -24,12 +24,15 @@ #include "wx/intl.h" #include "wx/log.h" #include "wx/bitmap.h" +#include "wx/fontutil.h" #include "wx/gtk/private.h" #include "wx/gtk/win_gtk.h" #include +#include "wx/msgdlg.h" + // ---------------------------------------------------------------------------- // events // ---------------------------------------------------------------------------- @@ -64,23 +67,80 @@ extern bool g_blockEventsOnDrag; class wxGtkNotebookPage: public wxObject { public: - wxGtkNotebookPage() - { - m_image = -1; - m_page = (GtkNotebookPage *) NULL; - m_box = (GtkWidget *) NULL; - } - - wxString m_text; - int m_image; - GtkNotebookPage *m_page; - GtkLabel *m_label; - GtkWidget *m_box; // in which the label and image are packed + wxGtkNotebookPage() + { + m_image = -1; + m_page = (GtkNotebookPage *) NULL; + m_box = (GtkWidget *) NULL; + m_labelStyle = (GtkStyle*) NULL; + } + + ~wxGtkNotebookPage() + { + if (m_labelStyle) + gtk_style_unref( m_labelStyle ); + } + + bool SetFont(const wxFont& font); + + wxString m_text; + int m_image; + GtkNotebookPage *m_page; + GtkLabel *m_label; + GtkWidget *m_box; // in which the label and image are packed + GtkStyle *m_labelStyle; }; + +bool wxGtkNotebookPage::SetFont(const wxFont& font) +{ + if (!m_label) + return false; + + if (m_labelStyle) + { + GtkStyle *remake = gtk_style_copy( m_labelStyle ); + +#ifndef __WXGTK20__ + remake->klass = m_labelStyle->klass; +#endif + + gtk_style_unref( m_labelStyle ); + m_labelStyle = remake; + } + else + { + GtkStyle *def = gtk_rc_get_style( GTK_WIDGET(m_label) ); + + if (!def) + def = gtk_widget_get_default_style(); + + m_labelStyle = gtk_style_copy( def ); + + // FIXME: no more klass in 2.0 +#ifndef __WXGTK20__ + m_labelStyle->klass = def->klass; +#endif + } + +#ifdef __WXGTK20__ + pango_font_description_free( m_labelStyle->font_desc ); + m_labelStyle->font_desc = pango_font_description_copy( font.GetNativeFontInfo()->description ); +#else + gdk_font_unref( m_labelStyle->font ); + m_labelStyle->font = gdk_font_ref( font.GetInternalFont( 1.0 ) ); +#endif + + gtk_widget_set_style( GTK_WIDGET(m_label), m_labelStyle ); + + return true; +} + + #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxGtkNotebookPagesList); + //----------------------------------------------------------------------------- // "switch_page" //----------------------------------------------------------------------------- @@ -655,10 +715,12 @@ bool wxNotebook::InsertPage( size_t position, } /* set the label text */ + nb_page->m_text = text; if (nb_page->m_text.IsEmpty()) nb_page->m_text = wxT(""); nb_page->m_label = GTK_LABEL( gtk_label_new(wxGTK_CONV(nb_page->m_text)) ); + nb_page->SetFont(GetFont()); gtk_box_pack_end( GTK_BOX(nb_page->m_box), GTK_WIDGET(nb_page->m_label), FALSE, FALSE, m_padding ); /* show the label */ @@ -793,6 +855,19 @@ bool wxNotebook::IsOwnGtkWindow( GdkWindow *window ) (NOTEBOOK_PANEL(m_widget) == window)); } +bool wxNotebook::SetFont(const wxFont& font) +{ + bool rc=wxNotebookBase::SetFont(font); + + if (rc) + { + size_t i; + for (i=0 ; i < m_pagesData.GetCount() ; i++) + GetNotebookPage(i)->SetFont(font); + } + return rc; +} + //----------------------------------------------------------------------------- // wxNotebookEvent //----------------------------------------------------------------------------- diff --git a/src/gtk1/notebook.cpp b/src/gtk1/notebook.cpp index 8b23e3256e..ef02dbb756 100644 --- a/src/gtk1/notebook.cpp +++ b/src/gtk1/notebook.cpp @@ -24,12 +24,15 @@ #include "wx/intl.h" #include "wx/log.h" #include "wx/bitmap.h" +#include "wx/fontutil.h" #include "wx/gtk/private.h" #include "wx/gtk/win_gtk.h" #include +#include "wx/msgdlg.h" + // ---------------------------------------------------------------------------- // events // ---------------------------------------------------------------------------- @@ -64,23 +67,80 @@ extern bool g_blockEventsOnDrag; class wxGtkNotebookPage: public wxObject { public: - wxGtkNotebookPage() - { - m_image = -1; - m_page = (GtkNotebookPage *) NULL; - m_box = (GtkWidget *) NULL; - } - - wxString m_text; - int m_image; - GtkNotebookPage *m_page; - GtkLabel *m_label; - GtkWidget *m_box; // in which the label and image are packed + wxGtkNotebookPage() + { + m_image = -1; + m_page = (GtkNotebookPage *) NULL; + m_box = (GtkWidget *) NULL; + m_labelStyle = (GtkStyle*) NULL; + } + + ~wxGtkNotebookPage() + { + if (m_labelStyle) + gtk_style_unref( m_labelStyle ); + } + + bool SetFont(const wxFont& font); + + wxString m_text; + int m_image; + GtkNotebookPage *m_page; + GtkLabel *m_label; + GtkWidget *m_box; // in which the label and image are packed + GtkStyle *m_labelStyle; }; + +bool wxGtkNotebookPage::SetFont(const wxFont& font) +{ + if (!m_label) + return false; + + if (m_labelStyle) + { + GtkStyle *remake = gtk_style_copy( m_labelStyle ); + +#ifndef __WXGTK20__ + remake->klass = m_labelStyle->klass; +#endif + + gtk_style_unref( m_labelStyle ); + m_labelStyle = remake; + } + else + { + GtkStyle *def = gtk_rc_get_style( GTK_WIDGET(m_label) ); + + if (!def) + def = gtk_widget_get_default_style(); + + m_labelStyle = gtk_style_copy( def ); + + // FIXME: no more klass in 2.0 +#ifndef __WXGTK20__ + m_labelStyle->klass = def->klass; +#endif + } + +#ifdef __WXGTK20__ + pango_font_description_free( m_labelStyle->font_desc ); + m_labelStyle->font_desc = pango_font_description_copy( font.GetNativeFontInfo()->description ); +#else + gdk_font_unref( m_labelStyle->font ); + m_labelStyle->font = gdk_font_ref( font.GetInternalFont( 1.0 ) ); +#endif + + gtk_widget_set_style( GTK_WIDGET(m_label), m_labelStyle ); + + return true; +} + + #include "wx/listimpl.cpp" WX_DEFINE_LIST(wxGtkNotebookPagesList); + //----------------------------------------------------------------------------- // "switch_page" //----------------------------------------------------------------------------- @@ -655,10 +715,12 @@ bool wxNotebook::InsertPage( size_t position, } /* set the label text */ + nb_page->m_text = text; if (nb_page->m_text.IsEmpty()) nb_page->m_text = wxT(""); nb_page->m_label = GTK_LABEL( gtk_label_new(wxGTK_CONV(nb_page->m_text)) ); + nb_page->SetFont(GetFont()); gtk_box_pack_end( GTK_BOX(nb_page->m_box), GTK_WIDGET(nb_page->m_label), FALSE, FALSE, m_padding ); /* show the label */ @@ -793,6 +855,19 @@ bool wxNotebook::IsOwnGtkWindow( GdkWindow *window ) (NOTEBOOK_PANEL(m_widget) == window)); } +bool wxNotebook::SetFont(const wxFont& font) +{ + bool rc=wxNotebookBase::SetFont(font); + + if (rc) + { + size_t i; + for (i=0 ; i < m_pagesData.GetCount() ; i++) + GetNotebookPage(i)->SetFont(font); + } + return rc; +} + //----------------------------------------------------------------------------- // wxNotebookEvent //----------------------------------------------------------------------------- -- 2.45.2