summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2018-10-08 12:07:58 +0100
committerCaolán McNamara <caolanm@redhat.com>2018-10-09 15:17:04 +0200
commit15ea661bec6e38f4b4b641ed79bd5591345fefbd (patch)
treea9a8c17a99b7c0356d8ba3d77c1b5f582cdfc43f /vcl
parent7ceee0f1ec0e349d0df4980d7fdedbd13c7917c5 (diff)
tdf#120377 weld cluster of animation pages and dialog
Change-Id: Ia5a9880c1e6d88141bd654a9cc761b289f27c249 Reviewed-on: https://gerrit.libreoffice.org/61542 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.cxx41
-rw-r--r--vcl/unx/gtk3/gtk3gtkinst.cxx131
2 files changed, 118 insertions, 54 deletions
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index fb8363ff10e4..3d03b0a70124 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -519,6 +519,24 @@ namespace
{
return Image(BitmapEx(rDevice.GetBitmapEx(Point(), rDevice.GetOutputSizePixel())));
}
+
+ void insert_to_menu(PopupMenu* pMenu, int pos, const OUString& rId, const OUString& rStr,
+ const OUString* pIconName, VirtualDevice* pImageSurface, bool bCheck)
+ {
+ const auto nCount = pMenu->GetItemCount();
+ const sal_uInt16 nLastId = nCount ? pMenu->GetItemId(nCount-1) : 0;
+ const sal_uInt16 nNewid = nLastId + 1;
+ pMenu->InsertItem(nNewid, rStr, bCheck ? MenuItemBits::CHECKABLE : MenuItemBits::NONE,
+ OUStringToOString(rId, RTL_TEXTENCODING_UTF8), pos == -1 ? MENU_APPEND : pos);
+ if (pIconName)
+ {
+ pMenu->SetItemImage(nNewid, createImage(*pIconName));
+ }
+ else if (pImageSurface)
+ {
+ pMenu->SetItemImage(nNewid, createImage(*pImageSurface));
+ }
+ }
}
class SalInstanceMenu : public weld::Menu
@@ -555,21 +573,9 @@ public:
}
virtual void insert(int pos, const OUString& rId, const OUString& rStr,
- const OUString* pIconName, VirtualDevice* pImageSurface) override
+ const OUString* pIconName, VirtualDevice* pImageSurface, bool bCheck) override
{
- const auto nCount = m_xMenu->GetItemCount();
- const sal_uInt16 nLastId = nCount ? m_xMenu->GetItemId(nCount-1) : 0;
- const sal_uInt16 nNewid = nLastId + 1;
- m_xMenu->InsertItem(nNewid, rStr, MenuItemBits::NONE,
- OUStringToOString(rId, RTL_TEXTENCODING_UTF8), pos == -1 ? MENU_APPEND : pos);
- if (pIconName)
- {
- m_xMenu->SetItemImage(nNewid, createImage(*pIconName));
- }
- else if (pImageSurface)
- {
- m_xMenu->SetItemImage(nNewid, createImage(*pImageSurface));
- }
+ insert_to_menu(m_xMenu, pos, rId, rStr, pIconName, pImageSurface, bCheck);
}
virtual ~SalInstanceMenu() override
@@ -1196,6 +1202,12 @@ public:
return false;
}
+ virtual void insert_item(int pos, const OUString& rId, const OUString& rStr,
+ const OUString* pIconName, VirtualDevice* pImageSurface, bool bCheck) override
+ {
+ insert_to_menu(m_xMenuButton->GetPopupMenu(), pos, rId, rStr, pIconName, pImageSurface, bCheck);
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
PopupMenu* pMenu = m_xMenuButton->GetPopupMenu();
@@ -1616,6 +1628,7 @@ public:
virtual void set_font(const vcl::Font& rFont) override
{
m_xEntry->SetFont(rFont);
+ m_xEntry->Invalidate();
}
virtual void connect_cursor_position(const Link<Entry&, void>& rLink) override
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index fa976af04dae..bd4fa42195a5 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -1594,6 +1594,43 @@ namespace
}
}
+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;
+ }
+
+ GdkPixbuf* load_icon_by_name(const OUString& rIconName)
+ {
+ OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
+ OUString sUILang = Application::GetSettings().GetUILanguageTag().getBcp47();
+ return load_icon_by_name(rIconName, sIconTheme, sUILang);
+ }
+
+ GdkPixbuf* load_icon_from_surface(VirtualDevice& rDevice)
+ {
+ Size aSize(rDevice.GetOutputSizePixel());
+ cairo_surface_t* surface = get_underlying_cairo_surface(rDevice);
+ double m_fXScale, m_fYScale;
+ cairo_surface_get_device_scale(surface, &m_fXScale, &m_fYScale);
+ return gdk_pixbuf_get_from_surface(surface, 0, 0, aSize.Width() * m_fXScale, aSize.Height() * m_fYScale);
+ }
+}
+
class MenuHelper
{
protected:
@@ -1653,6 +1690,47 @@ public:
g_signal_handlers_unblock_by_func(a.second, reinterpret_cast<void*>(signalActivate), this);
}
+ void insert_item(int pos, const OUString& rId, const OUString& rStr,
+ const OUString* pIconName, VirtualDevice* pImageSufface,
+ bool bCheck)
+ {
+ GtkWidget* pImage = nullptr;
+ if (pIconName)
+ {
+ GdkPixbuf* pixbuf = load_icon_by_name(*pIconName);
+ if (!pixbuf)
+ {
+ pImage = gtk_image_new_from_pixbuf(pixbuf);
+ g_object_unref(pixbuf);
+ }
+ }
+ else if (pImageSufface)
+ pImage = gtk_image_new_from_surface(get_underlying_cairo_surface(*pImageSufface));
+
+ GtkWidget *pItem;
+ if (pImage)
+ {
+ GtkWidget *pBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
+ GtkWidget *pLabel = gtk_label_new(MapToGtkAccelerator(rStr).getStr());
+ pItem = bCheck ? gtk_check_menu_item_new() : gtk_menu_item_new();
+ gtk_container_add(GTK_CONTAINER(pBox), pImage);
+ gtk_container_add(GTK_CONTAINER(pBox), pLabel);
+ gtk_container_add(GTK_CONTAINER(pItem), pBox);
+ gtk_widget_show_all(pItem);
+ }
+ else
+ {
+ pItem = bCheck ? gtk_check_menu_item_new_with_label(MapToGtkAccelerator(rStr).getStr())
+ : gtk_menu_item_new_with_label(MapToGtkAccelerator(rStr).getStr());
+ }
+ gtk_buildable_set_name(GTK_BUILDABLE(pItem), OUStringToOString(rId, RTL_TEXTENCODING_UTF8).getStr());
+ gtk_menu_shell_append(GTK_MENU_SHELL(m_pMenu), pItem);
+ gtk_widget_show(pItem);
+ add_to_map(GTK_MENU_ITEM(pItem));
+ if (pos != -1)
+ gtk_menu_reorder_child(m_pMenu, pItem, pos);
+ }
+
void set_item_sensitive(const OString& rIdent, bool bSensitive)
{
gtk_widget_set_sensitive(GTK_WIDGET(m_aMap[rIdent]), bSensitive);
@@ -1698,43 +1776,6 @@ 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;
- }
-
- GdkPixbuf* load_icon_by_name(const OUString& rIconName)
- {
- OUString sIconTheme = Application::GetSettings().GetStyleSettings().DetermineIconTheme();
- OUString sUILang = Application::GetSettings().GetUILanguageTag().getBcp47();
- return load_icon_by_name(rIconName, sIconTheme, sUILang);
- }
-
- GdkPixbuf* load_icon_from_surface(VirtualDevice& rDevice)
- {
- Size aSize(rDevice.GetOutputSizePixel());
- cairo_surface_t* surface = get_underlying_cairo_surface(rDevice);
- double m_fXScale, m_fYScale;
- cairo_surface_get_device_scale(surface, &m_fXScale, &m_fYScale);
- return gdk_pixbuf_get_from_surface(surface, 0, 0, aSize.Width() * m_fXScale, aSize.Height() * m_fYScale);
- }
-}
-
class GtkInstanceMenu : public MenuHelper, public virtual weld::Menu
{
protected:
@@ -1833,7 +1874,8 @@ public:
}
virtual void insert(int pos, const OUString& rId, const OUString& rStr,
- const OUString* pIconName, VirtualDevice* pImageSufface) override
+ const OUString* pIconName, VirtualDevice* pImageSufface,
+ bool bCheck) override
{
GtkWidget* pImage = nullptr;
if (pIconName)
@@ -1853,14 +1895,17 @@ public:
{
GtkWidget *pBox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 6);
GtkWidget *pLabel = gtk_label_new(MapToGtkAccelerator(rStr).getStr());
- pItem = gtk_menu_item_new();
+ pItem = bCheck ? gtk_check_menu_item_new() : gtk_menu_item_new();
gtk_container_add(GTK_CONTAINER(pBox), pImage);
gtk_container_add(GTK_CONTAINER(pBox), pLabel);
gtk_container_add(GTK_CONTAINER(pItem), pBox);
gtk_widget_show_all(pItem);
}
else
- pItem = gtk_menu_item_new_with_label(MapToGtkAccelerator(rStr).getStr());
+ {
+ pItem = bCheck ? gtk_check_menu_item_new_with_label(MapToGtkAccelerator(rStr).getStr())
+ : gtk_menu_item_new_with_label(MapToGtkAccelerator(rStr).getStr());
+ }
gtk_buildable_set_name(GTK_BUILDABLE(pItem), OUStringToOString(rId, RTL_TEXTENCODING_UTF8).getStr());
gtk_menu_shell_append(GTK_MENU_SHELL(m_pMenu), pItem);
gtk_widget_show(pItem);
@@ -3256,6 +3301,12 @@ public:
gtk_image_set_from_surface(m_pImage, nullptr);
}
+ virtual void insert_item(int pos, const OUString& rId, const OUString& rStr,
+ const OUString* pIconName, VirtualDevice* pImageSufface, bool bCheck) override
+ {
+ MenuHelper::insert_item(pos, rId, rStr, pIconName, pImageSufface, bCheck);
+ }
+
virtual void set_item_active(const OString& rIdent, bool bActive) override
{
MenuHelper::set_item_active(rIdent, bActive);