Kaydet (Commit) 78a4e9cb authored tarafından Tomaž Vajngerl's avatar Tomaž Vajngerl

vcl: recolor images (icons) to be more visible in a dark theme

This adds recoloring of images/icons (suited for breeze and sifr)
so they are more visible when a dark theme is used (for example gtk3
can switch to a dark theme). LO must be started with environment
variable VCL_ICONS_FOR_DARK_THEME set to 1.

open issues - currently all images/icons are recolored but not all
images should get recolored.

Change-Id: Ibc42e30af79bb4c4f04c67b760019311b97b2cc6
üst 09374b5a
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/.
*/
#ifndef INCLUDED_VCL_BITMAP_PROCESSOR_HXX
#define INCLUDED_VCL_BITMAP_PROCESSOR_HXX
#include <vcl/bitmapex.hxx>
class BitmapProcessor
{
public:
static BitmapEx createLightImage(const BitmapEx& rBitmapEx);
};
#endif // INCLUDED_VCL_BITMAP_PROCESSOR_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -318,6 +318,7 @@ $(eval $(call gb_Library_add_exception_objects,vcl,\
vcl/source/bitmap/bitmapscalesuper \
vcl/source/bitmap/BitmapSymmetryCheck \
vcl/source/bitmap/BitmapFilterStackBlur \
vcl/source/bitmap/BitmapProcessor \
vcl/source/bitmap/checksum \
vcl/source/helper/canvasbitmap \
vcl/source/helper/canvastools \
......
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* 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/BitmapProcessor.hxx>
#include <vcl/bmpacc.hxx>
#include <basegfx/color/bcolortools.hxx>
BitmapEx BitmapProcessor::createLightImage(const BitmapEx& rBitmapEx)
{
const Size aSize(rBitmapEx.GetSizePixel());
Bitmap aBitmap(rBitmapEx.GetBitmap());
Bitmap aDarkBitmap(aSize, 24);
BitmapReadAccess* pRead(aBitmap.AcquireReadAccess());
BitmapWriteAccess* pWrite(aDarkBitmap.AcquireWriteAccess());
if (pRead && pWrite)
{
for (int nY = 0; nY < aSize.Height(); ++nY)
{
for (int nX = 0; nX < aSize.Width(); ++nX)
{
BitmapColor aColor = pRead->HasPalette() ?
pRead->GetPaletteColor(pRead->GetPixelIndex(nY, nX)) :
pRead->GetPixel(nY, nX);
basegfx::BColor aBColor(Color(aColor.Invert()).getBColor());
aBColor = basegfx::tools::rgb2hsl(aBColor);
double fHue = aBColor.getRed();
fHue += 180.0;
while (fHue > 360.0)
fHue -= 360.0;
aBColor.setRed(fHue);
aBColor = basegfx::tools::hsl2rgb(aBColor);
aColor.SetRed(((aBColor.getRed() * 255.0) + 0.5));
aColor.SetGreen(((aBColor.getGreen() * 255.0) + 0.5));
aColor.SetBlue(((aBColor.getBlue() * 255.0) + 0.5));
pWrite->SetPixel(nY, nX, aColor);
}
}
}
Bitmap::ReleaseAccess(pWrite);
Bitmap::ReleaseAccess(pRead);
return BitmapEx(aDarkBitmap, rBitmapEx.GetAlpha());
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
......@@ -45,6 +45,8 @@
#include "impimagetree.hxx"
#include <vcldemo-debug.hxx>
#include <vcl/BitmapProcessor.hxx>
using namespace css;
namespace {
......@@ -123,7 +125,12 @@ bool ImplImageTree::loadImage(OUString const & name, OUString const & style, Bit
{
try {
if (doLoadImage(name, aStyle, bitmap, localized))
{
static bool bIconsForDarkTheme = !!getenv("VCL_ICONS_FOR_DARK_THEME");
if (bIconsForDarkTheme)
bitmap = BitmapProcessor::createLightImage(bitmap);
return true;
}
}
catch (css::uno::RuntimeException &) {}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment