diff options
author | Armin Le Grand (allotropia) <armin.le.grand.extern@allotropia.de> | 2022-09-13 13:42:54 +0200 |
---|---|---|
committer | Armin Le Grand <Armin.Le.Grand@me.com> | 2022-09-14 09:54:18 +0200 |
commit | e735ad1c57cddaf17d6ffc0cf15b5e14fa63c4ad (patch) | |
tree | 194e32decaaf2aa96a12169ea3dacd749b8dffd9 /include/drawinglayer/primitive2d | |
parent | 80d3fb7ef721b5aa2de1095249557a19e3697b3b (diff) |
Rework of ShadowPrimitive2D
This is pretty much the same for ShadowPrimitive2D as the
change for GlowPrimitive2D and SoftEdgePrimitive2D, so for
more comments please refer to those commits:
c2d1458723c66c2fd717a112f89f773226adc841
707b0c328a282d993fa33b618083d20b6c521de6
There are some needed differences due to ShadowPrimitive2D
having existed longer and is used for non-blurred shadow
for a long time and is used as unchanged as possible.
Only for active glow of shadow is a buffering and local
decompose used.
Change-Id: I55e6516f59390079356ac16f24743b474e53fb05
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/139858
Tested-by: Jenkins
Reviewed-by: Armin Le Grand <Armin.Le.Grand@me.com>
Diffstat (limited to 'include/drawinglayer/primitive2d')
3 files changed, 56 insertions, 85 deletions
diff --git a/include/drawinglayer/primitive2d/GlowSoftEgdeShadowTools.hxx b/include/drawinglayer/primitive2d/GlowSoftEgdeShadowTools.hxx deleted file mode 100644 index 61079728d841..000000000000 --- a/include/drawinglayer/primitive2d/GlowSoftEgdeShadowTools.hxx +++ /dev/null @@ -1,42 +0,0 @@ -/* -*- 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/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#pragma once - -#include <vcl/alpha.hxx> -#include <drawinglayer/geometry/viewinformation2d.hxx> - -namespace drawinglayer::primitive2d -{ -/* Returns 8-bit alpha mask created from passed mask. - - Negative fErodeDilateRadius values mean erode, positive - dilate. - nTransparency defines minimal transparency level. -*/ -AlphaMask ProcessAndBlurAlphaMask(const Bitmap& rMask, double fErodeDilateRadius, - double fBlurRadius, sal_uInt8 nTransparency, - bool bConvertTo1Bit = true); - -drawinglayer::geometry::ViewInformation2D -expandB2DRangeAtViewInformation2D(const drawinglayer::geometry::ViewInformation2D& rViewInfo, - double nAmount); - -} // end of namespace drawinglayer::primitive2d - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/include/drawinglayer/primitive2d/glowprimitive2d.hxx b/include/drawinglayer/primitive2d/glowprimitive2d.hxx index 6a60c85ad6ae..985137e23215 100644 --- a/include/drawinglayer/primitive2d/glowprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/glowprimitive2d.hxx @@ -21,7 +21,6 @@ #include <drawinglayer/drawinglayerdllapi.h> -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> #include <drawinglayer/primitive2d/BufferedDecompositionGroupPrimitive2D.hxx> #include <tools/color.hxx> diff --git a/include/drawinglayer/primitive2d/shadowprimitive2d.hxx b/include/drawinglayer/primitive2d/shadowprimitive2d.hxx index 45a97a96d476..79f2f30f700a 100644 --- a/include/drawinglayer/primitive2d/shadowprimitive2d.hxx +++ b/include/drawinglayer/primitive2d/shadowprimitive2d.hxx @@ -21,14 +21,12 @@ #include <drawinglayer/drawinglayerdllapi.h> -#include <drawinglayer/primitive2d/groupprimitive2d.hxx> -#include <basegfx/matrix/b2dhommatrix.hxx> +#include <drawinglayer/primitive2d/BufferedDecompositionGroupPrimitive2D.hxx> #include <basegfx/color/bcolor.hxx> - namespace drawinglayer::primitive2d { - /** ShadowPrimitive2D class +/** ShadowPrimitive2D class This primitive defines a generic shadow geometry construction for 2D objects. It decomposes to a TransformPrimitive2D embedded @@ -42,44 +40,60 @@ namespace drawinglayer::primitive2d are needed for the shadow itself; all the local decompositions of the original geometry can be reused from the renderer for shadow visualisation. */ - class DRAWINGLAYER_DLLPUBLIC ShadowPrimitive2D final : public GroupPrimitive2D - { - private: - /// the shadow transformation, normally just an offset - basegfx::B2DHomMatrix maShadowTransform; - - /// the shadow color to which all geometry is to be forced - basegfx::BColor maShadowColor; - - /// the blur radius of the shadow - double mfShadowBlur; - - - public: - /// constructor - ShadowPrimitive2D( - basegfx::B2DHomMatrix aShadowTransform, - const basegfx::BColor& rShadowColor, - double fShadowBlur, - Primitive2DContainer&& aChildren); - - /// data read access - const basegfx::B2DHomMatrix& getShadowTransform() const { return maShadowTransform; } - const basegfx::BColor& getShadowColor() const { return maShadowColor; } - double getShadowBlur() const { return mfShadowBlur; } - /// compare operator - virtual bool operator==(const BasePrimitive2D& rPrimitive) const override; - - /// get range - virtual basegfx::B2DRange getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; - - /// create decomposition - virtual void get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, const geometry::ViewInformation2D& rViewInformation) const override; - - /// provide unique ID - virtual sal_uInt32 getPrimitive2DID() const override; - }; +class DRAWINGLAYER_DLLPUBLIC ShadowPrimitive2D final : public BufferedDecompositionGroupPrimitive2D +{ +private: + /// the shadow transformation, normally just an offset + basegfx::B2DHomMatrix maShadowTransform; + + /// the shadow color to which all geometry is to be forced + basegfx::BColor maShadowColor; + + /// the blur radius of the shadow + double mfShadowBlur; + + /// last used DiscreteBlurRadius and ClippedRange + double mfLastDiscreteBlurRadius; + basegfx::B2DRange maLastClippedRange; + + /// helpers + void getFullyEmbeddedShadowPrimitives(Primitive2DContainer& rContainer) const; + bool prepareValuesAndcheckValidity(basegfx::B2DRange& rRange, basegfx::B2DRange& rClippedRange, + basegfx::B2DVector& rDiscreteSize, + double& rfDiscreteBlurRadius, + const geometry::ViewInformation2D& rViewInformation) const; + +protected: + /** method which is to be used to implement the local decomposition of a 2D primitive. */ + virtual void + create2DDecomposition(Primitive2DContainer& rContainer, + const geometry::ViewInformation2D& rViewInformation) const override; + +public: + /// constructor + ShadowPrimitive2D(basegfx::B2DHomMatrix aShadowTransform, const basegfx::BColor& rShadowColor, + double fShadowBlur, Primitive2DContainer&& aChildren); + + /// data read access + const basegfx::B2DHomMatrix& getShadowTransform() const { return maShadowTransform; } + const basegfx::BColor& getShadowColor() const { return maShadowColor; } + double getShadowBlur() const { return mfShadowBlur; } + + /// compare operator + virtual bool operator==(const BasePrimitive2D& rPrimitive) const override; + + /// get range + virtual basegfx::B2DRange + getB2DRange(const geometry::ViewInformation2D& rViewInformation) const override; + + /// create decomposition + virtual void + get2DDecomposition(Primitive2DDecompositionVisitor& rVisitor, + const geometry::ViewInformation2D& rViewInformation) const override; + + /// provide unique ID + virtual sal_uInt32 getPrimitive2DID() const override; +}; } // end of namespace drawinglayer::primitive2d - /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |