[PATCH 27/45] [WinHelp]: added support for richedit tabs in paragraph format
Eric Pouech
eric.pouech at orange.fr
Sun Mar 23 04:20:03 CDT 2008
A+
---
programs/winhelp/hlpfile.c | 35 ++++++++++++++++++++++++++++++-----
programs/winhelp/hlpfile.h | 6 ++++++
2 files changed, 36 insertions(+), 5 deletions(-)
diff --git a/programs/winhelp/hlpfile.c b/programs/winhelp/hlpfile.c
index f5ac241..4f02f9a 100644
--- a/programs/winhelp/hlpfile.c
+++ b/programs/winhelp/hlpfile.c
@@ -909,6 +909,18 @@ static HLPFILE_LINK* alloc_link(struct RtfData* rd, int cookie,
return link;
}
+unsigned HLPFILE_HalfPointsToTwips(unsigned pts)
+{
+ static unsigned logPxY;
+ if (!logPxY)
+ {
+ HDC hdc = GetDC(NULL);
+ logPxY = GetDeviceCaps(hdc, LOGPIXELSY);
+ ReleaseDC(NULL, hdc);
+ }
+ return MulDiv(pts, 72 * 10, logPxY);
+}
+
/***********************************************************************
*
* HLPFILE_BrowseParagraph
@@ -989,13 +1001,26 @@ BOOL HLPFILE_BrowseParagraph(HLPFILE *hlpfile, struct RtfData* rd, BYTE *buf, BY
if (bits & 0x0100) format += 3;
if (bits & 0x0200)
{
- int ntab = fetch_short(&format);
- unsigned short ts;
+ int i, ntab = fetch_short(&format);
+ unsigned tab, ts;
+ const char* kind;
- while (ntab-- > 0)
+ for (i = 0; i < ntab; i++)
{
- ts = fetch_ushort(&format);
- if (ts & 0x4000) fetch_ushort(&format);
+ tab = fetch_ushort(&format);
+ ts = (tab & 0x4000) ? fetch_ushort(&format) : 0 /* left */;
+ switch (ts)
+ {
+ default: WINE_FIXME("Unknown tab style %x\n", ts);
+ /* fall through */
+ case 0: kind = ""; break;
+ case 1: kind = "\\tqr"; break;
+ case 2: kind = "\\tqc"; break;
+ }
+ /* FIXME: do kind */
+ sprintf(tmp, "%s\\tx%d",
+ kind, HLPFILE_HalfPointsToTwips(tab & 0x3FFF));
+ if (!HLPFILE_RtfAddControl(rd, tmp)) goto done;
}
}
/* 0x0400, 0x0800 and 0x1000 don't need space */
diff --git a/programs/winhelp/hlpfile.h b/programs/winhelp/hlpfile.h
index 0d2d0fc..e607daa 100644
--- a/programs/winhelp/hlpfile.h
+++ b/programs/winhelp/hlpfile.h
@@ -156,6 +156,12 @@ HLPFILE_PAGE* HLPFILE_PageByMap(HLPFILE* hlpfile, LONG lMap);
HLPFILE_PAGE* HLPFILE_PageByOffset(HLPFILE* hlpfile, LONG offset);
LONG HLPFILE_Hash(LPCSTR lpszContext);
void HLPFILE_FreeHlpFile(HLPFILE*);
+unsigned HLPFILE_HalfPointsToTwips(unsigned pts);
+
+static inline unsigned HLPFILE_PointsToTwips(unsigned pts)
+{
+ return HLPFILE_HalfPointsToTwips(2 * pts);
+}
void* HLPFILE_BPTreeSearch(BYTE*, const void*, HLPFILE_BPTreeCompare);
void HLPFILE_BPTreeEnum(BYTE*, HLPFILE_BPTreeCallback cb, void *cookie);
More information about the wine-patches
mailing list