diff options
author | Caolán McNamara <caolanm@redhat.com> | 2018-09-18 17:13:33 +0100 |
---|---|---|
committer | Caolán McNamara <caolanm@redhat.com> | 2018-09-19 22:00:27 +0200 |
commit | af60b15af12bbb0cda2b48b99fde632f1532e1aa (patch) | |
tree | e25dec08bb34d7bde3bd821810bd7b8aa83fd9f1 /vcl | |
parent | dbf355e5dbffe97b64a98005d1b84edddc472e4f (diff) |
weld TPGalleryThemeGeneral
Change-Id: Id5ec1b1282c039f30c40fc781be0f6d72a8bfb47
Reviewed-on: https://gerrit.libreoffice.org/60718
Tested-by: Jenkins
Reviewed-by: Caolán McNamara <caolanm@redhat.com>
Tested-by: Caolán McNamara <caolanm@redhat.com>
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/app/salvtables.cxx | 25 | ||||
-rw-r--r-- | vcl/unx/gtk3/gtk3gtkinst.cxx | 77 |
2 files changed, 79 insertions, 23 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx index cbaf74bb807c..85d6740790d2 100644 --- a/vcl/source/app/salvtables.cxx +++ b/vcl/source/app/salvtables.cxx @@ -37,6 +37,7 @@ #include <vcl/combobox.hxx> #include <vcl/lstbox.hxx> #include <vcl/dialog.hxx> +#include <vcl/fixed.hxx> #include <vcl/layout.hxx> #include <vcl/menubtn.hxx> #include <vcl/prgsbar.hxx> @@ -1393,6 +1394,24 @@ public: } }; +class SalInstanceImage : public SalInstanceWidget, public virtual weld::Image +{ +private: + VclPtr<FixedImage> m_xImage; + +public: + SalInstanceImage(FixedImage* pImage, bool bTakeOwnership) + : SalInstanceWidget(pImage, bTakeOwnership) + , m_xImage(pImage) + { + } + + virtual void set_from_icon_name(const OUString& rIconName) override + { + m_xImage->SetImage(::Image(BitmapEx(rIconName))); + } +}; + class SalInstanceEntry : public SalInstanceWidget, public virtual weld::Entry { private: @@ -2628,6 +2647,12 @@ public: return pProgress ? o3tl::make_unique<SalInstanceProgressBar>(pProgress, bTakeOwnership) : nullptr; } + virtual std::unique_ptr<weld::Image> weld_image(const OString &id, bool bTakeOwnership) override + { + FixedImage* pImage = m_xBuilder->get<FixedImage>(id); + return pImage ? o3tl::make_unique<SalInstanceImage>(pImage, bTakeOwnership) : nullptr; + } + virtual std::unique_ptr<weld::Entry> weld_entry(const OString &id, bool bTakeOwnership) override { Edit* pEntry = m_xBuilder->get<Edit>(id); diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx index 4924abb21e58..4a564e894e37 100644 --- a/vcl/unx/gtk3/gtk3gtkinst.cxx +++ b/vcl/unx/gtk3/gtk3gtkinst.cxx @@ -3306,6 +3306,51 @@ public: } }; +namespace +{ + GdkPixbuf* load_icon_by_name(const OUString& rIconName, const OUString& rIconTheme, const OUString& rUILang) + { + GdkPixbuf* pixbuf = nullptr; + auto xMemStm = ImageTree::get().getImageStream(rIconName, rIconTheme, rUILang); + if (xMemStm) + { + GdkPixbufLoader *pixbuf_loader = gdk_pixbuf_loader_new(); + gdk_pixbuf_loader_write(pixbuf_loader, static_cast<const guchar*>(xMemStm->GetData()), + xMemStm->Seek(STREAM_SEEK_TO_END), nullptr); + gdk_pixbuf_loader_close(pixbuf_loader, nullptr); + pixbuf = gdk_pixbuf_loader_get_pixbuf(pixbuf_loader); + if (pixbuf) + g_object_ref(pixbuf); + g_object_unref(pixbuf_loader); + } + return pixbuf; + } +} + +class GtkInstanceImage : public GtkInstanceWidget, public virtual weld::Image +{ +private: + GtkImage* m_pImage; + +public: + GtkInstanceImage(GtkImage* pImage, bool bTakeOwnership) + : GtkInstanceWidget(GTK_WIDGET(pImage), bTakeOwnership) + , m_pImage(pImage) + { + } + + virtual void set_from_icon_name(const OUString& rIconName) override + { + OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme(); + OUString sUILang = Application::GetSettings().GetUILanguageTag().getBcp47(); + GdkPixbuf* pixbuf = load_icon_by_name(rIconName, sIconTheme, sUILang); + if (!pixbuf) + return; + gtk_image_set_from_pixbuf(m_pImage, pixbuf); + g_object_unref(pixbuf); + } +}; + class GtkInstanceEntry : public GtkInstanceWidget, public virtual weld::Entry { private: @@ -3560,27 +3605,6 @@ namespace return found; } - GdkPixbuf* load_icon_by_name(const OUString& rIconName, const OUString& rIconTheme, const OUString& rUILang) - { - GdkPixbuf* pixbuf = nullptr; - auto xMemStm = ImageTree::get().getImageStream(rIconName, rIconTheme, rUILang); - if (xMemStm) - { - GdkPixbufLoader *pixbuf_loader = gdk_pixbuf_loader_new(); - gdk_pixbuf_loader_write(pixbuf_loader, static_cast<const guchar*>(xMemStm->GetData()), - xMemStm->Seek(STREAM_SEEK_TO_END), nullptr); - gdk_pixbuf_loader_close(pixbuf_loader, nullptr); - pixbuf = gdk_pixbuf_loader_get_pixbuf(pixbuf_loader); - if (pixbuf) - g_object_ref(pixbuf); - g_object_unref(pixbuf_loader); - } - return pixbuf; - } -} - -namespace -{ void insert_row(GtkListStore* pListStore, int pos, const OUString& rId, const OUString& rText, const OUString* pImage) { GtkTreeIter iter; @@ -5191,8 +5215,6 @@ private: GtkImage* pImage = GTK_IMAGE(pWidget); const gchar* icon_name; gtk_image_get_icon_name(pImage, &icon_name, nullptr); - GtkIconSize size; - g_object_get(pImage, "icon-size", &size, nullptr); if (icon_name) { OUString aIconName(icon_name, strlen(icon_name), RTL_TEXTENCODING_UTF8); @@ -5497,6 +5519,15 @@ public: return o3tl::make_unique<GtkInstanceProgressBar>(pProgressBar, bTakeOwnership); } + virtual std::unique_ptr<weld::Image> weld_image(const OString &id, bool bTakeOwnership) override + { + GtkImage* pImage = GTK_IMAGE(gtk_builder_get_object(m_pBuilder, id.getStr())); + if (!pImage) + return nullptr; + auto_add_parentless_widgets_to_container(GTK_WIDGET(pImage)); + return o3tl::make_unique<GtkInstanceImage>(pImage, bTakeOwnership); + } + virtual std::unique_ptr<weld::Entry> weld_entry(const OString &id, bool bTakeOwnership) override { GtkEntry* pEntry = GTK_ENTRY(gtk_builder_get_object(m_pBuilder, id.getStr())); |