summaryrefslogtreecommitdiff
path: root/vcl/source/filter/wmf/enhwmf.cxx
diff options
context:
space:
mode:
authorBartosz Kosiorek <gang65@poczta.onet.pl>2017-03-31 22:30:33 +0200
committerJulien Nabet <serval2412@yahoo.fr>2017-04-01 08:52:06 +0000
commit56ee0a940915e882c9eaa5c365c10231f328ff93 (patch)
treee40b710f972d2c109104946ed3cfd31bf75b01f2 /vcl/source/filter/wmf/enhwmf.cxx
parent4c16651356614b66256d80fd89b8866543f53871 (diff)
Get rid of magic numbers
Change-Id: Ia9ccacc3a21c837e69e3901e262cdd052e4be3f3 Reviewed-on: https://gerrit.libreoffice.org/35982 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Julien Nabet <serval2412@yahoo.fr>
Diffstat (limited to 'vcl/source/filter/wmf/enhwmf.cxx')
-rw-r--r--vcl/source/filter/wmf/enhwmf.cxx45
1 files changed, 30 insertions, 15 deletions
diff --git a/vcl/source/filter/wmf/enhwmf.cxx b/vcl/source/filter/wmf/enhwmf.cxx
index d07e96fe394e..0d8a9b0d1cd1 100644
--- a/vcl/source/filter/wmf/enhwmf.cxx
+++ b/vcl/source/filter/wmf/enhwmf.cxx
@@ -104,7 +104,12 @@ using namespace std;
#define EMR_SELECTCLIPPATH 67
#define EMR_ABORTPATH 68
-#define EMR_GDICOMMENT 70
+#define EMR_COMMENT 70 // Contains arbitrary private data.
+// Comment Identifiers:
+#define EMR_COMMENT_EMFPLUS 0x2B464D45 // Contains embedded EMF+ records.
+#define EMR_COMMENT_EMFSPOOL 0x00000000 // Contains embedded EMFSPOOL records.
+#define EMR_COMMENT_PUBLIC 0x43494447 // Specify extensions to EMF processing.
+
#define EMR_FILLRGN 71
#define EMR_FRAMERGN 72
#define EMR_INVERTRGN 73
@@ -240,7 +245,7 @@ record_type_name(sal_uInt32 nRecType)
case EMR_WIDENPATH: return "WIDENPATH";
case EMR_SELECTCLIPPATH: return "SELECTCLIPPATH";
case EMR_ABORTPATH: return "ABORTPATH";
- case EMR_GDICOMMENT: return "GDICOMMENT";
+ case EMR_COMMENT: return "COMMENT";
case EMR_FILLRGN: return "FILLRGN";
case EMR_FRAMERGN: return "FRAMERGN";
case EMR_INVERTRGN: return "INVERTRGN";
@@ -454,8 +459,10 @@ void EnhWMFReader::ReadEMFPlusComment(sal_uInt32 length, bool& bHaveDC)
SAL_INFO ("vcl.emf", "\t\tEMF+ record type: " << std::hex << type << std::dec);
- // GetDC
- if( type == 16388 ) {
+ // Get Device Context
+ // TODO We should use EmfPlusRecordType::GetDC instead
+ if( type == 0x4004 )
+ {
bHaveDC = true;
SAL_INFO ("vcl.emf", "\t\tEMF+ lock DC (device context)");
}
@@ -675,7 +682,7 @@ bool EnhWMFReader::ReadEnhWMF()
SAL_INFO ("vcl.emf", "0x" << std::hex << (nNextPos - nRecSize) << "-0x" << nNextPos << " " << record_type_name(nRecType) << " size: " << nRecSize << std::dec);
- if( bEnableEMFPlus && nRecType == EMR_GDICOMMENT ) {
+ if( bEnableEMFPlus && nRecType == EMR_COMMENT ) {
sal_uInt32 length;
pWMF->ReadUInt32( length );
@@ -683,22 +690,30 @@ bool EnhWMFReader::ReadEnhWMF()
SAL_INFO("vcl.emf", "\tGDI comment, length: " << length);
if( pWMF->good() && length >= 4 && length <= pWMF->remainingSize() ) {
- sal_uInt32 id;
+ sal_uInt32 nCommentId;
- pWMF->ReadUInt32( id );
+ pWMF->ReadUInt32( nCommentId );
- SAL_INFO ("vcl.emf", "\t\tbegin " << (char)(id & 0xff) << (char)((id & 0xff00) >> 8) << (char)((id & 0xff0000) >> 16) << (char)((id & 0xff000000) >> 24) << " id: 0x" << std::hex << id << std::dec);
+ SAL_INFO ("vcl.emf", "\t\tbegin " << (char)(nCommentId & 0xff) << (char)((nCommentId & 0xff00) >> 8) << (char)((nCommentId & 0xff0000) >> 16) << (char)((nCommentId & 0xff000000) >> 24) << " id: 0x" << std::hex << nCommentId << std::dec);
- // EMF+ comment (FIXME: BE?)
- if( id == 0x2B464D45 && nRecSize >= 12 )
+ if( nCommentId == EMR_COMMENT_EMFPLUS && nRecSize >= 12 )
+ {
// [MS-EMF] 2.3.3: DataSize includes both CommentIdentifier and CommentRecordParm fields.
// We have already read 4-byte CommentIdentifier, so reduce length appropriately
ReadEMFPlusComment( length-4, bHaveDC );
- // GDIC comment, doesn't do anything useful yet
- else if( id == 0x43494447 && nRecSize >= 12 ) {
+ }
+ else if( nCommentId == EMR_COMMENT_PUBLIC && nRecSize >= 12 )
+ {
// TODO: ReadGDIComment()
- } else {
- SAL_INFO ("vcl.emf", "\t\tunknown id: 0x" << std::hex << id << std::dec);
+ }
+ else if( nCommentId == EMR_COMMENT_EMFSPOOL && nRecSize >= 12 )
+ {
+ // TODO Implement reading EMFSPOOL comment
+
+ }
+ else
+ {
+ SAL_INFO ("vcl.emf", "\t\tunknown id: 0x" << std::hex << nCommentId << std::dec);
}
}
}
@@ -1800,7 +1815,7 @@ bool EnhWMFReader::ReadEnhWMF()
case EMR_ALPHADIBBLEND : SAL_INFO("vcl.emf", "not implemented 'AlphaDibBlend'"); break;
case EMR_SETTEXTJUSTIFICATION : SAL_INFO("vcl.emf", "not implemented 'SetTextJustification'"); break;
- case EMR_GDICOMMENT :
+ case EMR_COMMENT :
case EMR_HEADER : // has already been read at ReadHeader()
break;