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 <caol...@redhat.com> AuthorDate: Mon Jun 15 09:15:57 2020 +0100 Commit: Caolán McNamara <caol...@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 <caol...@redhat.com> Reviewed-by: Caolán McNamara <caol...@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 <ganzour...@gmail.com> AuthorDate: Mon Jun 8 21:36:34 2020 +0200 Commit: Tomaž Vajngerl <qui...@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.kagan...@collabora.com> Reviewed-by: Tomaž Vajngerl <qui...@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 _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits