Added missing dependency for 16-bit resource files.
[wine] / graphics / win16drv / text.c
1 /*
2  * win16 driver text functions
3  *
4  * Copyright 1996 John Harvey
5  *           1998 Huw Davies
6  */
7
8 #include <stdlib.h>
9 #include "win16drv.h"
10 #include "gdi.h"
11 #include "debugtools.h"
12 #include "winbase.h"
13 #include "wine/winestring.h"
14
15 DEFAULT_DEBUG_CHANNEL(win16drv);
16
17 /***********************************************************************
18  *           WIN16DRV_ExtTextOut
19  */
20 BOOL WIN16DRV_ExtTextOut( DC *dc, INT x, INT y, UINT flags,
21                            const RECT *lprect, LPCWSTR wstr, UINT count,
22                            const INT *lpDx )
23 {
24     WIN16DRV_PDEVICE *physDev = (WIN16DRV_PDEVICE *)dc->physDev;
25     BOOL bRet = 1;
26     RECT16       clipRect;
27     RECT16       opaqueRect;
28     RECT16      *lpOpaqueRect = NULL; 
29     WORD wOptions = 0;
30     WORD wCount = count;
31     INT16 width;
32     char *str;
33     DWORD dwRet;
34
35     if (count == 0)
36         return FALSE;
37
38     TRACE("%04x %d %d %x %p %s %p\n",
39           dc->hSelf, x, y, flags, lprect, debugstr_wn(wstr, count), lpDx);
40
41     str = HeapAlloc( GetProcessHeap(), 0, count+1 );
42     lstrcpynWtoA( str, wstr, count+1 );
43
44     clipRect.left = 0;
45     clipRect.top = 0;
46         
47     clipRect.right = dc->devCaps->horzRes;
48     clipRect.bottom = dc->devCaps->vertRes;
49     if (lprect) {
50         opaqueRect.left = lprect->left;
51         opaqueRect.top = lprect->top;
52         opaqueRect.right = lprect->right;
53         opaqueRect.bottom = lprect->bottom;
54         lpOpaqueRect = &opaqueRect;
55     }
56         
57     TRACE("textalign = %d\n", dc->textAlign);
58
59     if (dc->textAlign & TA_UPDATECP) {
60         x = dc->CursPosX;
61         y = dc->CursPosY;
62     }
63
64     x = XLPTODP( dc, x );
65     y = YLPTODP( dc, y );
66
67     dwRet = PRTDRV_ExtTextOut(physDev->segptrPDEVICE, 0, 0, 
68                               NULL, str, -count,  physDev->FontInfo, 
69                               win16drv_SegPtr_DrawMode,
70                               win16drv_SegPtr_TextXForm,
71                               NULL, NULL, 0);
72
73     width = LOWORD(dwRet);
74
75     switch( dc->textAlign & (TA_LEFT | TA_RIGHT | TA_CENTER) ) {
76     case TA_LEFT:
77         if (dc->textAlign & TA_UPDATECP)
78             dc->CursPosX = XDPTOLP( dc, x + width );
79         break;
80     case TA_RIGHT:
81         x -= width;
82         if (dc->textAlign & TA_UPDATECP)
83             dc->CursPosX = XDPTOLP( dc, x );
84         break;
85     case TA_CENTER:
86         x -= width / 2;
87         break;
88     }
89
90     switch( dc->textAlign & (TA_TOP | TA_BOTTOM | TA_BASELINE) ) {
91     case TA_TOP:
92         break;
93     case TA_BOTTOM:
94         y -= physDev->FontInfo->dfPixHeight;
95         break;
96     case TA_BASELINE:
97         y -= physDev->FontInfo->dfAscent;
98         break;    
99     }
100
101     dwRet = PRTDRV_ExtTextOut(physDev->segptrPDEVICE, 
102                               x, y, &clipRect, str, wCount,
103                               physDev->FontInfo, win16drv_SegPtr_DrawMode, 
104                               win16drv_SegPtr_TextXForm, NULL, lpOpaqueRect,
105                               wOptions);
106
107     HeapFree( GetProcessHeap(), 0, str );
108     return bRet;
109 }
110
111
112
113
114
115
116
117
118