Rebased ref, commits from common ancestor: commit d040d9eaefd42a1b2fe3a9b3e2210f052d568d85 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Oct 21 16:34:34 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Mon Oct 21 17:01:12 2019 +0200
update Skia PCH after the update to m79 Change-Id: I1e18686ac6f501a04d6f56c78c998621d430d721 diff --git a/external/skia/fix-pch.patch b/external/skia/fix-pch.patch index 9078a8a12e51..1bd09f1bbc30 100644 --- a/external/skia/fix-pch.patch +++ b/external/skia/fix-pch.patch @@ -22,6 +22,16 @@ // windows wants to define this as CreateSemaphoreA or CreateSemaphoreW --- skia/third_party/skcms/skcms.cc.sav 2019-09-26 13:03:33.997652697 +0200 +++ skia/third_party/skcms/skcms.cc 2019-09-26 13:13:19.185647303 +0200 +@@ -124,7 +124,8 @@ static float minus_1_ulp(float x) { + // Most transfer functions we work with are sRGBish. + // For exotic HDR transfer functions, we encode them using a tf.g that makes no sense, + // and repurpose the other fields to hold the parameters of the HDR functions. +-enum TFKind { Bad, sRGBish, PQish, HLGish, HLGinvish }; ++enum TFKind_skcms { Bad, sRGBish, PQish, HLGish, HLGinvish }; ++#define TFKind TFKind_skcms + struct TF_PQish { float A,B,C,D,E,F; }; + struct TF_HLGish { float R,G,a,b,c; }; + @@ -1817,7 +1817,9 @@ typedef enum { Op_store_hhhh, Op_store_fff, diff --git a/external/skia/inc/pch/precompiled_skia.hxx b/external/skia/inc/pch/precompiled_skia.hxx index 3d87068fcaa9..34adcad39af2 100644 --- a/external/skia/inc/pch/precompiled_skia.hxx +++ b/external/skia/inc/pch/precompiled_skia.hxx @@ -13,7 +13,7 @@ manual changes will be rewritten by the next run of update_pch.sh (which presumably also fixes all possible problems, so it's usually better to use it). - Generated on 2019-10-17 15:51:12 using: + Generated on 2019-10-21 16:31:00 using: ./bin/update_pch external/skia skia --cutoff=1 --exclude:system --include:module --include:local If after updating build fails, use the following command to locate conflicting headers: @@ -155,6 +155,7 @@ #include <include/core/SkSurfaceProps.h> #include <include/core/SkSwizzle.h> #include <include/core/SkTextBlob.h> +#include <include/core/SkTileMode.h> #include <include/core/SkTime.h> #include <include/core/SkTraceMemoryDump.h> #include <include/core/SkTypeface.h> @@ -182,6 +183,7 @@ #include <include/effects/SkDropShadowImageFilter.h> #include <include/effects/SkGradientShader.h> #include <include/effects/SkHighContrastFilter.h> +#include <include/effects/SkImageFilters.h> #include <include/effects/SkImageSource.h> #include <include/effects/SkLayerDrawLooper.h> #include <include/effects/SkLightingImageFilter.h> @@ -207,15 +209,12 @@ #include <include/gpu/GrBackendDrawableInfo.h> #include <include/gpu/GrBackendSemaphore.h> #include <include/gpu/GrBackendSurface.h> -#include <include/gpu/GrBlend.h> #include <include/gpu/GrConfig.h> #include <include/gpu/GrContext.h> #include <include/gpu/GrContextOptions.h> #include <include/gpu/GrContextThreadSafeProxy.h> #include <include/gpu/GrDriverBugWorkarounds.h> #include <include/gpu/GrGpuResource.h> -#include <include/gpu/GrRenderTarget.h> -#include <include/gpu/GrSamplerState.h> #include <include/gpu/GrSurface.h> #include <include/gpu/GrTexture.h> #include <include/gpu/GrTypes.h> @@ -300,6 +299,7 @@ #include <src/codec/SkJpegUtility.h> #include <src/codec/SkMaskSwizzler.h> #include <src/codec/SkMasks.h> +#include <src/codec/SkParseEncodedOrigin.h> #include <src/codec/SkPngCodec.h> #include <src/codec/SkPngPriv.h> #include <src/codec/SkRawCodec.h> @@ -325,7 +325,6 @@ #include <src/core/SkBitmapController.h> #include <src/core/SkBitmapDevice.h> #include <src/core/SkBitmapProcState.h> -#include <src/core/SkBitmapProvider.h> #include <src/core/SkBlendModePriv.h> #include <src/core/SkBlitRow.h> #include <src/core/SkBlitter.h> @@ -358,6 +357,7 @@ #include <src/core/SkEdgeClipper.h> #include <src/core/SkEffectPriv.h> #include <src/core/SkEndian.h> +#include <src/core/SkEnumerate.h> #include <src/core/SkExchange.h> #include <src/core/SkFDot6.h> #include <src/core/SkFontDescriptor.h> @@ -367,14 +367,17 @@ #include <src/core/SkGaussFilter.h> #include <src/core/SkGeometry.h> #include <src/core/SkGlyph.h> +#include <src/core/SkGlyphBuffer.h> #include <src/core/SkGlyphRun.h> #include <src/core/SkGlyphRunPainter.h> #include <src/core/SkGpuBlurUtils.h> #include <src/core/SkICCPriv.h> #include <src/core/SkIPoint16.h> #include <src/core/SkImageFilterCache.h> -#include <src/core/SkImageFilterPriv.h> +#include <src/core/SkImageFilterTypes.h> +#include <src/core/SkImageFilter_Base.h> #include <src/core/SkImagePriv.h> +#include <src/core/SkLRUCache.h> #include <src/core/SkLatticeIter.h> #include <src/core/SkLeanWindows.h> #include <src/core/SkLineClipper.h> @@ -403,6 +406,7 @@ #include <src/core/SkOpts.h> #include <src/core/SkPaintDefaults.h> #include <src/core/SkPaintPriv.h> +#include <src/core/SkPathMakers.h> #include <src/core/SkPathMeasurePriv.h> #include <src/core/SkPathPriv.h> #include <src/core/SkPictureCommon.h> @@ -411,6 +415,7 @@ #include <src/core/SkPicturePlayback.h> #include <src/core/SkPicturePriv.h> #include <src/core/SkPictureRecord.h> +#include <src/core/SkPixelRefPriv.h> #include <src/core/SkPixmapPriv.h> #include <src/core/SkPointPriv.h> #include <src/core/SkPtrRecorder.h> @@ -431,7 +436,6 @@ #include <src/core/SkRectPriv.h> #include <src/core/SkRegionPriv.h> #include <src/core/SkRemoteGlyphCache.h> -#include <src/core/SkRemoteGlyphCacheImpl.h> #include <src/core/SkResourceCache.h> #include <src/core/SkSafeMath.h> #include <src/core/SkSafeRange.h> @@ -447,7 +451,7 @@ #include <src/core/SkStreamPriv.h> #include <src/core/SkStrike.h> #include <src/core/SkStrikeCache.h> -#include <src/core/SkStrikeInterface.h> +#include <src/core/SkStrikeForGPU.h> #include <src/core/SkStrikeSpec.h> #include <src/core/SkStringUtils.h> #include <src/core/SkStroke.h> @@ -495,23 +499,25 @@ #include <src/gpu/GrBackendTextureImageGenerator.h> #include <src/gpu/GrBaseContextPriv.h> #include <src/gpu/GrBitmapTextureMaker.h> +#include <src/gpu/GrBlend.h> #include <src/gpu/GrBlurUtils.h> #include <src/gpu/GrBuffer.h> #include <src/gpu/GrBufferAllocPool.h> #include <src/gpu/GrCaps.h> +#include <src/gpu/GrClientMappedBufferManager.h> #include <src/gpu/GrClip.h> #include <src/gpu/GrClipStackClip.h> #include <src/gpu/GrColor.h> -#include <src/gpu/GrColorSpaceInfo.h> +#include <src/gpu/GrColorInfo.h> #include <src/gpu/GrColorSpaceXform.h> #include <src/gpu/GrContextPriv.h> #include <src/gpu/GrContextThreadSafeProxyPriv.h> #include <src/gpu/GrCoordTransform.h> +#include <src/gpu/GrCopyRenderTask.h> #include <src/gpu/GrCpuBuffer.h> #include <src/gpu/GrDataUtils.h> #include <src/gpu/GrDefaultGeoProcFactory.h> #include <src/gpu/GrDeferredProxyUploader.h> -#include <src/gpu/GrDeinstantiateProxyTracker.h> #include <src/gpu/GrDistanceFieldGenFromVector.h> #include <src/gpu/GrDrawOpAtlas.h> #include <src/gpu/GrDrawOpTest.h> @@ -522,16 +528,18 @@ #include <src/gpu/GrGlyph.h> #include <src/gpu/GrGpu.h> #include <src/gpu/GrGpuBuffer.h> -#include <src/gpu/GrGpuCommandBuffer.h> #include <src/gpu/GrGpuResourceCacheAccess.h> #include <src/gpu/GrGpuResourcePriv.h> #include <src/gpu/GrImageContextPriv.h> +#include <src/gpu/GrImageInfo.h> #include <src/gpu/GrImageTextureMaker.h> #include <src/gpu/GrMemoryPool.h> #include <src/gpu/GrMesh.h> +#include <src/gpu/GrNativeRect.h> #include <src/gpu/GrOnFlushResourceProvider.h> #include <src/gpu/GrOpFlushState.h> -#include <src/gpu/GrOpList.h> +#include <src/gpu/GrOpsRenderPass.h> +#include <src/gpu/GrOpsTask.h> #include <src/gpu/GrPaint.h> #include <src/gpu/GrPath.h> #include <src/gpu/GrPathProcessor.h> @@ -546,24 +554,27 @@ #include <src/gpu/GrProcessorSet.h> #include <src/gpu/GrProcessorUnitTest.h> #include <src/gpu/GrProgramDesc.h> +#include <src/gpu/GrProgramInfo.h> #include <src/gpu/GrProxyProvider.h> #include <src/gpu/GrRecordingContextPriv.h> #include <src/gpu/GrRectanizer.h> #include <src/gpu/GrRectanizer_pow2.h> #include <src/gpu/GrRectanizer_skyline.h> #include <src/gpu/GrReducedClip.h> +#include <src/gpu/GrRenderTarget.h> #include <src/gpu/GrRenderTargetContext.h> #include <src/gpu/GrRenderTargetContextPriv.h> -#include <src/gpu/GrRenderTargetOpList.h> #include <src/gpu/GrRenderTargetPriv.h> #include <src/gpu/GrRenderTargetProxy.h> #include <src/gpu/GrRenderTargetProxyPriv.h> +#include <src/gpu/GrRenderTask.h> #include <src/gpu/GrResourceAllocator.h> #include <src/gpu/GrResourceCache.h> #include <src/gpu/GrResourceProvider.h> #include <src/gpu/GrResourceProviderPriv.h> #include <src/gpu/GrSWMaskHelper.h> #include <src/gpu/GrSamplePatternDictionary.h> +#include <src/gpu/GrSamplerState.h> #include <src/gpu/GrSemaphore.h> #include <src/gpu/GrShaderCaps.h> #include <src/gpu/GrShaderUtils.h> @@ -585,16 +596,18 @@ #include <src/gpu/GrTextureAdjuster.h> #include <src/gpu/GrTextureContext.h> #include <src/gpu/GrTextureMaker.h> -#include <src/gpu/GrTextureOpList.h> #include <src/gpu/GrTexturePriv.h> #include <src/gpu/GrTextureProducer.h> #include <src/gpu/GrTextureProxy.h> #include <src/gpu/GrTextureProxyCacheAccess.h> #include <src/gpu/GrTextureProxyPriv.h> #include <src/gpu/GrTextureRenderTargetProxy.h> +#include <src/gpu/GrTextureResolveRenderTask.h> #include <src/gpu/GrTracing.h> +#include <src/gpu/GrTransferFromRenderTask.h> #include <src/gpu/GrUserStencilSettings.h> #include <src/gpu/GrVertexWriter.h> +#include <src/gpu/GrWaitRenderTask.h> #include <src/gpu/GrWindowRectangles.h> #include <src/gpu/GrXferProcessor.h> #include <src/gpu/GrYUVProvider.h> @@ -612,7 +625,7 @@ #include <src/gpu/ccpr/GrCCPathCache.h> #include <src/gpu/ccpr/GrCCPathProcessor.h> #include <src/gpu/ccpr/GrCCPerFlushResources.h> -#include <src/gpu/ccpr/GrCCPerOpListPaths.h> +#include <src/gpu/ccpr/GrCCPerOpsTaskPaths.h> #include <src/gpu/ccpr/GrCCQuadraticShader.h> #include <src/gpu/ccpr/GrCCStrokeGeometry.h> #include <src/gpu/ccpr/GrCCStroker.h> @@ -660,6 +673,7 @@ #include <src/gpu/effects/generated/GrPremulInputFragmentProcessor.h> #include <src/gpu/effects/generated/GrRRectBlurEffect.h> #include <src/gpu/effects/generated/GrRectBlurEffect.h> +#include <src/gpu/effects/generated/GrSaturateProcessor.h> #include <src/gpu/effects/generated/GrSimpleTextureEffect.h> #include <src/gpu/geometry/GrPathUtils.h> #include <src/gpu/geometry/GrQuad.h> @@ -673,7 +687,7 @@ #include <src/gpu/gl/GrGLDefines.h> #include <src/gpu/gl/GrGLGLSL.h> #include <src/gpu/gl/GrGLGpu.h> -#include <src/gpu/gl/GrGLGpuCommandBuffer.h> +#include <src/gpu/gl/GrGLOpsRenderPass.h> #include <src/gpu/gl/GrGLPath.h> #include <src/gpu/gl/GrGLPathRendering.h> #include <src/gpu/gl/GrGLProgram.h> @@ -719,7 +733,7 @@ #include <src/gpu/mock/GrMockBuffer.h> #include <src/gpu/mock/GrMockCaps.h> #include <src/gpu/mock/GrMockGpu.h> -#include <src/gpu/mock/GrMockGpuCommandBuffer.h> +#include <src/gpu/mock/GrMockOpsRenderPass.h> #include <src/gpu/mock/GrMockStencilAttachment.h> #include <src/gpu/mock/GrMockTexture.h> #include <src/gpu/ops/GrAAConvexPathRenderer.h> @@ -729,7 +743,6 @@ #include <src/gpu/ops/GrAtlasTextOp.h> #include <src/gpu/ops/GrClearOp.h> #include <src/gpu/ops/GrClearStencilClipOp.h> -#include <src/gpu/ops/GrCopySurfaceOp.h> #include <src/gpu/ops/GrDashLinePathRenderer.h> #include <src/gpu/ops/GrDashOp.h> #include <src/gpu/ops/GrDebugMarkerOp.h> @@ -747,7 +760,6 @@ #include <src/gpu/ops/GrOvalOpFactory.h> #include <src/gpu/ops/GrQuadPerEdgeAA.h> #include <src/gpu/ops/GrRegionOp.h> -#include <src/gpu/ops/GrSemaphoreOp.h> #include <src/gpu/ops/GrShadowRRectOp.h> #include <src/gpu/ops/GrSimpleMeshDrawOpHelper.h> #include <src/gpu/ops/GrSmallPathRenderer.h> @@ -756,7 +768,6 @@ #include <src/gpu/ops/GrStrokeRectOp.h> #include <src/gpu/ops/GrTessellatingPathRenderer.h> #include <src/gpu/ops/GrTextureOp.h> -#include <src/gpu/ops/GrTransferFromOp.h> #include <src/gpu/text/GrAtlasManager.h> #include <src/gpu/text/GrDistanceFieldAdjustTable.h> #include <src/gpu/text/GrSDFMaskFilter.h> @@ -775,15 +786,14 @@ #include <src/gpu/vk/GrVkDescriptorSetManager.h> #include <src/gpu/vk/GrVkFramebuffer.h> #include <src/gpu/vk/GrVkGpu.h> -#include <src/gpu/vk/GrVkGpuCommandBuffer.h> #include <src/gpu/vk/GrVkImage.h> #include <src/gpu/vk/GrVkImageLayout.h> #include <src/gpu/vk/GrVkImageView.h> #include <src/gpu/vk/GrVkIndexBuffer.h> #include <src/gpu/vk/GrVkInterface.h> #include <src/gpu/vk/GrVkMemory.h> +#include <src/gpu/vk/GrVkOpsRenderPass.h> #include <src/gpu/vk/GrVkPipeline.h> -#include <src/gpu/vk/GrVkPipelineLayout.h> #include <src/gpu/vk/GrVkPipelineState.h> #include <src/gpu/vk/GrVkPipelineStateBuilder.h> #include <src/gpu/vk/GrVkPipelineStateDataManager.h> @@ -906,10 +916,10 @@ #include <src/sksl/SkSLParser.h> #include <src/sksl/SkSLPipelineStageCodeGenerator.h> #include <src/sksl/SkSLSPIRVCodeGenerator.h> +#include <src/sksl/SkSLSectionAndParameterHelper.h> #include <src/sksl/SkSLString.h> #include <src/sksl/SkSLStringStream.h> #include <src/sksl/SkSLUtil.h> -#include <src/sksl/ir/SkSLAppendStage.h> #include <src/sksl/ir/SkSLBinaryExpression.h> #include <src/sksl/ir/SkSLBoolLiteral.h> #include <src/sksl/ir/SkSLBreakStatement.h> commit 2ac2595efa8c8a79a67f86a3c6cdacda4884fd54 Author: Luboš Luňák <l.lu...@collabora.com> AuthorDate: Mon Oct 21 16:12:19 2019 +0200 Commit: Luboš Luňák <l.lu...@collabora.com> CommitDate: Mon Oct 21 17:01:06 2019 +0200 resize surface in SkiaSalGraphicsImpl if needed This is similar to what the OpenGL backend does. Apparently the VCL code can just silently resize the graphics without telling. Change-Id: Ie7c2a7798e76ad598e9cdd1435d68ed03793c408 diff --git a/vcl/inc/skia/gdiimpl.hxx b/vcl/inc/skia/gdiimpl.hxx index c7c59ac9b2d6..463e927c3572 100644 --- a/vcl/inc/skia/gdiimpl.hxx +++ b/vcl/inc/skia/gdiimpl.hxx @@ -185,19 +185,19 @@ public: void drawBitmap(const SalTwoRect& rPosAry, const SkBitmap& bitmap); - // To be called after any drawing. - void scheduleFlush(); - - // Internal, called by SkiaFlushIdle. - virtual void performFlush() = 0; - #ifdef DBG_UTIL void dump(const char* file) const; static void dump(const SkBitmap& bitmap, const char* file); #endif protected: + // To be called before any drawing. + void preDraw(); + // To be called after any drawing. + void postDraw(); + virtual void createSurface(); + void resetSurface(); void setProvider(SalGeometryProvider* provider) { mProvider = provider; } @@ -205,7 +205,10 @@ protected: void invert(basegfx::B2DPolygon const& rPoly, SalInvert eFlags); -protected: + // Called by SkiaFlushIdle. + virtual void performFlush() = 0; + friend class SkiaFlushIdle; + // get the width of the device int GetWidth() const { return mProvider ? mProvider->GetWidth() : 1; } // get the height of the device diff --git a/vcl/skia/gdiimpl.cxx b/vcl/skia/gdiimpl.cxx index deb35255ddfa..ccf4ea7cef34 100644 --- a/vcl/skia/gdiimpl.cxx +++ b/vcl/skia/gdiimpl.cxx @@ -114,13 +114,16 @@ SkiaSalGraphicsImpl::SkiaSalGraphicsImpl(SalGraphics& rParent, SalGeometryProvid SkiaSalGraphicsImpl::~SkiaSalGraphicsImpl() {} -void SkiaSalGraphicsImpl::Init() +void SkiaSalGraphicsImpl::Init() { resetSurface(); } + +void SkiaSalGraphicsImpl::resetSurface() { createSurface(); mSurface->getCanvas()->save(); // see SetClipRegion() mClipRegion = vcl::Region(tools::Rectangle(0, 0, GetWidth(), GetHeight())); // We don't want to be swapping before we've painted. + mFlush->Stop(); mFlush->SetPriority(TaskPriority::POST_PAINT); } @@ -132,6 +135,24 @@ void SkiaSalGraphicsImpl::createSurface() void SkiaSalGraphicsImpl::DeInit() { mSurface.reset(); } +void SkiaSalGraphicsImpl::preDraw() +{ + // VCL can sometimes resize us without telling us, update the surface if needed. + if (GetWidth() != mSurface->width() || GetHeight() != mSurface->height()) + resetSurface(); +} + +void SkiaSalGraphicsImpl::postDraw() +{ + if (!isOffscreen()) + { + if (!Application::IsInExecute()) + performFlush(); // otherwise nothing would trigger idle rendering + else if (!mFlush->IsActive()) + mFlush->Start(); + } +} + static SkIRect toSkIRect(const tools::Rectangle& rectangle) { return SkIRect::MakeXYWH(rectangle.Left(), rectangle.Top(), rectangle.GetWidth(), @@ -207,37 +228,41 @@ void SkiaSalGraphicsImpl::drawPixel(long nX, long nY) { if (mLineColor == SALCOLOR_NONE) return; + preDraw(); SkCanvas* canvas = mSurface->getCanvas(); canvas->drawPoint(nX, nY, SkPaint()); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawPixel(long nX, long nY, Color nColor) { if (nColor == SALCOLOR_NONE) return; + preDraw(); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; paint.setColor(toSkColor(nColor)); // Apparently drawPixel() is actually expected to set the pixel and not draw it. paint.setBlendMode(SkBlendMode::kSrc); // set as is, including alpha canvas->drawPoint(nX, nY, paint); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawLine(long nX1, long nY1, long nX2, long nY2) { if (mLineColor == SALCOLOR_NONE) return; + preDraw(); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; paint.setColor(toSkColor(mLineColor)); canvas->drawLine(nX1, nY1, nX2, nY2, paint); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) { + preDraw(); SkCanvas* canvas = mSurface->getCanvas(); SkPaint paint; if (mFillColor != SALCOLOR_NONE) @@ -252,13 +277,14 @@ void SkiaSalGraphicsImpl::drawRect(long nX, long nY, long nWidth, long nHeight) paint.setStyle(SkPaint::kStroke_Style); canvas->drawIRect(SkIRect::MakeXYWH(nX, nY, nWidth - 1, nHeight - 1), paint); } - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAry) { if (mLineColor == SALCOLOR_NONE) return; + preDraw(); std::vector<SkPoint> pointVector; pointVector.reserve(nPoints); for (sal_uInt32 i = 0; i < nPoints; ++i) @@ -267,13 +293,14 @@ void SkiaSalGraphicsImpl::drawPolyLine(sal_uInt32 nPoints, const SalPoint* pPtAr paint.setColor(toSkColor(mLineColor)); mSurface->getCanvas()->drawPoints(SkCanvas::kLines_PointMode, nPoints, pointVector.data(), paint); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry) { if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE) return; + preDraw(); std::vector<SkPoint> pointVector; pointVector.reserve(nPoints); for (sal_uInt32 i = 0; i < nPoints; ++i) @@ -293,7 +320,7 @@ void SkiaSalGraphicsImpl::drawPolygon(sal_uInt32 nPoints, const SalPoint* pPtAry paint.setStyle(SkPaint::kStroke_Style); mSurface->getCanvas()->drawPath(path, paint); } - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pPoints, @@ -301,6 +328,7 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP { if (mLineColor == SALCOLOR_NONE && mFillColor == SALCOLOR_NONE) return; + preDraw(); std::vector<SkPoint> pointVector; SkPath path; for (sal_uInt32 poly = 0; poly < nPoly; ++poly) @@ -328,7 +356,7 @@ void SkiaSalGraphicsImpl::drawPolyPolygon(sal_uInt32 nPoly, const sal_uInt32* pP paint.setStyle(SkPaint::kStroke_Style); mSurface->getCanvas()->drawPath(path, paint); } - scheduleFlush(); + postDraw(); } bool SkiaSalGraphicsImpl::drawPolyPolygon(const basegfx::B2DHomMatrix& rObjectToDevice, @@ -389,15 +417,17 @@ void SkiaSalGraphicsImpl::copyArea(long nDestX, long nDestY, long nSrcX, long nS { if (nDestX == nSrcX && nDestY == nSrcY) return; + preDraw(); sk_sp<SkImage> image = mSurface->makeImageSnapshot(SkIRect::MakeXYWH(nSrcX, nSrcY, nSrcWidth, nSrcHeight)); // TODO makeNonTextureImage() ? mSurface->getCanvas()->drawImage(image, nDestX, nDestY); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcGraphics) { + preDraw(); SkiaSalGraphicsImpl* src; if (pSrcGraphics) { @@ -414,7 +444,7 @@ void SkiaSalGraphicsImpl::copyBits(const SalTwoRect& rPosAry, SalGraphics* pSrcG rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); - scheduleFlush(); + postDraw(); } bool SkiaSalGraphicsImpl::blendBitmap(const SalTwoRect&, const SalBitmap& rBitmap) @@ -438,6 +468,7 @@ void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& if (rPosAry.mnSrcWidth <= 0 || rPosAry.mnSrcHeight <= 0 || rPosAry.mnDestWidth <= 0 || rPosAry.mnDestHeight <= 0) return; + preDraw(); assert(dynamic_cast<const SkiaSalBitmap*>(&rSalBitmap)); mSurface->getCanvas()->drawBitmapRect( static_cast<const SkiaSalBitmap&>(rSalBitmap).GetSkBitmap(), @@ -445,7 +476,7 @@ void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SalBitmap& rSalBitmap, @@ -467,6 +498,7 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SalBitmap& r void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SkBitmap& rBitmap, Color nMaskColor) { + preDraw(); SkBitmap tmpBitmap; if (!tmpBitmap.tryAllocN32Pixels(rBitmap.width(), rBitmap.height())) abort(); @@ -484,7 +516,7 @@ void SkiaSalGraphicsImpl::drawMask(const SalTwoRect& rPosAry, const SkBitmap& rB SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); - scheduleFlush(); + postDraw(); } std::shared_ptr<SalBitmap> SkiaSalGraphicsImpl::getBitmap(long nX, long nY, long nWidth, @@ -509,6 +541,7 @@ Color SkiaSalGraphicsImpl::getPixel(long nX, long nY) void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon const& rPoly, SalInvert eFlags) { + preDraw(); // TrackFrame just inverts a dashed path around the polygon if (eFlags == SalInvert::TrackFrame) { @@ -568,7 +601,7 @@ void SkiaSalGraphicsImpl::invert(basegfx::B2DPolygon const& rPoly, SalInvert eFl mSurface->getCanvas()->drawPath(aPath, aPaint); } - scheduleFlush(); + postDraw(); } void SkiaSalGraphicsImpl::invert(long nX, long nY, long nWidth, long nHeight, SalInvert eFlags) @@ -625,13 +658,14 @@ bool SkiaSalGraphicsImpl::drawAlphaBitmap(const SalTwoRect& rPosAry, const SalBi void SkiaSalGraphicsImpl::drawBitmap(const SalTwoRect& rPosAry, const SkBitmap& bitmap) { + preDraw(); mSurface->getCanvas()->drawBitmapRect( bitmap, SkRect::MakeXYWH(rPosAry.mnSrcX, rPosAry.mnSrcY, rPosAry.mnSrcWidth, rPosAry.mnSrcHeight), SkRect::MakeXYWH(rPosAry.mnDestX, rPosAry.mnDestY, rPosAry.mnDestWidth, rPosAry.mnDestHeight), nullptr); - scheduleFlush(); + postDraw(); } bool SkiaSalGraphicsImpl::drawTransformedBitmap(const basegfx::B2DPoint& rNull, @@ -667,16 +701,6 @@ bool SkiaSalGraphicsImpl::drawGradient(const tools::PolyPolygon& rPolygon, return false; } -void SkiaSalGraphicsImpl::scheduleFlush() -{ - if (isOffscreen()) - return; - if (!Application::IsInExecute()) - performFlush(); // otherwise nothing would trigger idle rendering - else if (!mFlush->IsActive()) - mFlush->Start(); -} - #ifdef DBG_UTIL void SkiaSalGraphicsImpl::dump(const char* file) const { diff --git a/vcl/skia/win/gdiimpl.cxx b/vcl/skia/win/gdiimpl.cxx index c33735f58063..7af4f6790a61 100644 --- a/vcl/skia/win/gdiimpl.cxx +++ b/vcl/skia/win/gdiimpl.cxx @@ -99,9 +99,9 @@ bool WinSkiaSalGraphicsImpl::RenderAndCacheNativeControl(CompatibleDC& rWhite, C return false; // TODO } -void WinSkiaSalGraphicsImpl::PreDrawText() {} +void WinSkiaSalGraphicsImpl::PreDrawText() { preDraw(); } -void WinSkiaSalGraphicsImpl::PostDrawText() { scheduleFlush(); } +void WinSkiaSalGraphicsImpl::PostDrawText() { postDraw(); } void WinSkiaSalGraphicsImpl::DeferredTextDraw(const CompatibleDC::Texture* pTexture, Color aMaskColor, const SalTwoRect& rPosAry) _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits