[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx |5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) New commits: commit babf033fddf1d1212a268703a7dcd96214560f26 Author: Bartosz Kosiorek AuthorDate: Tue Nov 27 11:44:07 2018 +0100 Commit: Bartosz Kosiorek CommitDate: Tue Nov 27 11:45:28 2018 +0100 tdf#121648 EMF+ Fix displaying DrawDriverString record With introduing String rotation support I made mistake by not removing Maping from DX-Array. With this commit I'm fixing that issue. Now drawing with DrawDriverString record, and rotation is working perfectly. Change-Id: I7ae051b3791d9d2d8e2143ed33d21b7bfbc551c6 Reviewed-on: https://gerrit.libreoffice.org/64080 Tested-by: Jenkins Reviewed-by: Patrick Jaap Reviewed-by: Bartosz Kosiorek diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index 595fddd96af2..b729c5a6611f 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -1796,10 +1796,9 @@ namespace emfplushelper // generate the DX-Array aDXArray.clear(); -double mappedPosX = Map(charsPosX[pos], charsPosY[pos]).getX(); -for (size_t i = 0; i < aLength-1; i++) +for (size_t i = 0; i < aLength - 1; i++) { -aDXArray.push_back(Map(charsPosX[pos + i + 1], charsPosY[pos + i + 1]).getX() - mappedPosX); +aDXArray.push_back(charsPosX[pos + i + 1] - charsPosX[pos]); } // last entry aDXArray.push_back(0); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx | 74 +-- 1 file changed, 58 insertions(+), 16 deletions(-) New commits: commit 39dbb20bb9a5f73487c5f3e0e685d7c61963a073 Author: Bartosz Kosiorek AuthorDate: Sun Nov 4 02:39:09 2018 +0100 Commit: Bartosz Kosiorek CommitDate: Tue Nov 27 01:59:09 2018 +0100 tdf#55058 tdf#106084 EMF+ Add support for Underline and Strikeout Add support of Underline and Strikeout for DrawString and DrawDriverString EMF+ records Change-Id: I24c47e0d7524dabc13edd04c6b68aec69fa35e7b Reviewed-on: https://gerrit.libreoffice.org/62827 Tested-by: Jenkins Reviewed-by: Patrick Jaap Reviewed-by: Bartosz Kosiorek (cherry picked from commit 8d4da5429548ba6ef4d3ee4dd6062c25a77ba78b) Reviewed-on: https://gerrit.libreoffice.org/63576 diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index 0f827fceb81a..595fddd96af2 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -1320,10 +1321,6 @@ namespace emfplushelper mrPropertyHolders.Current().setFont(vcl::Font(font->family, Size(font->emSize, font->emSize))); // done reading -// transform to TextSimplePortionPrimitive2D -// TODO add more decorations: underline, strikeout, etc -// and create a TextDecoratedPortionPrimitive2D - const OUString emptyString; drawinglayer::attribute::FontAttribute fontAttribute( font->family, // font family @@ -1376,8 +1373,10 @@ namespace emfplushelper if (color.GetTransparency() < 255) { std::vector emptyVector; - drawinglayer::primitive2d::Primitive2DReference aPrimitiveText( -new drawinglayer::primitive2d::TextSimplePortionPrimitive2D( +drawinglayer::primitive2d::BasePrimitive2D* pBaseText = nullptr; +if (font->Underline() || font->Strikeout()) +{ +pBaseText = new drawinglayer::primitive2d::TextDecoratedPortionPrimitive2D( transformMatrix, text, 0, // text always starts at 0 @@ -1385,8 +1384,28 @@ namespace emfplushelper emptyVector, // EMF-PLUS has no DX-array fontAttribute, locale, -color.getBColor())); - +color.getBColor(), +COL_TRANSPARENT, +color.getBColor(), +color.getBColor(), + drawinglayer::primitive2d::TEXT_LINE_NONE, +font->Underline() ? drawinglayer::primitive2d::TEXT_LINE_SINGLE : drawinglayer::primitive2d::TEXT_LINE_NONE, +false, +font->Strikeout() ? drawinglayer::primitive2d::TEXT_STRIKEOUT_SINGLE : drawinglayer::primitive2d::TEXT_STRIKEOUT_NONE); +} +else +{ +pBaseText = new drawinglayer::primitive2d::TextSimplePortionPrimitive2D( +transformMatrix, +text, +0, // text always starts at 0 +stringLength, +emptyVector, // EMF-PLUS has no DX-array +fontAttribute, +locale, +color.getBColor()); +} + drawinglayer::primitive2d::Primitive2DReference aPrimitiveText(pBaseText); if (color.GetTransparency() != 0) {
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source emfio/qa
drawinglayer/source/tools/emfphelperdata.cxx | 104 ++- emfio/qa/cppunit/emf/EmfImportTest.cxx | 26 +++--- 2 files changed, 55 insertions(+), 75 deletions(-) New commits: commit 1f308f95f88eeea3cbb46c78c39678c0f3860d0b Author: Bartosz Kosiorek AuthorDate: Fri Nov 2 15:53:05 2018 +0100 Commit: Bartosz Kosiorek CommitDate: Mon Nov 19 15:30:33 2018 +0100 tdf#55058 tdf#106084 tdf#114738 EMF+ Add rotation support for String drawing Added rotation support for DrawString and DrawDriverString The EmfPlusDrawString record specifies text output with string formatting. The EmfPlusDrawDriverString record specifies text output with character positions. Now both EMF+ records properly support rotation. Change-Id: I15a7a6dd2b8a209cf2aac2af75d7dd89cedd1aeb Reviewed-on: https://gerrit.libreoffice.org/62805 Tested-by: Jenkins Reviewed-by: Bartosz Kosiorek diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index df96667e0cbf..0f827fceb81a 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -33,6 +33,7 @@ #include #include #include +#include #include #include #include @@ -1365,7 +1366,8 @@ namespace emfplushelper } const basegfx::B2DHomMatrix transformMatrix = basegfx::utils::createScaleTranslateB2DHomMatrix( -MapSize(font->emSize, font->emSize), Map(lx + stringAlignmentHorizontalOffset, ly + font->emSize)); +::basegfx::B2DSize(font->emSize, font->emSize), +::basegfx::B2DPoint(lx + stringAlignmentHorizontalOffset, ly + font->emSize)); const Color color = EMFPGetBrushColorOrARGBColor(flags, brushId); mrPropertyHolders.Current().setTextColor(color.getBColor()); @@ -1374,38 +1376,28 @@ namespace emfplushelper if (color.GetTransparency() < 255) { std::vector emptyVector; -if (color.GetTransparency() == 0) + drawinglayer::primitive2d::Primitive2DReference aPrimitiveText( +new drawinglayer::primitive2d::TextSimplePortionPrimitive2D( +transformMatrix, +text, +0, // text always starts at 0 +stringLength, +emptyVector, // EMF-PLUS has no DX-array +fontAttribute, +locale, +color.getBColor())); + +if (color.GetTransparency() != 0) { -// not transparent -mrTargetHolders.Current().append( - o3tl::make_unique( -transformMatrix, -text, -0, // text always starts at 0 -stringLength, -emptyVector, // EMF-PLUS has no DX-array -fontAttribute, -locale, -color.getBColor())); +aPrimitiveText = new drawinglayer::primitive2d::UnifiedTransparencePrimitive2D( + drawinglayer::primitive2d::Primitive2DContainer { aPrimitiveText }, +color.GetTransparency() / 255.0); } -else -{ -const drawinglayer::primitive2d::Primitive2DReference aPrimitive( -new drawinglayer::primitive2d::TextSimplePortionPrimitive2D( -transformMatrix, -text, -0, // text always starts at 0 -stringLength, -emptyVector, // EMF-PLUS has no
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx |4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) New commits: commit f133621aeb78a37dc4d9db7a0eb7d0bde4637fb2 Author: Caolán McNamara AuthorDate: Thu Sep 20 09:39:26 2018 +0100 Commit: Caolán McNamara CommitDate: Thu Sep 20 13:01:09 2018 +0200 ofz#10526 check with dynamic_cast its really a EMFPStringFormat Change-Id: Ifbe81b851b17858a915105c102af6f4d8f2c81fa Reviewed-on: https://gerrit.libreoffice.org/60799 Reviewed-by: Michael Stahl Tested-by: Jenkins diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index a5b31b1b4ebe..df96667e0cbf 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -1309,7 +1309,7 @@ namespace emfplushelper const OUString text = read_uInt16s_ToOUString(rMS, stringLength); SAL_INFO("drawinglayer", "EMF+ DrawString string: " << text); // get the stringFormat from the Object table ( this is OPTIONAL and may be nullptr ) -const EMFPStringFormat *stringFormat = static_cast< EMFPStringFormat* >(maEMFPObjects[formatId & 0xff].get()); +const EMFPStringFormat *stringFormat = dynamic_cast(maEMFPObjects[formatId & 0xff].get()); // get the font from the flags const EMFPFont *font = static_cast< EMFPFont* >( maEMFPObjects[flags & 0xff].get() ); if (!font) @@ -1340,7 +1340,7 @@ namespace emfplushelper double stringAlignmentHorizontalOffset = 0.0; if (stringFormat) { -SAL_WARN_IF(stringFormat && stringFormat->DirectionRightToLeft(), "drawinglayer", "EMF+ DrawString Alignment TODO For a right-to-left layout rectangle, the origin should be at the upper right."); + SAL_WARN_IF(stringFormat->DirectionRightToLeft(), "drawinglayer", "EMF+ DrawString Alignment TODO For a right-to-left layout rectangle, the origin should be at the upper right."); if (stringFormat->stringAlignment == StringAlignmentNear) // Alignment is to the left side of the layout rectangle (lx, ly, lw, lh) { ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx | 13 +++-- 1 file changed, 11 insertions(+), 2 deletions(-) New commits: commit e16f22b75f84695c58d6612be27364cc5814f51f Author: Caolán McNamara AuthorDate: Mon Aug 13 17:22:43 2018 +0100 Commit: Michael Stahl CommitDate: Mon Aug 20 12:17:48 2018 +0200 ofz: Null-deference Change-Id: I339cfb54379b1c98a04747046ed599a23d49c220 Reviewed-on: https://gerrit.libreoffice.org/58950 Tested-by: Jenkins Reviewed-by: Michael Stahl diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index c529c255beb1..a5b31b1b4ebe 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -1665,8 +1665,13 @@ namespace emfplushelper SAL_INFO("drawinglayer", "EMF+ SetClipPath combine mode: " << combineMode); SAL_INFO("drawinglayer", "EMF+\tpath in slot: " << (flags & 0xff)); -EMFPPath& path = *static_cast(maEMFPObjects[flags & 0xff].get()); -::basegfx::B2DPolyPolygon& clipPoly(path.GetPolygon(*this)); +EMFPPath *path = static_cast(maEMFPObjects[flags & 0xff].get()); +if (!path) +{ +break; +} + +::basegfx::B2DPolyPolygon& clipPoly(path->GetPolygon(*this)); // clipPoly.transform(rState.mapModeTransform); HandleNewClipRegion( combineClip(mrPropertyHolders.Current().getClipPolyPolygon(), combineMode, clipPoly), mrTargetHolders, mrPropertyHolders); @@ -1678,6 +1683,10 @@ namespace emfplushelper SAL_INFO("drawinglayer", "EMF+ SetClipRegion"); SAL_INFO("drawinglayer", "EMF+\tregion in slot: " << (flags & 0xff) << " combine mode: " << combineMode); EMFPRegion *region = static_cast(maEMFPObjects[flags & 0xff].get()); +if (!region) +{ +break; +} HandleNewClipRegion(combineClip(mrPropertyHolders.Current().getClipPolyPolygon(), combineMode, region->regionPolyPolygon), mrTargetHolders, mrPropertyHolders); break; ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx |9 + 1 file changed, 9 insertions(+) New commits: commit 9b3f18ceda930f8e80149a850397ff3040b575f0 Author: Caolán McNamara Date: Tue Jun 26 11:58:30 2018 +0100 forcepoint#47 bail when we detect the emf is broken Change-Id: I065635393763af774b45cbba6bd85c4334383b93 Reviewed-on: https://gerrit.libreoffice.org/56457 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index 78b76ecfe647..c529c255beb1 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -830,12 +830,21 @@ namespace emfplushelper next = rMS.Tell() + (size - 12); if (size < 12) +{ SAL_WARN("drawinglayer", "Size field is less than 12 bytes"); +break; +} else if (size > length) +{ SAL_WARN("drawinglayer", "Size field is greater than bytes left"); +break; +} if (dataSize > (size - 12)) +{ SAL_WARN("drawinglayer", "DataSize field is greater than Size-12"); +break; +} SAL_INFO("drawinglayer", "EMF+ record size: " << size << " type: " << emfTypeToName(type) << " flags: " << flags << " data size: " << dataSize); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/tools/emfphelperdata.cxx |2 +- 1 file changed, 1 insertion(+), 1 deletion(-) New commits: commit ec1a4c49c075e214e02d07ff83051d11b817ce0a Author: Caolán McNamara Date: Tue Jun 12 12:14:36 2018 +0100 forcepoint#45 object may not be a EMFPPen Change-Id: Ifb5c17e13faf6e9d246e1668ef7916957a5296b6 Reviewed-on: https://gerrit.libreoffice.org/55678 Tested-by: Jenkins Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/drawinglayer/source/tools/emfphelperdata.cxx b/drawinglayer/source/tools/emfphelperdata.cxx index a7c455cfc1aa..78b76ecfe647 100644 --- a/drawinglayer/source/tools/emfphelperdata.cxx +++ b/drawinglayer/source/tools/emfphelperdata.cxx @@ -389,7 +389,7 @@ namespace emfplushelper void EmfPlusHelperData::EMFPPlusDrawPolygon(const ::basegfx::B2DPolyPolygon& polygon, sal_uInt32 penIndex) { -const EMFPPen* pen = static_cast(maEMFPObjects[penIndex & 0xff].get()); +const EMFPPen* pen = dynamic_cast(maEMFPObjects[penIndex & 0xff].get()); SAL_WARN_IF(!pen, "drawinglayer", "emf+ missing pen"); if (pen && polygon.count()) ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/primitive2d/svggradientprimitive2d.cxx | 11 +-- 1 file changed, 9 insertions(+), 2 deletions(-) New commits: commit a3423a4efd016014158fdeec34e1f75960f8604a Author: Armin Le Grand Date: Wed Jun 6 13:28:09 2018 +0200 tdf#117949 Use small overlap for SVG gradient representation Change-Id: Idd55df31aa87cc40dbb15001479cdc79e918ac19 Reviewed-on: https://gerrit.libreoffice.org/55376 Tested-by: Jenkins Reviewed-by: Armin Le Grand (cherry picked from commit aa5d7477e8e1e4bcd0e56496e745c3dc3b05c369) Reviewed-on: https://gerrit.libreoffice.org/55398 diff --git a/drawinglayer/source/primitive2d/svggradientprimitive2d.cxx b/drawinglayer/source/primitive2d/svggradientprimitive2d.cxx index 0197b4199fb2..12eef36c16ac 100644 --- a/drawinglayer/source/primitive2d/svggradientprimitive2d.cxx +++ b/drawinglayer/source/primitive2d/svggradientprimitive2d.cxx @@ -915,14 +915,21 @@ namespace drawinglayer // use color distance and discrete lengths to calculate step count const sal_uInt32 nSteps(calculateStepsForSvgGradient(getColorA(), getColorB(), fDelta, fDiscreteUnit)); +// tdf#117949 Use a small amount of discrete overlap at the edges. Usually this +// should be exactly 0.0 and 1.0, but there were cases when this gets clipped +// against the mask polygon which got numerically problematic. +// This change is unnecessary in that respect, but avoids that numerical havoc +// by at the same time doing no real harm AFAIK +// : Remove again when clipping is fixed (!) + // prepare polygon in needed width at start position (with discrete overlap) const basegfx::B2DPolygon aPolygon( basegfx::utils::createPolygonFromRect( basegfx::B2DRange( getOffsetA() - fDiscreteUnit, -0.0, +-0.0001, // -> should be 0.0, see comment above getOffsetA() + (fDelta / nSteps) + fDiscreteUnit, -1.0))); +1.0001))); // -> should be 1.0, see comment above // prepare loop (inside to outside, [0.0 .. 1.0[) double fUnitScale(0.0); ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
[Libreoffice-commits] core.git: Branch 'libreoffice-6-1' - drawinglayer/source
drawinglayer/source/texture/texture3d.cxx | 11 +++ 1 file changed, 7 insertions(+), 4 deletions(-) New commits: commit f532decefb7881eb5f56864db9fcfd5d2ba85ee4 Author: Caolán McNamara Date: Mon May 28 21:36:16 2018 +0100 forcepoint#41 null deref Change-Id: I16e9e083811c6e14861da1ba1df7d46e8c8771d7 Reviewed-on: https://gerrit.libreoffice.org/54973 Reviewed-by: Caolán McNamara Tested-by: Caolán McNamara diff --git a/drawinglayer/source/texture/texture3d.cxx b/drawinglayer/source/texture/texture3d.cxx index fc8750199c8f..0dac447ccf50 100644 --- a/drawinglayer/source/texture/texture3d.cxx +++ b/drawinglayer/source/texture/texture3d.cxx @@ -74,8 +74,6 @@ namespace drawinglayer { // #121194# Todo: use alpha channel, too (for 3d) maBitmap = maBitmapEx.GetBitmap(); -mpReadBitmap = Bitmap::ScopedReadAccess(maBitmap); -OSL_ENSURE(mpReadBitmap, "GeoTexSvxBitmapEx: Got no read access to Bitmap (!)"); if(mbIsTransparent) { @@ -92,8 +90,13 @@ namespace drawinglayer mpReadTransparence = Bitmap::ScopedReadAccess(maTransparence); } -mfMulX = static_cast(mpReadBitmap->Width()) / maSize.getX(); -mfMulY = static_cast(mpReadBitmap->Height()) / maSize.getY(); +mpReadBitmap = Bitmap::ScopedReadAccess(maBitmap); +SAL_WARN_IF(!mpReadBitmap, "drawinglayer", "GeoTexSvxBitmapEx: Got no read access to Bitmap"); +if (mpReadBitmap) +{ +mfMulX = static_cast(mpReadBitmap->Width()) / maSize.getX(); +mfMulY = static_cast(mpReadBitmap->Height()) / maSize.getY(); +} if(maSize.getX() <= 1.0) { ___ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits