16 #include <rtl/string.hxx>
17 #include <rtl/ustrbuf.hxx>
24 OUString collectPushFlags(
PushFlags nFlags)
33 std::vector<OUString> aStrings;
36 aStrings.emplace_back(
"PushLineColor");
38 aStrings.emplace_back(
"PushFillColor");
40 aStrings.emplace_back(
"PushFont");
42 aStrings.emplace_back(
"PushTextColor");
44 aStrings.emplace_back(
"PushMapMode");
46 aStrings.emplace_back(
"PushClipRegion");
48 aStrings.emplace_back(
"PushRasterOp");
50 aStrings.emplace_back(
"PushTextFillColor");
52 aStrings.emplace_back(
"PushTextAlign");
54 aStrings.emplace_back(
"PushRefPoint");
56 aStrings.emplace_back(
"PushTextLineColor");
58 aStrings.emplace_back(
"PushTextLayoutMode");
60 aStrings.emplace_back(
"PushTextLanguage");
62 aStrings.emplace_back(
"PushOverlineColor");
69 aString = aStrings[0];
70 for (
size_t i = 1;
i < aStrings.size(); ++
i)
72 aString +=
", " + aStrings[
i];
77 OUString convertDrawTextFlagsToString(
DrawTextFlags eDrawTextFlags)
79 std::vector<OUString> aStrings;
81 aStrings.emplace_back(
"Disable");
83 aStrings.emplace_back(
"Mnemonic");
85 aStrings.emplace_back(
"Mono");
87 aStrings.emplace_back(
"Clip");
89 aStrings.emplace_back(
"Left");
91 aStrings.emplace_back(
"Center");
93 aStrings.emplace_back(
"Right");
95 aStrings.emplace_back(
"Top");
97 aStrings.emplace_back(
"VCenter");
99 aStrings.emplace_back(
"Bottom");
101 aStrings.emplace_back(
"EndEllipsis");
103 aStrings.emplace_back(
"PathEllipsis");
105 aStrings.emplace_back(
"MultiLine");
107 aStrings.emplace_back(
"WordBreak");
109 aStrings.emplace_back(
"NewsEllipsis");
111 aStrings.emplace_back(
"WordBreakHyphenation");
113 aStrings.emplace_back(
"CenterEllipsis");
115 aStrings.emplace_back(
"HideMnemonic");
119 if (aStrings.empty())
122 aString = aStrings[0];
123 for (
size_t i = 1;
i < aStrings.size(); ++
i)
125 aString +=
" " + aStrings[
i];
130 OUString convertRopToString(
RasterOp eRop)
143 OUString convertTextAlignToString(
TextAlign eAlign)
155 OUString convertColorToString(
Color aColor)
158 return "#" + aRGBString;
161 OUString convertLineStyleToString(
LineStyle eAlign)
185 OUString convertLineCapToString(css::drawing::LineCap eCap)
190 case css::drawing::LineCap_BUTT:
return "butt";
191 case css::drawing::LineCap_ROUND:
return "round";
192 case css::drawing::LineCap_SQUARE:
return "square";
196 OUString convertPolygonFlags(
PolyFlags eFlags)
201 case PolyFlags::Normal:
return "normal";
202 case PolyFlags::Control:
return "control";
203 case PolyFlags::Smooth:
return "smooth";
204 case PolyFlags::Symmetric:
return "symmetric";
208 OUString convertFontWeightToString(
FontWeight eFontWeight)
228 OUString convertFontStrikeoutToString(
FontStrikeout eFontStrikeout)
230 switch (eFontStrikeout)
244 OUString convertFontLineStyleToString(
FontLineStyle eFontLineStyle)
246 switch (eFontLineStyle)
272 OString convertLineStyleToString(
const MetaActionType nActionType)
344 OUString convertMapUnitToString(
MapUnit eUnit)
349 case MapUnit::LASTENUMDUMMY:
return "LASTENUMDUMMY";
350 case MapUnit::Map1000thInch:
return "Map1000thInch";
351 case MapUnit::Map100thInch:
return "Map100thInch";
352 case MapUnit::Map100thMM:
return "Map100thMM";
353 case MapUnit::Map10thInch:
return "Map10thInch";
354 case MapUnit::Map10thMM:
return "Map10thMM";
355 case MapUnit::MapAppFont:
return "MapAppFont";
356 case MapUnit::MapCM:
return "MapCM";
357 case MapUnit::MapInch:
return "MapInch";
358 case MapUnit::MapMM:
return "MapMM";
359 case MapUnit::MapPixel:
return "MapPixel";
360 case MapUnit::MapPoint:
return "MapPoint";
361 case MapUnit::MapRelative:
return "MapRelative";
362 case MapUnit::MapSysFont:
return "MapSysFont";
363 case MapUnit::MapTwip:
return "MapTwip";
367 OUString convertFractionToString(
const Fraction& aFraction)
369 std::stringstream ss;
373 return OUString::createFromAscii(ss.str().c_str());
380 case GradientStyle::Linear:
return "Linear";
381 case GradientStyle::Axial:
return "Axial";
382 case GradientStyle::Radial:
return "Radial";
383 case GradientStyle::Elliptical:
return "Elliptical";
384 case GradientStyle::Square:
return "Square";
385 case GradientStyle::Rect:
return "Rect";
386 case GradientStyle::FORCE_EQUAL_SIZE:
return "ForceEqualSize";
395 case HatchStyle::Single:
return "Single";
396 case HatchStyle::Double:
return "Double";
397 case HatchStyle::Triple:
return "Triple";
398 case HatchStyle::FORCE_EQUAL_SIZE:
return "ForceEqualSize";
403 OUString convertWallpaperStyleToString(
WallpaperStyle eWallpaperStyle)
405 switch (eWallpaperStyle)
426 switch (ePixelFormat)
437 OUString hex32(sal_uInt32 nNumber)
439 std::stringstream ss;
440 ss << std::hex << std::setfill(
'0') << std::setw(8) << nNumber;
441 return OUString::createFromAscii(ss.str().c_str());
473 rWriter.
attribute(
"right", OString(
"empty"));
477 rWriter.
attribute(
"bottom", OString(
"empty"));
484 rWriter.
attribute(
"style", convertLineStyleToString(rLineInfo.GetStyle()));
485 rWriter.
attribute(
"width", rLineInfo.GetWidth());
486 rWriter.
attribute(
"dashlen", rLineInfo.GetDashLen());
487 rWriter.
attribute(
"dashcount", rLineInfo.GetDashCount());
488 rWriter.
attribute(
"dotlen", rLineInfo.GetDotLen());
489 rWriter.
attribute(
"dotcount", rLineInfo.GetDotCount());
490 rWriter.
attribute(
"distance", rLineInfo.GetDistance());
491 rWriter.
attribute(
"join", convertLineJoinToString(rLineInfo.GetLineJoin()));
492 rWriter.
attribute(
"cap", convertLineCapToString(rLineInfo.GetLineCap()));
521 maFilter[nActionType] = bShouldFilter;
545 writePoint(rWriter, aMtfMapMode.
GetOrigin());
550 writeSize(rWriter, aMtfSize);
552 for(
size_t nAction = 0; nAction < rMetaFile.
GetActionSize(); ++nAction)
559 OString sCurrentElementTag = convertLineStyleToString(nActionType);
572 auto* pMetaAction =
static_cast<MetaPixelAction*
>(pAction);
574 writePoint(rWriter, pMetaAction->GetPoint());
575 rWriter.
attribute(
"color", convertColorToString(pMetaAction->GetColor()));
584 writePoint(rWriter, pMetaAction->GetPoint());
594 writeEndPoint(rWriter, pMetaLineAction->
GetEndPoint());
596 writeLineInfo(rWriter, pMetaLineAction->
GetLineInfo());
605 writeRectangle(rWriter, pMetaAction->
GetRect());
612 auto pMetaAction =
static_cast<MetaRoundRectAction*
>(pAction);
614 writeRectangle(rWriter, pMetaAction->GetRect());
615 rWriter.
attribute(
"horizontalround", pMetaAction->GetHorzRound());
616 rWriter.
attribute(
"verticalround", pMetaAction->GetVertRound());
623 auto pMetaAction =
static_cast<MetaEllipseAction*
>(pAction);
625 writeRectangle(rWriter, pMetaAction->GetRect());
632 auto pMetaAction =
static_cast<MetaArcAction*
>(pAction);
634 writeRectangle(rWriter, pMetaAction->GetRect());
635 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
636 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
643 auto pMetaAction =
static_cast<MetaPieAction*
>(pAction);
645 writeRectangle(rWriter, pMetaAction->GetRect());
646 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
647 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
654 auto pMetaAction =
static_cast<MetaChordAction*
>(pAction);
656 writeRectangle(rWriter, pMetaAction->GetRect());
657 writeStartPoint(rWriter, pMetaAction->GetStartPoint());
658 writeEndPoint(rWriter, pMetaAction->GetEndPoint());
665 MetaPolyLineAction* pMetaPolyLineAction =
static_cast<MetaPolyLineAction*
>(pAction);
668 writeLineInfo(rWriter, pMetaPolyLineAction->GetLineInfo());
672 for (sal_uInt16
i = 0;
i < aPolygon.GetSize();
i++)
675 writePoint(rWriter, aPolygon[
i]);
677 rWriter.
attribute(
"flags", convertPolygonFlags(aPolygon.GetFlags(i)));
687 MetaPolygonAction* pMetaPolygonAction =
static_cast<MetaPolygonAction*
>(pAction);
692 for (sal_uInt16
i = 0;
i < aPolygon.
GetSize();
i++)
695 writePoint(rWriter, aPolygon[
i]);
707 MetaPolyPolygonAction *
const pMetaPolyPolygonAction =
static_cast<MetaPolyPolygonAction*
>(pAction);
712 for (sal_uInt16 j = 0; j < rPolyPolygon.Count(); ++j)
717 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
720 writePoint(rWriter, rPolygon[
i]);
736 writePoint(rWriter, pMeta->GetPoint());
737 rWriter.
attribute(
"index", pMeta->GetIndex());
738 rWriter.
attribute(
"length", pMeta->GetLen());
740 rWriter.
content(pMeta->GetText());
749 MetaTextArrayAction* pMetaTextArrayAction =
static_cast<MetaTextArrayAction*
>(pAction);
752 sal_Int32
aIndex = pMetaTextArrayAction->GetIndex();
753 sal_Int32 aLength = pMetaTextArrayAction->GetLen();
755 writePoint(rWriter, pMetaTextArrayAction->GetPoint());
759 if (pMetaTextArrayAction->GetDXArray())
762 OUStringBuffer sDxLengthString;
763 for (sal_Int32
i = 0;
i < aLength - aIndex; ++
i)
765 sDxLengthString.append(OUString::number(pMetaTextArrayAction->GetDXArray()[aIndex +
i]));
766 sDxLengthString.append(
" ");
768 rWriter.
content(sDxLengthString.makeStringAndClear());
773 rWriter.
content(pMetaTextArrayAction->GetText());
785 writePoint(rWriter, pMeta->GetPoint());
786 rWriter.
attribute(
"index", pMeta->GetIndex());
787 rWriter.
attribute(
"length", pMeta->GetLen());
788 rWriter.
attribute(
"width", pMeta->GetWidth());
791 rWriter.
content(pMeta->GetText());
802 writeRectangle(rWriter, pMeta->GetRect());
804 rWriter.
content(pMeta->GetText());
808 rWriter.
content(convertDrawTextFlagsToString(pMeta->GetStyle()));
819 writePoint(rWriter, pMeta->GetPoint());
820 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
829 writePoint(rWriter, pMeta->GetPoint());
830 writeSize(rWriter, pMeta->GetSize());
831 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
838 auto pMeta =
static_cast<MetaBmpScalePartAction*
>(pAction);
840 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
841 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
842 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
843 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
844 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
845 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
846 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
847 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
848 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
857 writePoint(rWriter, pMeta->GetPoint());
858 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
859 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
868 writePoint(rWriter, pMeta->GetPoint());
869 writeSize(rWriter, pMeta->GetSize());
870 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
871 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
878 auto pMeta =
static_cast<MetaBmpExScalePartAction*
>(pAction);
880 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
881 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
882 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
883 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
884 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
885 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
886 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
887 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
888 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmapEx().GetBitmap().GetChecksum()));
889 rWriter.
attribute(
"transparenttype", convertBitmapExTransparentType(pMeta->GetBitmapEx().GetTransparentType()));
898 writePoint(rWriter, pMeta->GetPoint());
899 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
900 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
909 writePoint(rWriter, pMeta->GetPoint());
910 writeSize(rWriter, pMeta->GetSize());
911 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
912 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
921 rWriter.
attribute(
"destx", pMeta->GetDestPoint().X());
922 rWriter.
attribute(
"desty", pMeta->GetDestPoint().Y());
923 rWriter.
attribute(
"destwidth", pMeta->GetDestSize().Width());
924 rWriter.
attribute(
"destheight", pMeta->GetDestSize().Height());
925 rWriter.
attribute(
"srcx", pMeta->GetSrcPoint().X());
926 rWriter.
attribute(
"srcy", pMeta->GetSrcPoint().Y());
927 rWriter.
attribute(
"srcwidth", pMeta->GetSrcSize().Width());
928 rWriter.
attribute(
"srcheight", pMeta->GetSrcSize().Height());
929 rWriter.
attribute(
"crc", hex32(pMeta->GetBitmap().GetChecksum()));
930 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
943 writeRectangle(rWriter, pMeta->
GetRect());
957 for (sal_uInt16 j = 0; j < rPolyPolygon.Count(); ++j)
962 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
965 writePoint(rWriter, rPolygon[
i]);
974 const auto& rHatch = pMetaHatchAction->GetHatch();
975 rWriter.
attribute(
"style", convertHatchStyle(rHatch.GetStyle()));
976 rWriter.
attribute(
"color", convertColorToString(rHatch.GetColor()));
977 rWriter.
attribute(
"distance", sal_Int32(rHatch.GetDistance()));
978 rWriter.
attribute(
"angle", sal_Int32(rHatch.GetAngle().get()));
987 const auto* pMetaAction =
static_cast<const MetaWallpaperAction*
>(pAction);
990 writeRectangle(rWriter, pMetaAction->GetRect());
993 const auto& rWallpaper = pMetaAction->GetWallpaper();
995 rWriter.
attribute(
"color", convertColorToString(rWallpaper.GetColor()));
998 rWriter.
attribute(
"style", convertWallpaperStyleToString(eStyle));
1000 if (rWallpaper.IsBitmap())
1012 if (rWallpaper.IsGradient())
1015 Gradient aGradient = rWallpaper.GetGradient();
1016 writeGradient(rWriter, aGradient);
1020 if (rWallpaper.IsRect())
1024 writeRectangle(rWriter, aRect);
1028 rWriter.
attribute(
"fixed", rWallpaper.IsFixed() ?
"true" :
"false");
1029 rWriter.
attribute(
"scrollable", rWallpaper.IsScrollable() ?
"true" :
"false");
1039 const auto* pMetaClipRegionAction =
static_cast<const MetaClipRegionAction*
>(pAction);
1045 tools::Rectangle aRectangle = pMetaClipRegionAction->GetRegion().GetBoundRect();
1046 writeRectangle(rWriter, aRectangle);
1053 MetaISectRectClipRegionAction* pMetaISectRectClipRegionAction =
static_cast<MetaISectRectClipRegionAction*
>(pAction);
1057 writeRectangle(rWriter, aRectangle);
1064 MetaISectRegionClipRegionAction* pMetaISectRegionClipRegionAction =
static_cast<MetaISectRegionClipRegionAction*
>(pAction);
1070 tools::Rectangle aRectangle = pMetaISectRegionClipRegionAction->GetRegion().GetBoundRect();
1071 writeRectangle(rWriter, aRectangle);
1083 rWriter.
attribute(
"color", convertColorToString(pMetaLineColorAction->
GetColor()));
1093 rWriter.
attribute(
"color", convertColorToString(pMetaFillColorAction->
GetColor()));
1100 MetaTextColorAction* pMetaTextColorAction =
static_cast<MetaTextColorAction*
>(pAction);
1103 rWriter.
attribute(
"color", convertColorToString(pMetaTextColorAction->GetColor()));
1110 MetaTextFillColorAction* pMetaTextFillColorAction =
static_cast<MetaTextFillColorAction*
>(pAction);
1113 rWriter.
attribute(
"color", convertColorToString(pMetaTextFillColorAction->GetColor()));
1115 if (pMetaTextFillColorAction->IsSetting())
1124 MetaTextAlignAction* pMetaTextAlignAction =
static_cast<MetaTextAlignAction*
>(pAction);
1126 OUString sAlign = convertTextAlignToString(pMetaTextAlignAction->GetTextAlign());
1127 if (!sAlign.isEmpty())
1135 const MetaMapModeAction* pMeta =
static_cast<MetaMapModeAction*
>(pAction);
1136 MapMode aMapMode = pMeta->GetMapMode();
1139 writePoint(rWriter, aMapMode.
GetOrigin());
1148 MetaFontAction* pMetaFontAction =
static_cast<MetaFontAction*
>(pAction);
1151 vcl::Font aFont = pMetaFontAction->GetFont();
1169 MetaPushAction* pMetaPushAction =
static_cast<MetaPushAction*
>(pAction);
1172 rWriter.
attribute(
"flags", collectPushFlags(pMetaPushAction->GetFlags()));
1184 MetaRasterOpAction* pMetaRasterOpAction =
static_cast<MetaRasterOpAction*
>(pAction);
1189 rWriter.
attribute(
"operation", convertRopToString(pMetaRasterOpAction->GetRasterOp()));
1204 for (sal_uInt16 j = 0; j < rPolyPolygon.Count(); ++j)
1209 for (sal_uInt16
i = 0;
i < rPolygon.
GetSize(); ++
i)
1212 writePoint(rWriter, rPolygon[
i]);
1228 auto* pMeta =
static_cast<MetaRefPointAction*
>(pAction);
1230 writePoint(rWriter, pMeta->GetRefPoint());
1231 rWriter.
attribute(
"set", pMeta->IsSetting() ?
"true" :
"false");
1238 auto* pMeta =
static_cast<MetaTextLineColorAction*
>(pAction);
1240 rWriter.
attribute(
"color", convertColorToString(pMeta->GetColor()));
1249 writePoint(rWriter, pMeta->GetStartPoint());
1250 rWriter.
attribute(
"width", pMeta->GetWidth());
1251 rWriter.
attribute(
"strikeout", convertFontStrikeoutToString(pMeta->GetStrikeout()));
1252 rWriter.
attribute(
"underline", convertFontLineStyleToString(pMeta->GetUnderline()));
1253 rWriter.
attribute(
"overline", convertFontLineStyleToString(pMeta->GetOverline()));
1262 writePoint(rWriter, pMeta->GetPoint());
1263 writeSize(rWriter, pMeta->GetSize());
1264 rWriter.
attribute(
"transparent", pMeta->IsTransparent() ?
"true" :
"false");
1267 writeGradient(rWriter, pMeta->GetGradient());
1271 writeXml(pMeta->GetGDIMetaFile(), rWriter);
1284 const auto* pMetaAction =
static_cast<MetaOverlineColorAction*
>(pAction);
1286 rWriter.
attribute(
"color", convertColorToString(pMetaAction->GetColor()));
1300 if (!pMetaCommentAction->
GetComment().isEmpty())
1314 rWriter.
attribute(
"note", OString(
"not implemented in xml dump"));
OUString AsRGBHexString() const
PixelFormat
Pixel format of the bitmap in bits per pixel.
const Fraction & GetScaleX() const
GradientStyle GetStyle() const
const OUString & GetFamilyName() const
const OUString & GetStyleName() const
sal_uInt16 GetOfsY() const
FontStrikeout_FORCE_EQUAL_SIZE
sal_uInt16 GetBorder() const
BitmapChecksum GetChecksum() const
const Fraction & GetScaleY() const
FontWeight_FORCE_EQUAL_SIZE
FontLineStyle_FORCE_EQUAL_SIZE
UNDERLYING_TYPE get() const
vcl::PixelFormat getPixelFormat() const
sal_uInt16 GetOfsX() const
tools::Long Width() const
TransparentType GetTransparentType() const
const Size & GetFontSize() const
sal_uInt16 GetEndIntensity() const
MapUnit GetMapUnit() const
const Color & GetFillColor() const
sal_uInt16 GetSteps() const
const Color & GetStartColor() const
Bitmap GetBitmap(Color aTransparentReplaceColor) const
const Color & GetColor() const
Degree10 GetAngle() const
std::deque< AttacherIndex_Impl > aIndex
const Color & GetEndColor() const
TextAlign_FORCE_EQUAL_SIZE
tools::Long Height() const
Degree10 GetOrientation() const
const Point & GetOrigin() const
const Size & GetSizePixel() const
sal_uInt16 GetStartIntensity() const