summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-09-18 17:13:33 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-09-19 22:00:27 +0200
commitaf60b15af12bbb0cda2b48b99fde632f1532e1aa (patch)
treee25dec08bb34d7bde3bd821810bd7b8aa83fd9f1 /vcl
parentdbf355e5dbffe97b64a98005d1b84edddc472e4f (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.cxx25
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx77
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()));