Eric Pouech : winhelp: Emit the proper RTF stream for a metafile to RichEdit.

Alexandre Julliard julliard at winehq.org
Fri Apr 25 08:10:51 CDT 2008


Module: wine
Branch: master
Commit: 5da401950c65a250af986f1469515313cca2ef47
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=5da401950c65a250af986f1469515313cca2ef47

Author: Eric Pouech <eric.pouech at orange.fr>
Date:   Thu Apr 24 22:06:34 2008 +0200

winhelp: Emit the proper RTF stream for a metafile to RichEdit.

---

 programs/winhelp/hlpfile.c |   38 +++++++++++++++++++++++++++++++++++++-
 1 files changed, 37 insertions(+), 1 deletions(-)

diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index 6417c90..f5935a1 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -806,7 +806,43 @@ done:
  */
 static BOOL     HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack)
 {
-    return TRUE;
+    BYTE*               ptr;
+    unsigned long       size, csize;
+    unsigned long       off, hsoff;
+    BYTE*               bits;
+    char                tmp[256];
+    unsigned            mm;
+    BOOL                ret;
+
+    WINE_TRACE("Loading metafile\n");
+
+    ptr = beg + 2; /* for type and pack */
+
+    mm = fetch_ushort(&ptr); /* mapping mode */
+    sprintf(tmp, "{\\pict\\wmetafile%d\\picw%d\\pich%d",
+            mm, GET_USHORT(ptr, 0), GET_USHORT(ptr, 2));
+    if (!HLPFILE_RtfAddControl(rd, tmp)) return FALSE;
+    ptr += 4;
+
+    size = fetch_ulong(&ptr); /* decompressed size */
+    csize = fetch_ulong(&ptr); /* compressed size */
+    fetch_ulong(&ptr); /* hotspot size */
+    off = GET_UINT(ptr, 0);
+    hsoff = GET_UINT(ptr, 4);
+    ptr += 8;
+
+    WINE_TRACE("sz=%lu csz=%lu offs=%lu/%u,%lu\n",
+               size, csize, off, ptr - beg, hsoff);
+
+    bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack);
+    if (!bits) return FALSE;
+
+    ret = HLPFILE_RtfAddHexBytes(rd, bits, size) &&
+        HLPFILE_RtfAddControl(rd, "}");
+
+    if (bits != beg + off) HeapFree(GetProcessHeap(), 0, bits);
+
+    return ret;
 }
 
 /******************************************************************




More information about the wine-cvs mailing list