Files
libreoffice/vcl/source/window/aboutdialog.cxx
Miklos Vajna 3779abce2f tdf#127230 vcl: about dialog double-buffer on macOS is not needed
This was a problem since commit 7eb37a422f
(tdf#118856 vcl: avoid flicker in the about dialog, 2019-08-12).

Given that probably sooner or later this application-level
double-buffering will not be needed anyway, just do the minimal fix and
avoid it for the about dialog on macOS.

(Versus low-level double-buffering as macOS, gtk3 or OpenGL does.)

Change-Id: I5dc60e5c064d1e90057f9aa9a22db9f67680eb26
Reviewed-on: https://gerrit.libreoffice.org/78313
Reviewed-by: Miklos Vajna <vmiklos@collabora.com>
Tested-by: Jenkins
2019-08-30 19:06:07 +02:00

135 lines
4.0 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
#include <vcl/layout.hxx>
#include <vcl/svapp.hxx>
#include <vcl/settings.hxx>
#include <aboutdialog.hxx>
using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::beans;
using namespace ::com::sun::star;
using namespace vcl;
AboutDialog::AboutDialog(vcl::Window* pParent, WinBits nStyle, Dialog::InitFlag eFlag)
: Dialog(pParent, nStyle, eFlag)
, m_xBuilder(new VclBuilder(this, getUIRootDir(), "vcl/ui/aboutbox.ui"))
{
m_xBuilder->get(m_xContents, "about");
m_xBuilder->get(m_xLogoReplacement, "logoreplacement");
m_xBuilder->get(m_xLogoImage, "logo");
m_xBuilder->get(m_xVersion, "version");
m_xBuilder->get(m_xDescriptionText, "description");
m_xBuilder->get(m_xCopyrightText, "copyright");
m_xBuilder->get(m_xBuildIdLink, "buildIdLink");
#ifndef MACOSX
m_xVersion->RequestDoubleBuffering(true);
#endif
}
void AboutDialog::set_content_area(VclBox* pBox)
{
Dialog::set_content_area(pBox);
// move it now that the content area exists
m_xContents->SetParent(pBox);
StyleControls();
}
AboutDialog::~AboutDialog() { disposeOnce(); }
void AboutDialog::dispose()
{
m_xVersion.clear();
m_xDescriptionText.clear();
m_xCopyrightText.clear();
m_xLogoImage.clear();
m_xLogoReplacement.clear();
m_xBuildIdLink.clear();
m_xContents.clear();
m_xBuilder.reset();
Dialog::dispose();
}
void AboutDialog::StyleControls()
{
// Make all the controls have a transparent background
m_xLogoImage->SetBackground();
m_xLogoReplacement->SetPaintTransparent(true);
m_xVersion->SetPaintTransparent(true);
m_xDescriptionText->SetPaintTransparent(true);
m_xCopyrightText->SetPaintTransparent(true);
const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings();
const vcl::Font& aLabelFont = rStyleSettings.GetLabelFont();
vcl::Font aLargeFont = aLabelFont;
aLargeFont.SetFontSize(Size(0, aLabelFont.GetFontSize().Height() * 3));
// Logo Replacement Text
m_xLogoReplacement->SetControlFont(aLargeFont);
// Description Text
aLargeFont.SetFontSize(Size(0, aLabelFont.GetFontSize().Height() * 1.3));
m_xDescriptionText->SetControlFont(aLargeFont);
}
void AboutDialog::SetLogo(const Image& rLogoBitmap)
{
if (!rLogoBitmap)
{
m_xLogoImage->Hide();
m_xLogoReplacement->Show();
}
else
{
m_xLogoReplacement->Hide();
m_xLogoImage->SetImage(rLogoBitmap);
m_xLogoImage->Show();
}
}
void AboutDialog::SetBackground(const Image& rBackgroundBitmap)
{
m_aBackgroundBitmap = rBackgroundBitmap.GetBitmapEx();
Invalidate();
}
void AboutDialog::Paint(vcl::RenderContext& rRenderContext, const ::tools::Rectangle& /*rRect*/)
{
Size aSize(GetOutputSizePixel());
Point aPos(aSize.Width() - m_aBackgroundBitmap.GetSizePixel().Width(),
aSize.Height() - m_aBackgroundBitmap.GetSizePixel().Height());
rRenderContext.DrawBitmapEx(aPos, m_aBackgroundBitmap);
}
bool AboutDialog::set_property(const OString& rKey, const OUString& rValue)
{
if (rKey == "version")
m_xVersion->SetText(rValue);
else if (rKey == "copyright")
m_xCopyrightText->SetText(rValue);
else if (rKey == "comments")
m_xDescriptionText->SetText(rValue);
else if (rKey == "website")
m_xBuildIdLink->SetURL(rValue);
else if (rKey == "website_label")
m_xBuildIdLink->SetText(rValue);
else if (rKey == "program_name")
m_xLogoReplacement->SetText(rValue);
else
return Dialog::set_property(rKey, rValue);
return true;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */