summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/svtools/editbrowsebox.hxx8
-rw-r--r--include/vcl/weld.hxx3
-rw-r--r--svtools/source/brwbox/ebbcontrols.cxx18
-rw-r--r--vcl/inc/salvtables.hxx4
-rw-r--r--vcl/source/app/salvtables.cxx17
-rw-r--r--vcl/unx/gtk3/gtkinst.cxx69
6 files changed, 104 insertions, 15 deletions
diff --git a/include/svtools/editbrowsebox.hxx b/include/svtools/editbrowsebox.hxx
index a758d1142a88..64787aff043d 100644
--- a/include/svtools/editbrowsebox.hxx
+++ b/include/svtools/editbrowsebox.hxx
@@ -172,7 +172,7 @@ namespace svt
virtual bool ProcessKey(const KeyEvent& rKEvt);
- virtual void SetPointFont(const vcl::Font& rFont);
+ virtual void SetPointFont(const vcl::Font& rFont) = 0;
// chain after the FocusInHdl
void SetFocusInHdl(const Link<LinkParamNone*,void>& rHdl)
@@ -564,6 +564,8 @@ namespace svt
virtual ~CheckBoxControl() override;
virtual void dispose() override;
+ virtual void SetPointFont(const vcl::Font& rFont) override;
+
void SetToggleHdl(const Link<weld::CheckButton&,void>& rHdl) {m_aToggleLink = rHdl;}
// sets a link to call when the text is changed by the user
@@ -629,6 +631,8 @@ namespace svt
public:
ComboBoxControl(BrowserDataWin* pParent);
+ virtual void SetPointFont(const vcl::Font& rFont) override;
+
virtual void SetEditableReadOnly(bool bReadOnly) override
{
m_xWidget->set_entry_editable(!bReadOnly);
@@ -696,6 +700,8 @@ namespace svt
public:
ListBoxControl(BrowserDataWin* pParent);
+ virtual void SetPointFont(const vcl::Font& rFont) override;
+
weld::ComboBox& get_widget() { return *m_xWidget; }
// sets a link to call when the selection is changed by the user
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 9038351c2715..00275b919a84 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -787,6 +787,9 @@ public:
virtual void paste_entry_clipboard() = 0;
// font size is in points, not pixels, e.g. see Window::[G]etPointFont
+ virtual void set_font(const vcl::Font& rFont) = 0;
+
+ // font size is in points, not pixels, e.g. see Window::[G]etPointFont
virtual void set_entry_font(const vcl::Font& rFont) = 0;
virtual vcl::Font get_entry_font() = 0;
diff --git a/svtools/source/brwbox/ebbcontrols.cxx b/svtools/source/brwbox/ebbcontrols.cxx
index de2cf8ffb021..d35f2c7aa9a7 100644
--- a/svtools/source/brwbox/ebbcontrols.cxx
+++ b/svtools/source/brwbox/ebbcontrols.cxx
@@ -37,6 +37,11 @@ namespace svt
m_xWidget->connect_mouse_move(LINK(this, ControlBase, MouseMoveHdl));
}
+ void ComboBoxControl::SetPointFont(const vcl::Font& rFont)
+ {
+ m_xWidget->set_entry_font(rFont);
+ }
+
void ComboBoxControl::dispose()
{
m_xWidget.reset();
@@ -127,6 +132,11 @@ namespace svt
m_xWidget->connect_mouse_move(LINK(this, ControlBase, MouseMoveHdl));
}
+ void ListBoxControl::SetPointFont(const vcl::Font& rFont)
+ {
+ m_xWidget->set_font(rFont);
+ }
+
void ListBoxControl::dispose()
{
m_xWidget.reset();
@@ -201,6 +211,10 @@ namespace svt
m_xBox->connect_toggled(LINK(this, CheckBoxControl, OnToggle));
}
+ void CheckBoxControl::SetPointFont(const vcl::Font& /*rFont*/)
+ {
+ }
+
void CheckBoxControl::EnableTriState( bool bTriState )
{
if (m_aModeState.bTriStateEnabled != bTriState)
@@ -361,10 +375,6 @@ namespace svt
return static_cast<BrowserDataWin*>(GetParent())->GetParent()->ProcessKey(rKEvt);
}
- void ControlBase::SetPointFont(const vcl::Font& /*rFont*/)
- {
- }
-
IMPL_LINK(ControlBase, KeyInputHdl, const KeyEvent&, rKEvt, bool)
{
return ProcessKey(rKEvt);
diff --git a/vcl/inc/salvtables.hxx b/vcl/inc/salvtables.hxx
index 1574a3a144c6..d3d31afa97cb 100644
--- a/vcl/inc/salvtables.hxx
+++ b/vcl/inc/salvtables.hxx
@@ -911,6 +911,8 @@ public:
virtual void paste_entry_clipboard() override;
+ virtual void set_font(const vcl::Font& rFont) override;
+
virtual void set_entry_font(const vcl::Font&) override;
virtual vcl::Font get_entry_font() override;
@@ -981,6 +983,8 @@ public:
virtual bool get_entry_selection_bounds(int& rStartPos, int& rEndPos) override;
+ virtual void set_font(const vcl::Font& rFont) override;
+
virtual void set_entry_font(const vcl::Font& rFont) override;
virtual vcl::Font get_entry_font() override;
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index 3efdb345e1ea..54199b1284b3 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -6264,6 +6264,12 @@ void SalInstanceComboBoxWithoutEdit::copy_entry_clipboard() { assert(false); }
void SalInstanceComboBoxWithoutEdit::paste_entry_clipboard() { assert(false); }
+void SalInstanceComboBoxWithoutEdit::set_font(const vcl::Font& rFont)
+{
+ m_xComboBox->SetControlFont(rFont);
+ m_xComboBox->Invalidate();
+}
+
void SalInstanceComboBoxWithoutEdit::set_entry_font(const vcl::Font&) { assert(false); }
vcl::Font SalInstanceComboBoxWithoutEdit::get_entry_font()
@@ -6425,12 +6431,17 @@ bool SalInstanceComboBoxWithEdit::get_entry_selection_bounds(int& rStartPos, int
return rSelection.Len();
}
+void SalInstanceComboBoxWithEdit::set_font(const vcl::Font& rFont)
+{
+ m_xComboBox->SetControlFont(rFont);
+ m_xComboBox->Invalidate();
+}
+
void SalInstanceComboBoxWithEdit::set_entry_font(const vcl::Font& rFont)
{
Edit* pEdit = m_xComboBox->GetSubEdit();
assert(pEdit);
- pEdit->SetPointFont(*pEdit->GetOutDev(), rFont);
- m_xComboBox->SetControlFont(rFont); // tdf#134601 set it as control font to take effect properly
+ pEdit->SetControlFont(rFont); // tdf#134601 set it as control font to take effect properly
pEdit->Invalidate();
}
@@ -6562,6 +6573,8 @@ public:
rEntry.SetAutocompleteHdl(Link<Edit&, void>());
}
+ virtual void set_font(const vcl::Font&) override { assert(false && "not implemented"); }
+
virtual void set_entry_font(const vcl::Font& rFont) override
{
Edit& rEntry = m_pEntry->getEntry();
diff --git a/vcl/unx/gtk3/gtkinst.cxx b/vcl/unx/gtk3/gtkinst.cxx
index f9d079b6b734..94a5a614d3c6 100644
--- a/vcl/unx/gtk3/gtkinst.cxx
+++ b/vcl/unx/gtk3/gtkinst.cxx
@@ -17196,12 +17196,14 @@ private:
GtkWidget* m_pEntry;
GtkEditable* m_pEditable;
// GtkCellView* m_pCellView;
+ GtkCssProvider* m_pFontCssProvider;
GtkEventController* m_pKeyController;
GtkEventController* m_pEntryKeyController;
GtkEventController* m_pMenuKeyController;
GtkEventController* m_pEntryFocusController;
// std::unique_ptr<CustomRenderMenuButtonHelper> m_xCustomMenuButtonHelper;
- std::unique_ptr<vcl::Font> m_xFont;
+ std::optional<vcl::Font> m_xFont;
+ std::optional<vcl::Font> m_xEntryFont;
std::unique_ptr<comphelper::string::NaturalStringSorter> m_xSorter;
vcl::QuickSelectionEngine m_aQuickSelectionEngine;
std::vector<std::unique_ptr<GtkTreeRowReference, GtkTreeRowReferenceDeleter>> m_aSeparatorRows;
@@ -18228,6 +18230,7 @@ public:
// , m_pToggleButton(GTK_WIDGET(gtk_builder_get_object(pComboBuilder, "button")))
, m_pEntry(GTK_IS_ENTRY(gtk_combo_box_get_child(pComboBox)) ? gtk_combo_box_get_child(pComboBox) : nullptr)
, m_pEditable(GTK_EDITABLE(m_pEntry))
+ , m_pFontCssProvider(nullptr)
// , m_pCellView(nullptr)
, m_aQuickSelectionEngine(*this)
// , m_bHoverSelection(false)
@@ -18592,9 +18595,30 @@ public:
gtk_widget_activate_action(m_pEntry, "paste.clipboard", nullptr);
}
+ virtual void set_font(const vcl::Font& rFont) override
+ {
+ m_xFont = rFont;
+ GtkStyleContext *pWidgetContext = gtk_widget_get_style_context(GTK_WIDGET(m_pComboBox));
+ if (m_pFontCssProvider)
+ gtk_style_context_remove_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFontCssProvider));
+ m_pFontCssProvider = gtk_css_provider_new();
+ OUString aBuffer = "combobox { " + vcl_font_to_css(rFont) + "}";
+ OString aResult = OUStringToOString(aBuffer, RTL_TEXTENCODING_UTF8);
+ css_provider_load_from_data(m_pFontCssProvider, aResult.getStr(), aResult.getLength());
+ gtk_style_context_add_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFontCssProvider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+
+ virtual vcl::Font get_font() override
+ {
+ if (m_xFont)
+ return *m_xFont;
+ return GtkInstanceWidget::get_font();
+ }
+
virtual void set_entry_font(const vcl::Font& rFont) override
{
- m_xFont.reset(new vcl::Font(rFont));
+ m_xEntryFont = rFont;
assert(m_pEntry);
PangoAttrList* pOrigList = gtk_entry_get_attributes(GTK_ENTRY(m_pEntry));
PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new();
@@ -18605,8 +18629,8 @@ public:
virtual vcl::Font get_entry_font() override
{
- if (m_xFont)
- return *m_xFont;
+ if (m_xEntryFont)
+ return *m_xEntryFont;
assert(m_pEntry);
PangoContext* pContext = gtk_widget_get_pango_context(m_pEntry);
return pango_to_vcl(pango_context_get_font_description(pContext),
@@ -18923,8 +18947,10 @@ private:
GtkWidget* m_pToggleButton;
GtkWidget* m_pEntry;
GtkCellView* m_pCellView;
+ GtkCssProvider* m_pFontCssProvider;
std::unique_ptr<CustomRenderMenuButtonHelper> m_xCustomMenuButtonHelper;
- std::unique_ptr<vcl::Font> m_xFont;
+ std::optional<vcl::Font> m_xFont;
+ std::optional<vcl::Font> m_xEntryFont;
std::unique_ptr<comphelper::string::NaturalStringSorter> m_xSorter;
vcl::QuickSelectionEngine m_aQuickSelectionEngine;
std::vector<std::unique_ptr<GtkTreeRowReference, GtkTreeRowReferenceDeleter>> m_aSeparatorRows;
@@ -19961,6 +19987,7 @@ public:
, m_pToggleButton(GTK_WIDGET(gtk_builder_get_object(pComboBuilder, "button")))
, m_pEntry(GTK_WIDGET(gtk_builder_get_object(pComboBuilder, "entry")))
, m_pCellView(nullptr)
+ , m_pFontCssProvider(nullptr)
, m_aQuickSelectionEngine(*this)
, m_bHoverSelection(false)
, m_bMouseInOverlayButton(false)
@@ -20377,9 +20404,30 @@ public:
gtk_editable_paste_clipboard(GTK_EDITABLE(m_pEntry));
}
+ virtual void set_font(const vcl::Font& rFont) override
+ {
+ m_xFont = rFont;
+ GtkStyleContext *pWidgetContext = gtk_widget_get_style_context(GTK_WIDGET(getContainer()));
+ if (m_pFontCssProvider)
+ gtk_style_context_remove_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFontCssProvider));
+ m_pFontCssProvider = gtk_css_provider_new();
+ OUString aBuffer = "box#combobox { " + vcl_font_to_css(rFont) + "}";
+ OString aResult = OUStringToOString(aBuffer, RTL_TEXTENCODING_UTF8);
+ css_provider_load_from_data(m_pFontCssProvider, aResult.getStr(), aResult.getLength());
+ gtk_style_context_add_provider(pWidgetContext, GTK_STYLE_PROVIDER(m_pFontCssProvider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+
+ virtual vcl::Font get_font() override
+ {
+ if (m_xFont)
+ return *m_xFont;
+ return GtkInstanceContainer::get_font();
+ }
+
virtual void set_entry_font(const vcl::Font& rFont) override
{
- m_xFont.reset(new vcl::Font(rFont));
+ m_xEntryFont = rFont;
assert(m_pEntry);
PangoAttrList* pOrigList = gtk_entry_get_attributes(GTK_ENTRY(m_pEntry));
PangoAttrList* pAttrList = pOrigList ? pango_attr_list_copy(pOrigList) : pango_attr_list_new();
@@ -20390,8 +20438,8 @@ public:
virtual vcl::Font get_entry_font() override
{
- if (m_xFont)
- return *m_xFont;
+ if (m_xEntryFont)
+ return *m_xEntryFont;
assert(m_pEntry);
PangoContext* pContext = gtk_widget_get_pango_context(m_pEntry);
return pango_to_vcl(pango_context_get_font_description(pContext),
@@ -21007,6 +21055,11 @@ public:
m_xEntry->paste_clipboard();
}
+ virtual void set_font(const vcl::Font&) override
+ {
+ assert(false && "not implemented");
+ }
+
virtual void set_entry_font(const vcl::Font& rFont) override
{
m_xEntry->set_font(rFont);