DrawText upgrade - step 1

Medland, Bill Bill.Medland at accpac.com
Tue Jan 15 13:40:32 CST 2002


-------------- next part --------------
Bill Medland (medbi01 at accpac.com)
First stage of DrawText upgrade.
1. Rearrange code into three distinct areas; DrawText, GrayString, TabbedText
2. Remove unused macros
3. Modify treatment of Tab arguments to fit with observed behaviour.
   e.g. DrawTextEx with DT_TABSTOP but null dtp will not take the setting
   from the flags.  Also only uses bits 15 to 8, not the higher bits.

Index: wine/dlls/user/text.c
===================================================================
RCS file: /home/wine/wine/dlls/user/text.c,v
retrieving revision 1.17
diff -u -r1.17 text.c
--- wine/dlls/user/text.c	2002/01/07 21:16:47	1.17
+++ wine/dlls/user/text.c	2002/01/15 17:10:32
@@ -3,6 +3,10 @@
  *
  * Copyright 1993, 1994 Alexandre Julliard
  *
+ * Contains 
+ *   1.  DrawText functions
+ *   2.  GrayString functions
+ *   3.  TabbedText functions
  */
 
 #include <string.h>
@@ -19,6 +23,11 @@
 
 DEFAULT_DEBUG_CHANNEL(text);
 
+/*********************************************************************
+ *
+ *            DrawText functions
+ */
+
 #define TAB     9
 #define LF     10
 #define CR     13
@@ -34,31 +43,12 @@
 static const WCHAR ELLIPSISW[] = {'.','.','.', 0};
 static const WCHAR FORWARD_SLASHW[] = {'/', 0};
 static const WCHAR BACK_SLASHW[] = {'\\', 0};
-
-#define SWAP_INT(a,b)  { int t = a; a = b; b = t; }
 
-static int tabstop = 8;
+static int tabstop;
 static int tabwidth;
 static int spacewidth;
 static int prefix_offset;
 
-/* ### start build ### */
-extern WORD CALLBACK TEXT_CallTo16_word_wlw(GRAYSTRINGPROC16,WORD,LONG,WORD);
-/* ### stop build ### */
-
-struct gray_string_info
-{
-    GRAYSTRINGPROC16 proc;
-    LPARAM           param;
-};
-
-/* callback for 16-bit gray string proc */
-static BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len )
-{
-    const struct gray_string_info *info = (struct gray_string_info *)param;
-    return TEXT_CallTo16_word_wlw( info->proc, hdc, info->param, len );
-}
-
 
 /*********************************************************************
  *  Return next line of text from a string.
@@ -221,25 +211,6 @@
 
 
 /***********************************************************************
- *           DrawText    (USER.85)
- */
-INT16 WINAPI DrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags )
-{
-    INT16 ret;
-
-    if (rect)
-    {
-        RECT rect32;
-        CONV_RECT16TO32( rect, &rect32 );
-        ret = DrawTextA( hdc, str, count, &rect32, flags );
-        CONV_RECT32TO16( &rect32, rect );
-    }
-    else ret = DrawTextA( hdc, str, count, NULL, flags);
-    return ret;
-}
-
-
-/***********************************************************************
  *           DrawTextExW    (USER32.@)
  */
 #define MAX_STATIC_BUFFER 1024
@@ -284,8 +255,7 @@
         dtp->uiLengthDrawn = 0;     /* This param RECEIVES number of chars processed */
     }
 
-    if (flags & DT_TABSTOP)
-	tabstop = dtp ? dtp->iTabLength : flags >> 8;
+    tabstop = ((flags & DT_TABSTOP) && dtp) ? dtp->iTabLength : 8;
 
     if (flags & DT_EXPANDTABS)
     {
@@ -482,18 +452,75 @@
  */
 INT WINAPI DrawTextW( HDC hdc, LPCWSTR str, INT count, LPRECT rect, UINT flags )
 {
-    return DrawTextExW(hdc, (LPWSTR)str, count, rect, flags, NULL);
+    DRAWTEXTPARAMS dtp;
+
+    memset (&dtp, 0, sizeof(dtp));
+    if (flags & DT_TABSTOP)
+    {
+        dtp.iTabLength = (flags >> 8) && 0xff;
+        flags &= 0xffff00ff;
+    }
+    return DrawTextExW(hdc, (LPWSTR)str, count, rect, flags, &dtp);
 }
 
 /***********************************************************************
  *           DrawTextA    (USER32.@)
  */
 INT WINAPI DrawTextA( HDC hdc, LPCSTR str, INT count, LPRECT rect, UINT flags )
+{
+    DRAWTEXTPARAMS dtp;
+
+    memset (&dtp, 0, sizeof(dtp));
+    if (flags & DT_TABSTOP)
+    {
+        dtp.iTabLength = (flags >> 8) && 0xff;
+        flags &= 0xffff00ff;
+    }
+    return DrawTextExA( hdc, (LPSTR)str, count, rect, flags, &dtp );
+}
+
+/***********************************************************************
+ *           DrawText    (USER.85)
+ */
+INT16 WINAPI DrawText16( HDC16 hdc, LPCSTR str, INT16 count, LPRECT16 rect, UINT16 flags )
 {
-    return DrawTextExA( hdc, (LPSTR)str, count, rect, flags, NULL );
+    INT16 ret;
+
+    if (rect)
+    {
+        RECT rect32;
+        CONV_RECT16TO32( rect, &rect32 );
+        ret = DrawTextA( hdc, str, count, &rect32, flags );
+        CONV_RECT32TO16( &rect32, rect );
+    }
+    else ret = DrawTextA( hdc, str, count, NULL, flags);
+    return ret;
 }
 
+
 /***********************************************************************
+ *
+ *           GrayString functions
+ */
+
+/* ### start build ### */
+extern WORD CALLBACK TEXT_CallTo16_word_wlw(GRAYSTRINGPROC16,WORD,LONG,WORD);
+/* ### stop build ### */
+
+struct gray_string_info
+{
+    GRAYSTRINGPROC16 proc;
+    LPARAM           param;
+};
+
+/* callback for 16-bit gray string proc */
+static BOOL CALLBACK gray_string_callback( HDC hdc, LPARAM param, INT len )
+{
+    const struct gray_string_info *info = (struct gray_string_info *)param;
+    return TEXT_CallTo16_word_wlw( info->proc, hdc, info->param, len );
+}
+
+/***********************************************************************
  *           TEXT_GrayString
  *
  * FIXME: The call to 16-bit code only works because the wine GDI is a 16-bit
@@ -636,6 +663,11 @@
     return TEXT_GrayString(hdc, hbr, gsprc, lParam, cch, x, y, cx, cy,
                            TRUE, TRUE);
 }
+
+/***********************************************************************
+ *
+ *           TabbedText functions
+ */
 
 /***********************************************************************
  *           TEXT_TabbedTextOut


More information about the wine-patches mailing list