From 6f14aad6a8d5f22eaed8719d6c2798cd17a546a8 Mon Sep 17 00:00:00 2001 From: Michal Maciola Date: Tue, 10 Aug 2021 17:22:37 +0200 Subject: [PATCH] common: RenderRegion x, y protect against negative value in unsigned int This change protects against negative value in unsigned int of RenderRegion.x/y. This fixes a problem of invisible paint if ClipPath bounds was negative. @issue: #704 --- src/lib/tvgPaint.cpp | 3 +++ src/lib/tvgPictureImpl.h | 2 +- src/loaders/svg/tvgSvgSceneBuilder.cpp | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/lib/tvgPaint.cpp b/src/lib/tvgPaint.cpp index 2dbcadd..1c90bed 100644 --- a/src/lib/tvgPaint.cpp +++ b/src/lib/tvgPaint.cpp @@ -77,6 +77,9 @@ static bool _clipPathFastTrack(Paint* cmpTarget, const RenderTransform* pTransfo y2 = y2 * pTransform->m.e22 + pTransform->m.e23; } + if (x1 < 0.0f) x1 = 0.0f; + if (y1 < 0.0f) y1 = 0.0f; + viewport.x = static_cast(x1); viewport.y = static_cast(y1); viewport.w = static_cast(roundf(x2 - x1 + 0.5f)); diff --git a/src/lib/tvgPictureImpl.h b/src/lib/tvgPictureImpl.h index dbb8916..19642c1 100644 --- a/src/lib/tvgPictureImpl.h +++ b/src/lib/tvgPictureImpl.h @@ -95,7 +95,7 @@ struct Picture::Impl if (auto p = loader->paint()) { paint = p.release(); loader->close(); - if (w != loader->w && h != loader->h) { + if (w != loader->w || h != loader->h) { loader->resize(paint, w, h); resizing = false; } diff --git a/src/loaders/svg/tvgSvgSceneBuilder.cpp b/src/loaders/svg/tvgSvgSceneBuilder.cpp index f41b648..d237fe9 100644 --- a/src/loaders/svg/tvgSvgSceneBuilder.cpp +++ b/src/loaders/svg/tvgSvgSceneBuilder.cpp @@ -523,7 +523,7 @@ unique_ptr svgSceneBuild(SvgNode* node, float vx, float vy, float vw, flo auto docNode = _sceneBuildHelper(node, vx, vy, vw, vh); auto viewBoxClip = Shape::gen(); - viewBoxClip->appendRect(vx, vy ,vw, vh, 0, 0); + viewBoxClip->appendRect(vx, vy, vw, vh, 0, 0); viewBoxClip->fill(0, 0, 0, 255); auto compositeLayer = Scene::gen(); -- 2.7.4