[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