[Libreoffice-commits] core.git: 2 commits - drawinglayer/source include/vcl
Caolán McNamara (via logerrit)
logerrit at kemper.freedesktop.org
Mon Jun 15 09:56:29 UTC 2020
drawinglayer/source/processor2d/vclpixelprocessor2d.cxx | 53 ++++++++++++++++
drawinglayer/source/processor2d/vclpixelprocessor2d.hxx | 2
include/vcl/dockwin.hxx | 2
3 files changed, 56 insertions(+), 1 deletion(-)
New commits:
commit 4ce1ff56bb63f0e9a10a129f31e604c20007d5d1
Author: Caolán McNamara <caolanm at redhat.com>
AuthorDate: Mon Jun 15 09:15:57 2020 +0100
Commit: Caolán McNamara <caolanm at redhat.com>
CommitDate: Mon Jun 15 11:56:03 2020 +0200
fix DockingManager::EndPopupMode related build failure
undefined reference to `DockingManager::StartPopupMode(vcl::Window const*, tools::Rectangle const&, FloatWinPopupFlags)´
sc/source/ui/cctrl/checklistmenu.o: In function `ScCheckListMenuControl::handleMenuTimeout(ScCheckListMenuControl::SubMenuItemData const*)´:
sc/source/ui/cctrl/checklistmenu.cxx:239: undefined reference to `DockingManager::EndPopupMode(vcl::Window const*)´
sc/source/ui/cctrl/checklistmenu.cxx:225: undefined reference to `DockingManager::EndPopupMode(vcl::Window const*)´
Change-Id: Ic665ab4e38b3886a13874d5e4c429e2a99836eef
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96319
Tested-by: Caolán McNamara <caolanm at redhat.com>
Reviewed-by: Caolán McNamara <caolanm at redhat.com>
diff --git a/include/vcl/dockwin.hxx b/include/vcl/dockwin.hxx
index 689a2f4c60c3..820a8efe057a 100644
--- a/include/vcl/dockwin.hxx
+++ b/include/vcl/dockwin.hxx
@@ -168,7 +168,7 @@ public:
Size GetSizePixel() const;
};
-class UNLESS_MERGELIBS(VCL_DLLPUBLIC) DockingManager
+class VCL_DLLPUBLIC DockingManager
{
std::vector<std::unique_ptr<ImplDockingWindowWrapper, o3tl::default_delete<ImplDockingWindowWrapper>>> mvDockingWindows;
commit b435c4fe82e77a82fde6464d6722281e5fc4f394
Author: A_GAN <ganzouri97 at gmail.com>
AuthorDate: Mon Jun 8 21:36:34 2020 +0200
Commit: Tomaž Vajngerl <quikee at gmail.com>
CommitDate: Mon Jun 15 11:55:53 2020 +0200
Add process function to create the blur shadow
Create processShadowPrimitive2D function which uses the blur radius
from the shadow primitive to generate mask for the shadow bitmap.
Change-Id: Iba86bdbe1728153d866dd559a1b12eb5570ced51
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95859
Tested-by: Jenkins
Reviewed-by: Mike Kaganski <mike.kaganski at collabora.com>
Reviewed-by: Tomaž Vajngerl <quikee at gmail.com>
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
index 3a57695f81e0..864f5ca107b6 100644
--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
+++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.cxx
@@ -61,6 +61,7 @@
#include <drawinglayer/primitive2d/fillhatchprimitive2d.hxx>
#include <drawinglayer/primitive2d/epsprimitive2d.hxx>
#include <drawinglayer/primitive2d/softedgeprimitive2d.hxx>
+#include <drawinglayer/primitive2d/shadowprimitive2d.hxx>
#include <com/sun/star/awt/XWindow2.hpp>
#include <com/sun/star/awt/XControl.hpp>
@@ -392,6 +393,12 @@ void VclPixelProcessor2D::processBasePrimitive2D(const primitive2d::BasePrimitiv
static_cast<const drawinglayer::primitive2d::SoftEdgePrimitive2D&>(rCandidate));
break;
}
+ case PRIMITIVE2D_ID_SHADOWPRIMITIVE2D:
+ {
+ processShadowPrimitive2D(
+ static_cast<const drawinglayer::primitive2d::ShadowPrimitive2D&>(rCandidate));
+ break;
+ }
default:
{
SAL_INFO("drawinglayer", "default case for " << drawinglayer::primitive2d::idToString(
@@ -1067,6 +1074,52 @@ void VclPixelProcessor2D::processSoftEdgePrimitive2D(
SAL_WARN("drawinglayer", "Temporary buffered virtual device is not visible");
}
+void VclPixelProcessor2D::processShadowPrimitive2D(const primitive2d::ShadowPrimitive2D& rCandidate)
+{
+ if (rCandidate.getShadowBlur() == 0)
+ {
+ process(rCandidate);
+ return;
+ }
+
+ basegfx::B2DRange aRange(rCandidate.getB2DRange(getViewInformation2D()));
+ aRange.transform(maCurrentTransformation);
+ basegfx::B2DVector aBlurRadiusVector(rCandidate.getShadowBlur(), 0);
+ aBlurRadiusVector *= maCurrentTransformation;
+ const double fBlurRadius = aBlurRadiusVector.getLength();
+
+ impBufferDevice aBufferDevice(*mpOutputDevice, aRange, true);
+ if (aBufferDevice.isVisible())
+ {
+ OutputDevice* pLastOutputDevice = mpOutputDevice;
+ mpOutputDevice = &aBufferDevice.getContent();
+ mpOutputDevice->Erase();
+
+ process(rCandidate);
+
+ const tools::Rectangle aRect(static_cast<long>(std::floor(aRange.getMinX())),
+ static_cast<long>(std::floor(aRange.getMinY())),
+ static_cast<long>(std::ceil(aRange.getMaxX())),
+ static_cast<long>(std::ceil(aRange.getMaxY())));
+
+ BitmapEx bitmapEx = mpOutputDevice->GetBitmapEx(aRect.TopLeft(), aRect.GetSize());
+
+ AlphaMask mask = ProcessAndBlurAlphaMask(bitmapEx.GetAlpha(), 0, fBlurRadius, 0);
+
+ const basegfx::BColor aShadowColor(
+ maBColorModifierStack.getModifiedColor(rCandidate.getShadowColor()));
+
+ Bitmap bitmap = bitmapEx.GetBitmap();
+ bitmap.Erase(Color(aShadowColor));
+ BitmapEx result(bitmap, mask);
+
+ mpOutputDevice = pLastOutputDevice;
+ mpOutputDevice->DrawBitmapEx(aRect.TopLeft(), result);
+ }
+ else
+ SAL_WARN("drawinglayer", "Temporary buffered virtual device is not visible");
+}
+
} // end of namespace
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/drawinglayer/source/processor2d/vclpixelprocessor2d.hxx b/drawinglayer/source/processor2d/vclpixelprocessor2d.hxx
index e78d1f08225a..5a23499f9a9b 100644
--- a/drawinglayer/source/processor2d/vclpixelprocessor2d.hxx
+++ b/drawinglayer/source/processor2d/vclpixelprocessor2d.hxx
@@ -40,6 +40,7 @@ class FillHatchPrimitive2D;
class BackgroundColorPrimitive2D;
class BorderLinePrimitive2D;
class GlowPrimitive2D;
+class ShadowPrimitive2D;
class SoftEdgePrimitive2D;
}
@@ -97,6 +98,7 @@ class VclPixelProcessor2D final : public VclProcessor2D
void processMetaFilePrimitive2D(const primitive2d::BasePrimitive2D& rCandidate);
void processGlowPrimitive2D(const primitive2d::GlowPrimitive2D& rCandidate);
void processSoftEdgePrimitive2D(const primitive2d::SoftEdgePrimitive2D& rCandidate);
+ void processShadowPrimitive2D(const primitive2d::ShadowPrimitive2D& rCandidate);
public:
/// constructor/destructor
More information about the Libreoffice-commits
mailing list