diff options
author | Caolán McNamara <caolanm@redhat.com> | 2020-07-04 18:00:52 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2020-07-05 16:42:39 +0200 |
commit | a5f95804c1a730fb393c33b49e6fbe0f5a5e9eac (patch) | |
tree | 44ceb650ccfa1e7e5178d8902ceb6f088acf47af /vcl | |
parent | 72bb13af1808b27a293e09a3ead2aadd049e9ec1 (diff) |
tdf#134479 allow disable font preview to work on existing font comboboxes
not just newly created one.
you can only restore back to a text-only view, not a text+(icon/whatever) view
Change-Id: Ic3becd7a942ee6b1dbabb57eebf1e25d1b626fdb
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/97991
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/inc/salvtables.hxx | 4 | ||||
-rw-r--r-- | vcl/source/app/salvtables.cxx | 18 | ||||
-rw-r--r-- | vcl/source/control/combobox.cxx | 5 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 36 |
4 files changed, 44 insertions, 19 deletions
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx index a71c31941d51..5cde0ae6a4bd 100644 --- a/vcl/inc/salvtables.hxx +++ b/vcl/inc/salvtables.hxx @@ -910,7 +910,7 @@ public: virtual vcl::Font get_entry_font() override; - virtual void set_custom_renderer() override; + virtual void set_custom_renderer(bool bOn) override; virtual int get_max_mru_count() const override; @@ -980,7 +980,7 @@ public: virtual vcl::Font get_entry_font() override; - virtual void set_custom_renderer() override; + virtual void set_custom_renderer(bool bOn) override; virtual int get_max_mru_count() const override; diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index 535ac3566cde..930590fb7dc7 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -5739,7 +5739,7 @@ void SalInstanceComboBoxWithoutEdit::set_entry_font(const vcl::Font&) { assert(f vcl::Font SalInstanceComboBoxWithoutEdit::get_entry_font() { assert(false); return vcl::Font(); } -void SalInstanceComboBoxWithoutEdit::set_custom_renderer() +void SalInstanceComboBoxWithoutEdit::set_custom_renderer(bool /*bOn*/) { assert(false && "not implemented"); } @@ -5907,16 +5907,22 @@ vcl::Font SalInstanceComboBoxWithEdit::get_entry_font() return pEdit->GetPointFont(*pEdit); } -void SalInstanceComboBoxWithEdit::set_custom_renderer() +void SalInstanceComboBoxWithEdit::set_custom_renderer(bool bOn) { + if (m_xComboBox->IsUserDrawEnabled() == bOn) + return; + auto nOldEntryHeight = m_xComboBox->GetDropDownEntryHeight(); auto nDropDownLineCount = m_xComboBox->GetDropDownLineCount(); - m_xComboBox->EnableUserDraw(true); - m_xComboBox->SetUserDrawHdl(LINK(this, SalInstanceComboBoxWithEdit, UserDrawHdl)); + m_xComboBox->EnableUserDraw(bOn); + if (bOn) + m_xComboBox->SetUserDrawHdl(LINK(this, SalInstanceComboBoxWithEdit, UserDrawHdl)); + else + m_xComboBox->SetUserDrawHdl(Link<UserDrawEvent*, void>()); // adjust the line count to fit approx the height it would have been before - // using a custom renderer + // changing the renderer auto nNewEntryHeight = m_xComboBox->GetDropDownEntryHeight(); double fRatio = nOldEntryHeight / static_cast<double>(nNewEntryHeight); m_xComboBox->SetDropDownLineCount(nDropDownLineCount * fRatio); @@ -6082,7 +6088,7 @@ public: virtual bool changed_by_direct_pick() const override { return m_bTreeChange; } - virtual void set_custom_renderer() override + virtual void set_custom_renderer(bool /*bOn*/) override { assert(false && "not implemented"); } diff --git a/vcl/source/control/combobox.cxx b/vcl/source/control/combobox.cxx index 13a3bc8dfeaa..0de42f530856 100644 --- a/vcl/source/control/combobox.cxx +++ b/vcl/source/control/combobox.cxx @@ -1268,6 +1268,11 @@ void ComboBox::EnableUserDraw( bool bUserDraw ) m_pImpl->m_pImplLB->GetMainWindow()->EnableUserDraw( bUserDraw ); } +bool ComboBox::IsUserDrawEnabled() const +{ + return m_pImpl->m_pImplLB->GetMainWindow()->IsUserDrawEnabled(); +} + void ComboBox::DrawEntry(const UserDrawEvent& rEvt) { SAL_WARN_IF(rEvt.GetWindow() != m_pImpl->m_pImplLB->GetMainWindow(), "vcl", "DrawEntry?!"); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index e4449b121e41..f2b3b8fb310a 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -12739,6 +12739,7 @@ private: bool m_bAutoComplete; bool m_bAutoCompleteCaseSensitive; bool m_bChangedByMenu; + bool m_bCustomRenderer; bool m_bActivateCalled; gint m_nTextCol; gint m_nIdCol; @@ -13752,6 +13753,7 @@ public: , m_bAutoComplete(false) , m_bAutoCompleteCaseSensitive(false) , m_bChangedByMenu(false) + , m_bCustomRenderer(false) , m_bActivateCalled(false) , m_nTextCol(gtk_combo_box_get_entry_text_column(pComboBox)) , m_nIdCol(gtk_combo_box_get_id_column(pComboBox)) @@ -14274,22 +14276,34 @@ public: return m_bChangedByMenu; } - virtual void set_custom_renderer() override + virtual void set_custom_renderer(bool bOn) override { + if (bOn == m_bCustomRenderer) + return; GList* pColumns = gtk_tree_view_get_columns(m_pTreeView); // keep the original height around for optimal popup height calculation - m_nNonCustomLineHeight = ::get_height_row(m_pTreeView, pColumns); + m_nNonCustomLineHeight = bOn ? ::get_height_row(m_pTreeView, pColumns) : -1; GtkTreeViewColumn* pColumn = GTK_TREE_VIEW_COLUMN(pColumns->data); gtk_cell_layout_clear(GTK_CELL_LAYOUT(pColumn)); - GtkCellRenderer *pRenderer = custom_cell_renderer_surface_new(); - GValue value = G_VALUE_INIT; - g_value_init(&value, G_TYPE_POINTER); - g_value_set_pointer(&value, static_cast<gpointer>(this)); - g_object_set_property(G_OBJECT(pRenderer), "instance", &value); - gtk_tree_view_column_pack_start(pColumn, pRenderer, true); - gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol); - gtk_tree_view_column_add_attribute(pColumn, pRenderer, "id", m_nIdCol); + if (bOn) + { + GtkCellRenderer *pRenderer = custom_cell_renderer_surface_new(); + GValue value = G_VALUE_INIT; + g_value_init(&value, G_TYPE_POINTER); + g_value_set_pointer(&value, static_cast<gpointer>(this)); + g_object_set_property(G_OBJECT(pRenderer), "instance", &value); + gtk_tree_view_column_pack_start(pColumn, pRenderer, true); + gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol); + gtk_tree_view_column_add_attribute(pColumn, pRenderer, "id", m_nIdCol); + } + else + { + GtkCellRenderer *pRenderer = gtk_cell_renderer_text_new(); + gtk_tree_view_column_pack_start(pColumn, pRenderer, true); + gtk_tree_view_column_add_attribute(pColumn, pRenderer, "text", m_nTextCol); + } g_list_free(pColumns); + m_bCustomRenderer = bOn; } void call_signal_custom_render(VirtualDevice& rOutput, const tools::Rectangle& rRect, bool bSelected, const OUString& rId) @@ -14762,7 +14776,7 @@ public: return m_bTreeChange; } - virtual void set_custom_renderer() override + virtual void set_custom_renderer(bool /*bOn*/) override { assert(false && "not implemented"); } |