tdf#126254 Help - About is black with Linux gen and gtk2
Change-Id: If18693e1cb8a92a7a152dd9decc892fc5f2b7ab5
Reviewed-on: https://gerrit.libreoffice.org/77601
Reviewed-by: Adolfo Jayme Barrientos <fitojb@ubuntu.com>
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Tested-by: Noel Grandin <noel.grandin@collabora.co.uk>
diff --git a/cui/source/dialogs/about.cxx b/cui/source/dialogs/about.cxx
index 776d89f..b222fde 100644
--- a/cui/source/dialogs/about.cxx
+++ b/cui/source/dialogs/about.cxx
@@ -187,10 +187,8 @@ void AboutDialog::SetLogo()
m_xDialog->set_logo(nullptr);
else
{
ScopedVclPtr<VirtualDevice> xDevice(m_xDialog->create_virtual_device());
xDevice->SetOutputSize(aLogoBitmap.GetSizePixel());
xDevice->DrawBitmapEx(Point(), aLogoBitmap);
m_xDialog->set_logo(xDevice.get());
Graphic aGraphic(aLogoBitmap);
m_xDialog->set_logo(aGraphic.GetXGraphic());
}
}
@@ -202,10 +200,8 @@ IMPL_LINK(AboutDialog, SizeAllocHdl, const Size&, rSize, void)
if (!(Application::GetSettings().GetStyleSettings().GetHighContrastMode()))
{
SfxApplication::loadBrandSvg("shell/about", aBackgroundBitmap, rSize.Width());
ScopedVclPtr<VirtualDevice> xDevice(m_xDialog->create_virtual_device());
xDevice->SetOutputSize(aBackgroundBitmap.GetSizePixel());
xDevice->DrawBitmapEx(Point(), aBackgroundBitmap);
m_xDialog->set_background(xDevice.get());
Graphic aGraphic(aBackgroundBitmap);
m_xDialog->set_background(aGraphic.GetXGraphic());
}
}
diff --git a/cui/uiconfig/ui/aboutdialog.ui b/cui/uiconfig/ui/aboutdialog.ui
index 07f2be7..b2ad949 100644
--- a/cui/uiconfig/ui/aboutdialog.ui
+++ b/cui/uiconfig/ui/aboutdialog.ui
@@ -9,6 +9,7 @@
<property name="default_height">0</property>
<property name="type_hint">dialog</property>
<property name="title" translatable="yes" context="aboutdialog|AboutDialog">About %PRODUCTNAME</property>
<property name="resizable">False</property>
<property name="program_name">%PRODUCTNAME</property>
<property name="comments" translatable="yes" context="aboutdialog|description">%PRODUCTNAME is a modern, easy-to-use, open source productivity suite for word processing, spreadsheets, presentations and more.</property>
<property name="website">https://www.libreoffice.org/</property>
diff --git a/include/vcl/weld.hxx b/include/vcl/weld.hxx
index 35e645a..8c489973 100644
--- a/include/vcl/weld.hxx
+++ b/include/vcl/weld.hxx
@@ -450,8 +450,8 @@ public:
virtual void set_website(const OUString& rURL) = 0;
virtual void set_website_label(const OUString& rLabel) = 0;
virtual OUString get_website_label() const = 0;
virtual void set_logo(VirtualDevice* pDevice) = 0;
virtual void set_background(VirtualDevice* pDevice) = 0;
virtual void set_logo(const css::uno::Reference<css::graphic::XGraphic>& rImage) = 0;
virtual void set_background(const css::uno::Reference<css::graphic::XGraphic>& rImage) = 0;
};
struct VCL_DLLPUBLIC ComboBoxEntry
diff --git a/vcl/source/app/salvtables.cxx b/vcl/source/app/salvtables.cxx
index ceff007..da2c50b 100644
--- a/vcl/source/app/salvtables.cxx
+++ b/vcl/source/app/salvtables.cxx
@@ -1441,13 +1441,13 @@ public:
{
return m_xAboutDialog->GetWebsiteLabel();
}
virtual void set_logo(VirtualDevice* pDevice) override
virtual void set_logo(const css::uno::Reference<css::graphic::XGraphic>& rImage) override
{
m_xAboutDialog->SetLogo(createImage(*pDevice));
m_xAboutDialog->SetLogo(Image(rImage));
}
virtual void set_background(VirtualDevice* pDevice) override
virtual void set_background(const css::uno::Reference<css::graphic::XGraphic>& rImage) override
{
m_xAboutDialog->SetBackground(createImage(*pDevice));
m_xAboutDialog->SetBackground(Image(rImage));
}
};
diff --git a/vcl/source/window/aboutdialog.cxx b/vcl/source/window/aboutdialog.cxx
index 3bf2dc0..a7ae1bd 100644
--- a/vcl/source/window/aboutdialog.cxx
+++ b/vcl/source/window/aboutdialog.cxx
@@ -129,10 +129,8 @@ void AboutDialog::SetBackground(const Image& rBackgroundBitmap)
Invalidate();
}
void AboutDialog::Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle& rRect)
void AboutDialog::Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle& /*rRect*/)
{
rRenderContext.SetClipRegion(vcl::Region(rRect));
Size aSize(GetOutputSizePixel());
Point aPos(aSize.Width() - m_aBackgroundBitmap.GetSizePixel().Width(),
aSize.Height() - m_aBackgroundBitmap.GetSizePixel().Height());
diff --git a/vcl/unx/gtk3/gtk3gtkinst.cxx b/vcl/unx/gtk3/gtk3gtkinst.cxx
index 507ec77..928e758 100644
--- a/vcl/unx/gtk3/gtk3gtkinst.cxx
+++ b/vcl/unx/gtk3/gtk3gtkinst.cxx
@@ -3472,9 +3472,9 @@ public:
return OUString(pText, pText ? strlen(pText) : 0, RTL_TEXTENCODING_UTF8);
}
virtual void set_logo(VirtualDevice* pDevice) override
virtual void set_logo(const css::uno::Reference<css::graphic::XGraphic>& rImage) override
{
GdkPixbuf* pixbuf = pDevice ? getPixbuf(*pDevice) : nullptr;
GdkPixbuf* pixbuf = rImage.is() ? getPixbuf(rImage) : nullptr;
if (!pixbuf)
gtk_about_dialog_set_logo(m_pAboutDialog, nullptr);
else
@@ -3484,7 +3484,7 @@ public:
}
}
virtual void set_background(VirtualDevice* pDevice) override
virtual void set_background(const css::uno::Reference<css::graphic::XGraphic>& rImage) override
{
GtkStyleContext *pStyleContext = gtk_widget_get_style_context(GTK_WIDGET(m_pAboutDialog));
if (m_pCssProvider)
@@ -3495,37 +3495,17 @@ public:
mxBackgroundImage.reset();
if (pDevice)
if (rImage.is())
{
mxBackgroundImage.reset(new utl::TempFile());
mxBackgroundImage->EnableKillingFile(true);
OString sOutput = mxBackgroundImage->GetFileName().toUtf8();
Image aImage(rImage);
cairo_surface_t* orig_surface = get_underlying_cairo_surface(*pDevice);
double m_fXScale, m_fYScale;
dl_cairo_surface_get_device_scale(orig_surface, &m_fXScale, &m_fYScale);
cairo_surface_t* surface;
if (m_fXScale != 1.0 || m_fYScale != -1)
{
Size aSize(pDevice->GetOutputSizePixel());
surface = cairo_surface_create_similar_image(orig_surface,
CAIRO_FORMAT_ARGB32,
aSize.Width(),
aSize.Height());
cairo_t* cr = cairo_create(surface);
cairo_set_source_surface(cr, orig_surface, 0, 0);
cairo_paint(cr);
cairo_destroy(cr);
}
else
surface = orig_surface;
cairo_surface_write_to_png(surface, sOutput.getStr());
if (surface != orig_surface)
cairo_surface_destroy(surface);
vcl::PNGWriter aPNGWriter(aImage.GetBitmapEx());
SvStream* pStream = mxBackgroundImage->GetStream(StreamMode::WRITE);
aPNGWriter.Write(*pStream);
mxBackgroundImage->CloseStream();
m_pCssProvider = gtk_css_provider_new();
OUString aBuffer = "* { background-image: url(\"" + mxBackgroundImage->GetURL() + "\"); }";