ReactOS 0.4.15-dev-7674-gc0b4db1
text.c File Reference
#include <precomp.h>
#include <debug.h>
Include dependency graph for text.c:

Go to the source code of this file.

Macros

#define NDEBUG
 

Functions

BOOL WINAPI TextOutA (_In_ HDC hdc, _In_ INT nXStart, _In_ INT nYStart, _In_reads_(cchString) LPCSTR lpString, _In_ INT cchString)
 
BOOL WINAPI TextOutW (_In_ HDC hdc, _In_ INT nXStart, _In_ INT nYStart, _In_reads_(cchString) LPCWSTR lpString, _In_ INT cchString)
 
BOOL WINAPI PolyTextOutA (_In_ HDC hdc, _In_reads_(cStrings) const POLYTEXTA *pptxt, _In_ INT cStrings)
 
BOOL WINAPI PolyTextOutW (_In_ HDC hdc, _In_reads_(cStrings) const POLYTEXTW *pptxt, _In_ INT cStrings)
 
DWORD WINAPI GdiGetCodePage (_In_ HDC hdc)
 
INT WINAPI GetTextCharacterExtra (_In_ HDC hdc)
 
INT WINAPI GetTextCharset (_In_ HDC hdc)
 
BOOL WINAPI GetTextMetricsA (_In_ HDC hdc, _Out_ LPTEXTMETRICA lptm)
 
BOOL WINAPI GetTextMetricsW (_In_ HDC hdc, _Out_ LPTEXTMETRICW lptm)
 
BOOL APIENTRY GetTextExtentPointA (_In_ HDC hdc, _In_reads_(cchString) LPCSTR lpString, _In_ INT cchString, _Out_ LPSIZE lpsz)
 
BOOL APIENTRY GetTextExtentPointW (_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpString, _In_ INT cchString, _Out_ LPSIZE lpsz)
 
BOOL WINAPI GetTextExtentExPointW (_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpszString, _In_ INT cchString, _In_ INT nMaxExtent, _Out_opt_ LPINT lpnFit, _Out_writes_to_opt_(cchString, *lpnFit) LPINT lpnDx, _Out_ LPSIZE lpSize)
 
BOOL WINAPI GetTextExtentExPointWPri (_In_ HDC hdc, _In_reads_(cwc) LPCWSTR lpwsz, _In_ INT cwc, _In_ INT dxMax, _Out_opt_ LPINT pcCh, _Out_writes_to_opt_(cwc, *pcCh) LPINT pdxOut, _In_ LPSIZE psize)
 
BOOL WINAPI GetTextExtentExPointA (_In_ HDC hdc, _In_reads_(cchString) LPCSTR lpszStr, _In_ INT cchString, _In_ INT nMaxExtent, _Out_opt_ LPINT lpnFit, _Out_writes_to_opt_(cchString, *lpnFit) LPINT lpnDx, _Out_ LPSIZE lpSize)
 
BOOL WINAPI GetTextExtentPoint32A (_In_ HDC hdc, _In_reads_(cchString) LPCSTR lpString, _In_ INT cchString, _Out_ LPSIZE lpSize)
 
BOOL WINAPI GetTextExtentPoint32W (_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpString, _In_ int cchString, _Out_ LPSIZE lpSize)
 
BOOL WINAPI GetTextExtentExPointI (_In_ HDC hdc, _In_reads_(cgi) LPWORD pgiIn, _In_ INT cgi, _In_ INT nMaxExtent, _Out_opt_ LPINT lpnFit, _Out_writes_to_opt_(cwchString, *lpnFit) LPINT lpnDx, _Out_ LPSIZE lpSize)
 
BOOL WINAPI GetTextExtentPointI (_In_ HDC hdc, _In_reads_(cgi) LPWORD pgiIn, _In_ int cgi, _Out_ LPSIZE lpSize)
 
BOOL WINAPI ExtTextOutA (_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ UINT fuOptions, _In_opt_ const RECT *lprc, _In_reads_opt_(cch) LPCSTR lpString, _In_ UINT cch, _In_reads_opt_(cch) const INT *lpDx)
 
BOOL WINAPI ExtTextOutW (_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ UINT fuOptions, _In_opt_ const RECT *lprc, _In_reads_opt_(cwc) LPCWSTR lpString, _In_ UINT cwc, _In_reads_opt_(cwc) const INT *lpDx)
 
INT WINAPI GetTextFaceW (_In_ HDC hdc, _In_ INT cwcMax, _Out_writes_to_opt_(cwcMax, return) LPWSTR pFaceName)
 
INT WINAPI GetTextFaceA (_In_ HDC hdc, _In_ INT cchMax, _Out_writes_to_opt_(cchMax, return) LPSTR lpName)
 
INT WINAPI GetTextFaceAliasW (_In_ HDC hdc, _In_ INT cwcMax, _Out_writes_to_opt_(cwcMax, return) LPWSTR pszOut)
 
BOOL WINAPI GetFontResourceInfoW (_In_z_ LPCWSTR lpFileName, _Inout_ DWORD *pdwBufSize, _Out_writes_to_opt_(*pdwBufSize, 1) PVOID lpBuffer, _In_ DWORD dwType)
 
INT WINAPI SetTextCharacterExtra (_In_ HDC hdc, _In_ INT nCharExtra)
 
UINT WINAPI GetTextAlign (_In_ HDC hdc)
 
COLORREF WINAPI GetTextColor (_In_ HDC hdc)
 
UINT WINAPI SetTextAlign (_In_ HDC hdc, _In_ UINT fMode)
 
COLORREF WINAPI SetTextColor (_In_ HDC hdc, _In_ COLORREF crColor)
 
BOOL WINAPI SetTextJustification (_In_ HDC hdc, _In_ INT nBreakExtra, _In_ INT nBreakCount)
 
UINT WINAPI GetStringBitmapA (_In_ HDC hdc, _In_ LPSTR psz, _In_ BOOL bDoCall, _In_ UINT cj, _Out_writes_(cj) BYTE *lpSB)
 
UINT WINAPI GetStringBitmapW (_In_ HDC hdc, _In_ LPWSTR pwsz, _In_ BOOL bDoCall, _In_ UINT cj, _Out_writes_(cj) BYTE *lpSB)
 
BOOL WINAPI GetETM (_In_ HDC hdc, _Out_ EXTTEXTMETRIC *petm)
 

Variables

static BOOL bBypassETOWMF = FALSE
 

Macro Definition Documentation

◆ NDEBUG

#define NDEBUG

Definition at line 11 of file text.c.

Function Documentation

◆ ExtTextOutA()

BOOL WINAPI ExtTextOutA ( _In_ HDC  hdc,
_In_ INT  x,
_In_ INT  y,
_In_ UINT  fuOptions,
_In_opt_ const RECT lprc,
_In_reads_opt_(cch) LPCSTR  lpString,
_In_ UINT  cch,
_In_reads_opt_(cch) const INT lpDx 
)

Definition at line 454 of file text.c.

463{
464 ANSI_STRING StringA;
465 UNICODE_STRING StringU;
466 BOOL ret;
467
468 if (fuOptions & ETO_GLYPH_INDEX)
469 return ExtTextOutW(hdc, x, y, fuOptions, lprc, (LPCWSTR)lpString, cch, lpDx);
470
471 StringA.Buffer = (PCHAR)lpString;
472 StringA.Length = StringA.MaximumLength = cch;
473 RtlAnsiStringToUnicodeString(&StringU, &StringA, TRUE);
474
475 if (StringU.Length != StringA.Length * sizeof(WCHAR))
476 DPRINT1("ERROR: Should convert lpDx properly!\n");
477
478 ret = ExtTextOutW(hdc, x, y, fuOptions, lprc, StringU.Buffer, cch, lpDx);
479
480 RtlFreeUnicodeString(&StringU);
481
482 return ret;
483}
#define DPRINT1
Definition: precomp.h:8
#define TRUE
Definition: types.h:120
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
#define PCHAR
Definition: match.c:90
HDC hdc
Definition: main.c:9
static DWORD DWORD void LPSTR DWORD cch
Definition: str.c:202
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
USHORT MaximumLength
Definition: env_spec_w32.h:377
int ret
BOOL WINAPI ExtTextOutW(_In_ HDC hdc, _In_ int x, _In_ int y, _In_ UINT options, _In_opt_ const RECT *lprect, _In_reads_opt_(c) LPCWSTR lpString, _In_ UINT c, _In_reads_opt_(c) const INT *lpDx)
_In_ int _Inout_ LPRECT lprc
Definition: winuser.h:4465
__wchar_t WCHAR
Definition: xmlstorage.h:180
const WCHAR * LPCWSTR
Definition: xmlstorage.h:185

Referenced by PolyTextOutA().

◆ ExtTextOutW()

BOOL WINAPI ExtTextOutW ( _In_ HDC  hdc,
_In_ INT  x,
_In_ INT  y,
_In_ UINT  fuOptions,
_In_opt_ const RECT lprc,
_In_reads_opt_(cwc) LPCWSTR  lpString,
_In_ UINT  cwc,
_In_reads_opt_(cwc) const INT lpDx 
)

Definition at line 492 of file text.c.

501{
502 PDC_ATTR pdcattr;
503
504 // Need both, should return a parameter error? No they don't!
505 if ( !lpDx && fuOptions & ETO_PDY )
506 return FALSE;
507
508 // Now sorting out rectangle.
509
510 // Here again, need both.
511 if ( lprc && !(fuOptions & (ETO_CLIPPED|ETO_OPAQUE)) )
512 {
513 lprc = NULL; // No flags, no rectangle.
514 }
515 else if (!lprc) // No rectangle, force clear flags if set and continue.
516 {
517 fuOptions &= ~(ETO_CLIPPED|ETO_OPAQUE);
518 }
519
520 if ( !bBypassETOWMF )
521 {
524 FALSE,
525 hdc,
526 x,
527 y,
528 fuOptions,
529 lprc,
530 lpString,
531 cwc,
532 lpDx);
533 }
534
535 if ( GdiConvertAndCheckDC(hdc) == NULL ) return FALSE;
536
537 if (!(fuOptions & (ETO_GLYPH_INDEX | ETO_IGNORELANGUAGE)))
538 {
540
541 if (LoadLPK(LPK_ETO))
542 return LpkExtTextOut(hdc, x, y, fuOptions, lprc, lpString, cwc , lpDx, 0);
543 }
544 else
545 {
547 }
548
549 /* Get the DC attribute */
550 pdcattr = GdiGetDcAttr(hdc);
551 if ( pdcattr &&
552 !(pdcattr->ulDirty_ & DC_DIBSECTION) &&
553 !(pdcattr->lTextAlign & TA_UPDATECP))
554 {
555 if ( lprc && !cwc )
556 {
557 if ( fuOptions & ETO_OPAQUE )
558 {
560
562 if (pgO)
563 {
564 pdcattr->ulDirty_ |= DC_MODE_DIRTY;
565 pgO->Count = cwc;
566 pgO->Rect = *lprc;
567 pgO->Options = fuOptions;
568 /* Snapshot attribute */
569 pgO->ulBackgroundClr = pdcattr->ulBackgroundClr;
570 pgO->ptlViewportOrg = pdcattr->ptlViewportOrg;
571 return TRUE;
572 }
573 }
574 else // Do nothing, old explorer pops this off.
575 {
576 DPRINT1("GdiBCExtTextOut nothing\n");
577 return TRUE;
578 }
579 } // Max 580 wchars, if offset 0
580 else if ( cwc <= ((GDIBATCHBUFSIZE - sizeof(GDIBSTEXTOUT)) / sizeof(WCHAR)) )
581 {
582 PGDIBSTEXTOUT pgO;
583 PTEB pTeb = NtCurrentTeb();
584
586 if (pgO)
587 {
588 USHORT cjSize = 0;
589 ULONG DxSize = 0;
590
591 if (cwc > 2) cjSize = (cwc * sizeof(WCHAR)) - sizeof(pgO->String);
592
593 /* Calculate buffer size for string and Dx values */
594 if (lpDx)
595 {
596 /* If ETO_PDY is specified, we have pairs of INTs */
597 DxSize = (cwc * sizeof(INT)) * (fuOptions & ETO_PDY ? 2 : 1);
598 cjSize += DxSize;
599 // The structure buffer holds 4 bytes. Store Dx data then string.
600 // Result one wchar -> Buf[ Dx ]Str[wC], [4][2][X] one extra unused wchar
601 // to assure alignment of 4.
602 }
603
604 if ((pTeb->GdiTebBatch.Offset + cjSize ) <= GDIBATCHBUFSIZE)
605 {
607 pgO->cbCount = cwc;
608 pgO->x = x;
609 pgO->y = y;
610 pgO->Options = fuOptions;
611 pgO->iCS_CP = 0;
612
613 if (lprc) pgO->Rect = *lprc;
614 else
615 {
616 pgO->Options |= GDIBS_NORECT; // Tell the other side lprc is nill.
617 }
618
619 /* Snapshot attributes */
620 pgO->crForegroundClr = pdcattr->crForegroundClr;
621 pgO->crBackgroundClr = pdcattr->crBackgroundClr;
622 pgO->ulForegroundClr = pdcattr->ulForegroundClr;
623 pgO->ulBackgroundClr = pdcattr->ulBackgroundClr;
624 pgO->lBkMode = pdcattr->lBkMode == OPAQUE ? OPAQUE : TRANSPARENT;
625 pgO->hlfntNew = pdcattr->hlfntNew;
626 pgO->flTextAlign = pdcattr->flTextAlign;
627 pgO->ptlViewportOrg = pdcattr->ptlViewportOrg;
628
629 pgO->Size = DxSize; // of lpDx then string after.
630 /* Put the Dx before the String to assure alignment of 4 */
631 if (lpDx) RtlCopyMemory( &pgO->Buffer, lpDx, DxSize);
632
633 if (cwc) RtlCopyMemory( &pgO->String[DxSize/sizeof(WCHAR)], lpString, cwc * sizeof(WCHAR));
634
635 // Recompute offset and return size
636 pTeb->GdiTebBatch.Offset += cjSize;
637 ((PGDIBATCHHDR)pgO)->Size += cjSize;
638 return TRUE;
639 }
640 // Reset offset and count then fall through
641 pTeb->GdiTebBatch.Offset -= sizeof(GDIBSTEXTOUT);
642 pTeb->GdiBatchCount--;
643 }
644 }
645 }
646 return NtGdiExtTextOutW(hdc,
647 x,
648 y,
649 fuOptions,
650 (LPRECT)lprc,
651 (LPWSTR)lpString,
652 cwc,
653 (LPINT)lpDx,
654 0);
655}
#define NULL
Definition: types.h:112
#define FALSE
Definition: types.h:117
HDC WINAPI GdiConvertAndCheckDC(HDC hdc)
Definition: dc.c:403
FORCEINLINE PVOID GdiAllocBatchCommand(HDC hdc, USHORT Cmd)
Definition: gdi32p.h:381
#define HANDLE_METADC(_RetType, _Func, dwError, hdc,...)
Definition: gdi32p.h:589
#define LPK_ETO
Definition: gdi32p.h:82
BOOL WINAPI LoadLPK(INT LpkFunctionID)
Definition: utils.c:423
LPKETO LpkExtTextOut
Definition: utils.c:5
FORCEINLINE PDC_ATTR GdiGetDcAttr(HDC hdc)
Definition: gdi32p.h:451
#define NtCurrentTeb
__kernel_entry W32KAPI BOOL APIENTRY NtGdiExtTextOutW(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ UINT flOpts, _In_opt_ LPRECT prcl, _In_reads_opt_(cwc) LPWSTR pwsz, _In_range_(0, 0xffff) INT cwc, _In_reads_opt_(_Inexpressible_(cwc)) LPINT pdx, _In_ DWORD dwCodePage)
#define DC_FONTTEXT_DIRTY
Definition: ntgdihdl.h:145
#define DC_DIBSECTION
Definition: ntgdihdl.h:137
#define DC_MODE_DIRTY
Definition: ntgdihdl.h:144
struct _GDIBSTEXTOUT GDIBSTEXTOUT
#define GDIBATCHBUFSIZE
Definition: ntgdityp.h:200
struct _GDIBATCHHDR * PGDIBATCHHDR
@ GdiBCTextOut
Definition: ntgdityp.h:88
@ GdiBCExtTextOut
Definition: ntgdityp.h:89
#define GDIBS_NORECT
Definition: ntgdityp.h:507
unsigned short USHORT
Definition: pedump.c:61
#define INT
Definition: polytest.cpp:20
LONG lBkMode
Definition: ntgdihdl.h:313
ULONG ulBackgroundClr
Definition: ntgdihdl.h:298
LONG lTextAlign
Definition: ntgdihdl.h:325
POINTL ptlViewportOrg
Definition: ntgdihdl.h:343
ULONG ulForegroundClr
Definition: ntgdihdl.h:300
COLORREF crForegroundClr
Definition: ntgdihdl.h:299
HANDLE hlfntNew
Definition: ntgdihdl.h:330
COLORREF crBackgroundClr
Definition: ntgdihdl.h:297
ULONG ulDirty_
Definition: ntgdihdl.h:294
FLONG flTextAlign
Definition: ntgdihdl.h:324
POINTL ptlViewportOrg
Definition: ntgdityp.h:539
ULONG ulBackgroundClr
Definition: ntgdityp.h:540
ULONG Buffer[1]
Definition: ntgdityp.h:529
POINTL ptlViewportOrg
Definition: ntgdityp.h:526
UINT cbCount
Definition: ntgdityp.h:522
UINT Options
Definition: ntgdityp.h:519
HANDLE hlfntNew
Definition: ntgdityp.h:524
WCHAR String[2]
Definition: ntgdityp.h:528
LONG lBkMode
Definition: ntgdityp.h:514
COLORREF crForegroundClr
Definition: ntgdityp.h:512
ULONG ulForegroundClr
Definition: ntgdityp.h:515
FLONG flTextAlign
Definition: ntgdityp.h:525
COLORREF crBackgroundClr
Definition: ntgdityp.h:513
ULONG ulBackgroundClr
Definition: ntgdityp.h:516
DWORD iCS_CP
Definition: ntgdityp.h:521
ULONG Offset
Definition: compat.h:831
Definition: compat.h:836
GDI_TEB_BATCH GdiTebBatch
Definition: compat.h:857
ULONG GdiBatchCount
Definition: compat.h:887
#define RtlCopyMemory(Destination, Source, Length)
Definition: typedefs.h:263
uint32_t ULONG
Definition: typedefs.h:59
static BOOL bBypassETOWMF
Definition: text.c:485
_In_ ULONG cjSize
Definition: winddi.h:3634
int * LPINT
Definition: windef.h:178
#define TA_UPDATECP
Definition: wingdi.h:936
#define TRANSPARENT
Definition: wingdi.h:950
#define ETO_CLIPPED
Definition: wingdi.h:648
#define ExtTextOut
Definition: wingdi.h:4454
#define ETO_OPAQUE
Definition: wingdi.h:647
#define OPAQUE
Definition: wingdi.h:949
#define ETO_PDY
Definition: wingdi.h:657
WCHAR * LPWSTR
Definition: xmlstorage.h:184

Referenced by DrawTextExWorker(), ExtTextOutA(), PolyTextOutW(), and TextOutW().

◆ GdiGetCodePage()

DWORD WINAPI GdiGetCodePage ( _In_ HDC  hdc)

Definition at line 140 of file text.c.

142{
143 PDC_ATTR pdcattr;
144
145 /* Get the DC attribute */
146 pdcattr = GdiGetDcAttr(hdc);
147 if (pdcattr == NULL)
148 {
150 return 0;
151 }
152
153 if (pdcattr->ulDirty_ & DIRTY_CHARSET)
154 return LOWORD(NtGdiGetCharSet(hdc));
155
156 return LOWORD(pdcattr->iCS_CP);
157}
#define ERROR_INVALID_PARAMETER
Definition: compat.h:101
#define SetLastError(x)
Definition: compat.h:752
__kernel_entry W32KAPI DWORD APIENTRY NtGdiGetCharSet(_In_ HDC hdc)
#define DIRTY_CHARSET
Definition: ntgdihdl.h:127
#define LOWORD(l)
Definition: pedump.c:82
DWORD iCS_CP
Definition: ntgdihdl.h:305

◆ GetETM()

BOOL WINAPI GetETM ( _In_ HDC  hdc,
_Out_ EXTTEXTMETRIC petm 
)

Definition at line 1046 of file text.c.

1049{
1050 BOOL bResult;
1051
1052 bResult = NtGdiGetETM(hdc, petm);
1053
1054 if (bResult && petm)
1055 {
1056 petm->emKernPairs = (WORD)GetKerningPairsA(hdc, 0, 0);
1057 }
1058
1059 return bResult;
1060}
unsigned short WORD
Definition: ntddk_ex.h:93
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetETM(_In_ HDC hdc, _Out_opt_ EXTTEXTMETRIC *petm)
DWORD WINAPI GetKerningPairsA(_In_ HDC hdc, _In_ DWORD nPairs, _Out_writes_to_opt_(nPairs, return) LPKERNINGPAIR lpKernPair)

◆ GetFontResourceInfoW()

BOOL WINAPI GetFontResourceInfoW ( _In_z_ LPCWSTR  lpFileName,
_Inout_ DWORD pdwBufSize,
_Out_writes_to_opt_ *, 1pdwBufSize PVOID  lpBuffer,
_In_ DWORD  dwType 
)

Definition at line 749 of file text.c.

754{
755 BOOL bRet;
756 UNICODE_STRING NtFileName;
757
758 DPRINT("GetFontResourceInfoW: dwType = %lu\n", dwType);
759
760 if (!lpFileName || !pdwBufSize)
761 {
763 return FALSE;
764 }
765
767 &NtFileName,
768 NULL,
769 NULL))
770 {
772 return FALSE;
773 }
774
776 NtFileName.Buffer,
777 (NtFileName.Length / sizeof(WCHAR)) + 1,
778 1,
779 *pdwBufSize,
780 pdwBufSize,
781 lpBuffer,
782 dwType);
783
784 RtlFreeHeap(RtlGetProcessHeap(), 0, NtFileName.Buffer);
785
786 return bRet;
787}
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:606
static TAGREF LPCWSTR LPDWORD LPVOID lpBuffer
Definition: db.cpp:175
NTSYSAPI BOOLEAN NTAPI RtlDosPathNameToNtPathName_U(_In_opt_z_ PCWSTR DosPathName, _Out_ PUNICODE_STRING NtPathName, _Out_opt_ PCWSTR *NtFileNamePart, _Out_opt_ PRTL_RELATIVE_NAME_U DirectoryInfo)
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetFontResourceInfoInternalW(_In_reads_z_(cwc) LPWSTR pwszFiles, _In_ ULONG cwc, _In_ ULONG cFiles, _In_ UINT cjBuf, _Out_ LPDWORD pdwBytes, _Out_writes_bytes_(cjBuf) LPVOID pvBuf, _In_ DWORD iType)
#define DPRINT
Definition: sndvol32.h:71
_In_ LPCSTR lpFileName
Definition: winbase.h:3071
#define ERROR_PATH_NOT_FOUND
Definition: winerror.h:106

◆ GetStringBitmapA()

UINT WINAPI GetStringBitmapA ( _In_ HDC  hdc,
_In_ LPSTR  psz,
_In_ BOOL  bDoCall,
_In_ UINT  cj,
_Out_writes_(cj) BYTE lpSB 
)

Definition at line 988 of file text.c.

994{
995
997 PWSTR pwsz;
998 UINT uResult = 0;
999
1000 if (!bDoCall)
1001 {
1002 return 0;
1003 }
1004
1005 Status = HEAP_strdupA2W(&pwsz, psz);
1006 if (!NT_SUCCESS(Status))
1007 {
1009 }
1010 else
1011 {
1012 uResult = NtGdiGetStringBitmapW(hdc, pwsz, 1, lpSB, cj);
1013 HEAP_free(pwsz);
1014 }
1015
1016 return uResult;
1017
1018}
LONG NTSTATUS
Definition: precomp.h:26
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
NTSTATUS HEAP_strdupA2W(LPWSTR *ppszW, LPCSTR lpszA)
Definition: heap.c:43
VOID HEAP_free(LPVOID memory)
Definition: heap.c:63
Status
Definition: gdiplustypes.h:25
NTSYSAPI ULONG WINAPI RtlNtStatusToDosError(NTSTATUS)
unsigned int UINT
Definition: ndis.h:50
__kernel_entry W32KAPI UINT APIENTRY NtGdiGetStringBitmapW(_In_ HDC hdc, _In_ LPWSTR pwsz, _In_ UINT cwc, _Out_writes_bytes_(cj) BYTE *lpSB, _In_ UINT cj)
uint16_t * PWSTR
Definition: typedefs.h:56
_In_ ULONG cj
Definition: winddi.h:3540

◆ GetStringBitmapW()

UINT WINAPI GetStringBitmapW ( _In_ HDC  hdc,
_In_ LPWSTR  pwsz,
_In_ BOOL  bDoCall,
_In_ UINT  cj,
_Out_writes_(cj) BYTE lpSB 
)

Definition at line 1025 of file text.c.

1031{
1032 if (!bDoCall)
1033 {
1034 return 0;
1035 }
1036
1037 return NtGdiGetStringBitmapW(hdc, pwsz, 1, lpSB, cj);
1038
1039}

◆ GetTextAlign()

UINT WINAPI GetTextAlign ( _In_ HDC  hdc)

Definition at line 838 of file text.c.

840{
841 PDC_ATTR pdcattr;
842
843 /* Get the DC attribute */
844 pdcattr = GdiGetDcAttr(hdc);
845 if (pdcattr == NULL)
846 {
847 /* Do not set LastError here! */
848 return GDI_ERROR;
849 }
850
851 return pdcattr->lTextAlign;
852}
#define GDI_ERROR
Definition: wingdi.h:1309

Referenced by EMFDC_ExtTextOut(), EMFDRV_ExtTextOut(), eto_emf_enum_proc(), LPK_DrawUnderscore(), LpkExtTextOut(), MainWndProc(), and test_ExtTextOut().

◆ GetTextCharacterExtra()

INT WINAPI GetTextCharacterExtra ( _In_ HDC  hdc)

Definition at line 165 of file text.c.

167{
168 PDC_ATTR pdcattr;
169
170 /* Get the DC attribute */
171 pdcattr = GdiGetDcAttr(hdc);
172 if (pdcattr == NULL)
173 {
174 /* Do not set LastError here! */
175 return 0x8000000;
176 }
177
178 return pdcattr->lTextExtra;
179}
LONG lTextExtra
Definition: ntgdihdl.h:326

Referenced by test_dc_values().

◆ GetTextCharset()

INT WINAPI GetTextCharset ( _In_ HDC  hdc)

Definition at line 187 of file text.c.

189{
190 /* MSDN docs say this is equivalent */
192}
__kernel_entry W32KAPI INT APIENTRY NtGdiGetTextCharsetInfo(_In_ HDC hdc, _Out_opt_ LPFONTSIGNATURE lpSig, _In_ DWORD dwFlags)

Referenced by GetKerningPairsA(), map_font(), METADC_ExtTextOut(), MFDRV_ExtTextOut(), test_bitmap_font_metrics(), test_GdiGetCodePage(), test_logfont(), test_nonexistent_font(), and test_oemcharset().

◆ GetTextColor()

COLORREF WINAPI GetTextColor ( _In_ HDC  hdc)

◆ GetTextExtentExPointA()

BOOL WINAPI GetTextExtentExPointA ( _In_ HDC  hdc,
_In_reads_(cchString) LPCSTR  lpszStr,
_In_ INT  cchString,
_In_ INT  nMaxExtent,
_Out_opt_ LPINT  lpnFit,
_Out_writes_to_opt_(cchString, *lpnFit) LPINT  lpnDx,
_Out_ LPSIZE  lpSize 
)

Definition at line 329 of file text.c.

337{
339 LPWSTR lpszStrW;
340 BOOL bResult = FALSE;
341
342 if (nMaxExtent < -1)
343 {
345 return FALSE;
346 }
347
348 Status = HEAP_strdupA2W(&lpszStrW, lpszStr);
349 if (!NT_SUCCESS (Status))
350 {
352 return FALSE;
353 }
354
355 bResult = NtGdiGetTextExtentExW(hdc,
356 lpszStrW,
357 cchString,
358 nMaxExtent,
359 (PULONG)lpnFit,
360 (PULONG)lpnDx,
361 lpSize,
362 0);
363
364 HEAP_free(lpszStrW);
365
366 return bResult;
367}
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetTextExtentExW(_In_ HDC hdc, _In_reads_opt_(cwc) LPWSTR pwsz, _In_ ULONG cwc, _In_ ULONG dxMax, _Out_opt_ ULONG *pcCh, _Out_writes_to_opt_(cwc, *pcCh) PULONG pdxOut, _Out_ LPSIZE psize, _In_ FLONG fl)
uint32_t * PULONG
Definition: typedefs.h:59

◆ GetTextExtentExPointI()

BOOL WINAPI GetTextExtentExPointI ( _In_ HDC  hdc,
_In_reads_(cgi) LPWORD  pgiIn,
_In_ INT  cgi,
_In_ INT  nMaxExtent,
_Out_opt_ LPINT  lpnFit,
_Out_writes_to_opt_(cwchString, *lpnFit) LPINT  lpnDx,
_Out_ LPSIZE  lpSize 
)

Definition at line 416 of file text.c.

424{
426 pgiIn,
427 cgi,
428 nMaxExtent,
429 (PULONG)lpnFit,
430 (PULONG)lpnDx,
431 lpSize,
433}
#define GTEF_INDICES
Definition: ntgdityp.h:213

◆ GetTextExtentExPointW()

BOOL WINAPI GetTextExtentExPointW ( _In_ HDC  hdc,
_In_reads_(cchString) LPCWSTR  lpszString,
_In_ INT  cchString,
_In_ INT  nMaxExtent,
_Out_opt_ LPINT  lpnFit,
_Out_writes_to_opt_(cchString, *lpnFit) LPINT  lpnDx,
_Out_ LPSIZE  lpSize 
)

Definition at line 283 of file text.c.

291{
292
293 /* Windows doesn't check nMaxExtent validity in unicode version */
294 if (nMaxExtent < -1)
295 {
296 DPRINT("nMaxExtent is invalid: %d\n", nMaxExtent);
297 }
298
299 if (LoadLPK(LPK_GTEP))
300 return LpkGetTextExtentExPoint(hdc, lpszString, cchString, nMaxExtent, lpnFit, lpnDx, lpSize, 0, 0);
301
302 return NtGdiGetTextExtentExW (
303 hdc, (LPWSTR)lpszString, cchString, nMaxExtent, (PULONG)lpnFit, (PULONG)lpnDx, lpSize, 0 );
304}
#define LPK_GTEP
Definition: gdi32p.h:84
LPKGTEP LpkGetTextExtentExPoint
Definition: utils.c:7

Referenced by TEXT_Ellipsify(), TEXT_NextLineW(), TEXT_PathEllipsify(), and TEXT_WordBreak().

◆ GetTextExtentExPointWPri()

BOOL WINAPI GetTextExtentExPointWPri ( _In_ HDC  hdc,
_In_reads_(cwc) LPCWSTR  lpwsz,
_In_ INT  cwc,
_In_ INT  dxMax,
_Out_opt_ LPINT  pcCh,
_Out_writes_to_opt_(cwc, *pcCh) LPINT  pdxOut,
_In_ LPSIZE  psize 
)

Definition at line 312 of file text.c.

320{
321 return NtGdiGetTextExtentExW(hdc, (LPWSTR)lpwsz, cwc, dxMax, (PULONG)pcCh, (PULONG)pdxOut, psize, 0);
322}
_Must_inspect_result_ _Out_ LPSIZE psize
Definition: ntgdi.h:1569

◆ GetTextExtentPoint32A()

BOOL WINAPI GetTextExtentPoint32A ( _In_ HDC  hdc,
_In_reads_(cchString) LPCSTR  lpString,
_In_ INT  cchString,
_Out_ LPSIZE  lpSize 
)

Definition at line 375 of file text.c.

380{
381 ANSI_STRING StringA;
382 UNICODE_STRING StringU;
383 BOOL ret;
384
385 StringA.Buffer = (LPSTR)lpString;
386 StringA.Length = cchString;
387 RtlAnsiStringToUnicodeString(&StringU, &StringA, TRUE);
388
389 ret = GetTextExtentPoint32W(hdc, StringU.Buffer, cchString, lpSize);
390
391 RtlFreeUnicodeString(&StringU);
392
393 return ret;
394}
BOOL WINAPI GetTextExtentPoint32W(_In_ HDC hdc, _In_reads_(cchString) LPCWSTR lpString, _In_ int cchString, _Out_ LPSIZE lpSize)
Definition: text.c:402
char * LPSTR
Definition: xmlstorage.h:182

◆ GetTextExtentPoint32W()

BOOL WINAPI GetTextExtentPoint32W ( _In_ HDC  hdc,
_In_reads_(cchString) LPCWSTR  lpString,
_In_ int  cchString,
_Out_ LPSIZE  lpSize 
)

Definition at line 402 of file text.c.

407{
408 return NtGdiGetTextExtent(hdc, (LPWSTR)lpString, cchString, lpSize, 0);
409}
__kernel_entry W32KAPI BOOL APIENTRY NtGdiGetTextExtent(_In_ HDC hdc, _In_reads_(cwc) LPWSTR lpwsz, _In_ INT cwc, _Out_ LPSIZE psize, _In_ UINT flOpts)

Referenced by GetTextExtentPoint32A().

◆ GetTextExtentPointA()

BOOL APIENTRY GetTextExtentPointA ( _In_ HDC  hdc,
_In_reads_(cchString) LPCSTR  lpString,
_In_ INT  cchString,
_Out_ LPSIZE  lpsz 
)

Definition at line 242 of file text.c.

247{
248 ANSI_STRING StringA;
249 UNICODE_STRING StringU;
250 BOOL ret;
251
252 RtlInitAnsiString(&StringA, (LPSTR)lpString);
253 RtlAnsiStringToUnicodeString(&StringU, &StringA, TRUE);
254
255 ret = GetTextExtentPointW(hdc, StringU.Buffer, cchString, lpsz);
256
257 RtlFreeUnicodeString(&StringU);
258
259 return ret;
260}
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
BOOL WINAPI GetTextExtentPointW(_In_ HDC hdc, _In_reads_(c) LPCWSTR lpString, _In_ int c, _Out_ LPSIZE lpsz)

◆ GetTextExtentPointI()

BOOL WINAPI GetTextExtentPointI ( _In_ HDC  hdc,
_In_reads_(cgi) LPWORD  pgiIn,
_In_ int  cgi,
_Out_ LPSIZE  lpSize 
)

Definition at line 440 of file text.c.

445{
446 return NtGdiGetTextExtent(hdc, pgiIn, cgi, lpSize, GTEF_INDICES);
447}

Referenced by Test_bug3481().

◆ GetTextExtentPointW()

BOOL APIENTRY GetTextExtentPointW ( _In_ HDC  hdc,
_In_reads_(cchString) LPCWSTR  lpString,
_In_ INT  cchString,
_Out_ LPSIZE  lpsz 
)

Definition at line 268 of file text.c.

273{
274 return NtGdiGetTextExtent(hdc, (LPWSTR)lpString, cchString, lpsz, 0);
275}

Referenced by DrawTextExWorker(), GetTextExtentPointA(), and TEXT_DrawUnderscore().

◆ GetTextFaceA()

INT WINAPI GetTextFaceA ( _In_ HDC  hdc,
_In_ INT  cchMax,
_Out_writes_to_opt_(cchMax, return) LPSTR  lpName 
)

Definition at line 686 of file text.c.

690{
691 INT res;
693
694 /* Validate parameters */
695 if (lpName && cchMax <= 0)
696 {
697 /* Set last error and return failure */
699 return 0;
700 }
701
702 res = GetTextFaceW(hdc, 0, NULL);
703 nameW = HeapAlloc( GetProcessHeap(), 0, res * 2 );
704 if (nameW == NULL)
705 {
706 return 0;
707 }
708
710
711 if (lpName)
712 {
714 lpName[cchMax-1] = 0;
715 res = strlen(lpName);
716 }
717 else
718 {
719 res = WideCharToMultiByte( CP_ACP, 0, nameW, -1, NULL, 0, NULL, NULL);
720 }
721
723 return res;
724}
UINT cchMax
ACPI_SIZE strlen(const char *String)
Definition: utclib.c:269
static const WCHAR nameW[]
Definition: main.c:46
#define GetProcessHeap()
Definition: compat.h:736
#define CP_ACP
Definition: compat.h:109
#define HeapAlloc
Definition: compat.h:733
#define HeapFree(x, y, z)
Definition: compat.h:735
#define WideCharToMultiByte
Definition: compat.h:111
VOID WINAPI GdiSetLastError(DWORD dwErrCode)
Definition: misc.c:873
GLuint res
Definition: glext.h:9613
int32_t INT
Definition: typedefs.h:58
INT WINAPI GetTextFaceW(_In_ HDC hdc, _In_ INT cwcMax, _Out_writes_to_opt_(cwcMax, return) LPWSTR pFaceName)
Definition: text.c:663
_In_ LPCSTR lpName
Definition: winbase.h:2789

◆ GetTextFaceAliasW()

INT WINAPI GetTextFaceAliasW ( _In_ HDC  hdc,
_In_ INT  cwcMax,
_Out_writes_to_opt_(cwcMax, return) LPWSTR  pszOut 
)

Definition at line 732 of file text.c.

736{
737 if (pszOut && !cwcMax)
738 {
740 return 0;
741 }
742
743 return NtGdiGetTextFaceW(hdc, cwcMax, pszOut, TRUE);
744}
__kernel_entry W32KAPI INT APIENTRY NtGdiGetTextFaceW(_In_ HDC hdc, _In_ INT cChar, _Out_writes_to_opt_(cChar, return) LPWSTR pszOut, _In_ BOOL bAliasName)

◆ GetTextFaceW()

INT WINAPI GetTextFaceW ( _In_ HDC  hdc,
_In_ INT  cwcMax,
_Out_writes_to_opt_(cwcMax, return) LPWSTR  pFaceName 
)

Definition at line 663 of file text.c.

667{
668 /* Validate parameters */
669 if (pFaceName && cwcMax <= 0)
670 {
671 /* Set last error and return failure */
673 return 0;
674 }
675
676 /* Forward to kernel */
677 return NtGdiGetTextFaceW(hdc, cwcMax, pFaceName, FALSE);
678}

Referenced by GetTextFaceA().

◆ GetTextMetricsA()

BOOL WINAPI GetTextMetricsA ( _In_ HDC  hdc,
_Out_ LPTEXTMETRICA  lptm 
)

Definition at line 200 of file text.c.

203{
204 TMW_INTERNAL tmwi;
205
206 if (!NtGdiGetTextMetricsW(hdc, &tmwi, sizeof(TMW_INTERNAL)))
207 {
208 return FALSE;
209 }
210
212 return TRUE;
213}
VOID FASTCALL FONT_TextMetricWToA(const TEXTMETRICW *ptmW, LPTEXTMETRICA ptmA)
Definition: font.c:79
static LPTEXTMETRICW lptm
Definition: font.c:42
TEXTMETRICW TextMetric
Definition: ntgdityp.h:370
W32KAPI BOOL APIENTRY NtGdiGetTextMetricsW(IN HDC hDC, OUT TMW_INTERNAL *pUnsafeTmwi, IN ULONG cj)
Definition: text.c:590

Referenced by _GdiGetCharDimensions(), check_height_font_enumproc(), check_item_height(), DECLARE_INTERFACE_(), draw_text_2(), DrawTextExA(), font_height(), get_current_font_height(), get_font_dpi(), get_text_metr_size(), get_tmheight(), ID3DXFontImpl_GetTextMetricsA(), init(), init_system_font_height(), menu_ownerdraw_wnd_proc(), system_font_height(), test_bcm_get_ideal_size(), test_bitmap_font(), test_bitmap_font_glyph_index(), test_bitmap_font_metrics(), test_dtm_get_ideal_size(), test_fake_bold_font(), test_font_caps(), test_font_metrics(), Test_FontSelectionEntry(), test_GetGlyphIndices(), test_GetGlyphOutline(), test_GetGlyphOutline_metric_clipping(), test_GetTextMetrics2(), test_height(), test_ID3DXFont(), test_item_count(), test_item_height(), test_max_height(), test_ScriptGetFontProperties(), test_ScriptGetGlyphABCWidth(), test_TabbedText(), test_text_extents(), test_text_metrics(), test_text_position_style(), and testJustification().

◆ GetTextMetricsW()

BOOL WINAPI GetTextMetricsW ( _In_ HDC  hdc,
_Out_ LPTEXTMETRICW  lptm 
)

Definition at line 221 of file text.c.

224{
225 TMW_INTERNAL tmwi;
226
227 if (!NtGdiGetTextMetricsW(hdc, &tmwi, sizeof(TMW_INTERNAL)))
228 {
229 return FALSE;
230 }
231
232 *lptm = tmwi.TextMetric;
233 return TRUE;
234}

Referenced by _Success_(), CBGetTextAreaHeight(), CFn_WMMeasureItem(), COMCTL32_GetFontMetrics(), D3DXCreateFontIndirectW(), DECLARE_INTERFACE_(), DrawTextExWorker(), EDIT_WM_SetFont(), EditTypeDlg_OnMeasureItem(), EMFDC_ExtTextOut(), EMFDRV_ExtTextOut(), FILEDLG95_LOOKIN_DrawItem(), FILEDLG95_LOOKIN_Init(), GB_Paint(), GdiGetCharDimensions(), GdipAddPathString(), GdipDrawString(), GdipMeasureDriverString(), get_font_hfont(), get_tmheightW(), GetThemeTextMetrics(), HEADER_Create(), HEADER_SetFont(), HOTKEY_SetFont(), ID3DXFontImpl_GetTextMetricsW(), init_script_cache(), LabelWndProc(), LISTVIEW_Command(), LISTVIEW_EditLabelT(), LISTVIEW_SaveTextMetrics(), LpkGetTextExtentExPoint(), LpkPSMTextOut(), MainWndProc(), MONTHCAL_UpdateSize(), msi_dialog_get_sans_serif_height(), OLEFontImpl_QueryTextMetrics(), realize_font(), select_style(), CACListView::SetFont(), SetFontStylesToCombo2(), SYSLINK_GetIdealHeight(), SYSLINK_Render(), SYSLINK_SetFont(), T1_GetTextMetric(), TAB_Create(), TAB_SetItemBounds(), test_GetGlyphOutline_metric_clipping(), test_ScriptCacheGetHeight(), test_ScriptPlace(), test_ScriptString_pSize(), test_text_metrics(), TEXT_TabbedTextOut(), TOOLBAR_CalcStrings(), TREEVIEW_Command(), TREEVIEW_EditLabel(), TREEVIEW_EnsureVisible(), TREEVIEW_NaturalHeight(), UserLpkPSMTextOut(), and WINHELP_HistoryWndProc().

◆ PolyTextOutA()

BOOL WINAPI PolyTextOutA ( _In_ HDC  hdc,
_In_reads_(cStrings) const POLYTEXTA pptxt,
_In_ INT  cStrings 
)

Definition at line 82 of file text.c.

86{
87 for (; cStrings>0; cStrings--, pptxt++)
88 {
89 if (!ExtTextOutA(hdc,
90 pptxt->x,
91 pptxt->y,
92 pptxt->uiFlags,
93 &pptxt->rcl,
94 pptxt->lpstr,
95 pptxt->n,
96 pptxt->pdx))
97 {
98 return FALSE;
99 }
100 }
101
102 return TRUE;
103}
BOOL WINAPI ExtTextOutA(_In_ HDC hdc, _In_ INT x, _In_ INT y, _In_ UINT fuOptions, _In_opt_ const RECT *lprc, _In_reads_opt_(cch) LPCSTR lpString, _In_ UINT cch, _In_reads_opt_(cch) const INT *lpDx)
Definition: text.c:454

◆ PolyTextOutW()

BOOL WINAPI PolyTextOutW ( _In_ HDC  hdc,
_In_reads_(cStrings) const POLYTEXTW pptxt,
_In_ INT  cStrings 
)

Definition at line 111 of file text.c.

115{
116 for (; cStrings>0; cStrings--, pptxt++)
117 {
118 if (!ExtTextOutW(hdc,
119 pptxt->x,
120 pptxt->y,
121 pptxt->uiFlags,
122 &pptxt->rcl,
123 pptxt->lpstr,
124 pptxt->n,
125 pptxt->pdx))
126 {
127 return FALSE;
128 }
129 }
130
131 return TRUE;
132}

◆ SetTextAlign()

UINT WINAPI SetTextAlign ( _In_ HDC  hdc,
_In_ UINT  fMode 
)

Definition at line 883 of file text.c.

886{
887 PDC_ATTR pdcattr;
888 UINT fOldMode;
889
891
892 /* Get the DC attribute */
893 pdcattr = GdiGetDcAttr(hdc);
894 if (pdcattr == NULL)
895 {
897 return GDI_ERROR;
898 }
899
900
901 fOldMode = pdcattr->lTextAlign;
902 pdcattr->lTextAlign = fMode; // Raw
903 if (pdcattr->dwLayout & LAYOUT_RTL)
904 {
905 if ((fMode & TA_CENTER) != TA_CENTER) fMode ^= TA_RIGHT;
906 }
907
908 pdcattr->flTextAlign = fMode & TA_MASK;
909 return fOldMode;
910}
DWORD dwLayout
Definition: ntgdihdl.h:339
UINT WINAPI SetTextAlign(_In_ HDC hdc, _In_ UINT fMode)
Definition: text.c:883
#define TA_RIGHT
Definition: wingdi.h:933
#define LAYOUT_RTL
Definition: wingdi.h:1371
#define TA_MASK
Definition: wingdi.h:937
#define TA_CENTER
Definition: wingdi.h:931

Referenced by add_ruler_units(), DoTestEntry(), draw_text_2(), EnumEnhMetaFile(), GDI32_GdipDrawDriverString(), MainWndProc(), ME_DebugWrite(), ME_DrawParagraph(), PlayEnhMetaFileRecord(), PlayMetaFileRecord(), SetTextAlign(), test_ExtTextOut(), TreeListDraw(), and TREEVIEW_DrawItem().

◆ SetTextCharacterExtra()

INT WINAPI SetTextCharacterExtra ( _In_ HDC  hdc,
_In_ INT  nCharExtra 
)

Definition at line 795 of file text.c.

798{
799 PDC_ATTR pdcattr;
800 INT nOldCharExtra;
801
802 if (nCharExtra == 0x80000000)
803 {
805 return 0x80000000;
806 }
807
808 HANDLE_METADC16(INT, SetTextCharacterExtra, 0x80000000, hdc, nCharExtra);
809
810 /* Get the DC attribute */
811 pdcattr = GdiGetDcAttr(hdc);
812 if (pdcattr == NULL)
813 {
815 return 0x8000000;
816 }
817
818 if (NtCurrentTeb()->GdiTebBatch.HDC == hdc)
819 {
820 if (pdcattr->ulDirty_ & DC_FONTTEXT_DIRTY)
821 {
822 NtGdiFlush(); // Sync up pdcattr from Kernel space.
824 }
825 }
826
827 nOldCharExtra = pdcattr->lTextExtra;
828 pdcattr->lTextExtra = nCharExtra;
829 return nOldCharExtra;
830}
#define HANDLE_METADC16(_RetType, _Func, dwError, hdc,...)
Definition: gdi32p.h:613
__kernel_entry W32KAPI NTSTATUS APIENTRY NtGdiFlush(VOID)
Definition: gdibatch.c:471
INT WINAPI SetTextCharacterExtra(_In_ HDC hdc, _In_ INT nCharExtra)
Definition: text.c:795

Referenced by SetTextCharacterExtra().

◆ SetTextColor()

COLORREF WINAPI SetTextColor ( _In_ HDC  hdc,
_In_ COLORREF  crColor 
)

Definition at line 918 of file text.c.

921{
922 PDC_ATTR pdcattr;
923 COLORREF crOldColor;
924
926
927 pdcattr = GdiGetDcAttr(hdc);
928 if (pdcattr == NULL)
929 {
931 return CLR_INVALID;
932 }
933
934 crOldColor = (COLORREF) pdcattr->ulForegroundClr;
935 pdcattr->ulForegroundClr = (ULONG)crColor;
936
937 if (pdcattr->crForegroundClr != crColor)
938 {
940 pdcattr->crForegroundClr = crColor;
941 }
942
943 return crOldColor;
944}
#define DIRTY_FILL
Definition: ntgdihdl.h:123
#define DIRTY_TEXT
Definition: ntgdihdl.h:125
#define DIRTY_LINE
Definition: ntgdihdl.h:124
COLORREF WINAPI SetTextColor(_In_ HDC hdc, _In_ COLORREF crColor)
Definition: text.c:918
DWORD COLORREF
Definition: windef.h:300

Referenced by AboutProc(), ANIMATE_TransparentBlt(), CBPaintText(), CFn_WMDrawItem(), CFn_WMPaint(), cicChangeBitmapColor(), cicCreateMaskBmp(), COMBO_PrepareColors(), ConfigDlgProc(), SEALED_::ControlWindowProc(), CreateDragImage(), CreateLayoutIcon(), CreateTrayIcon(), DATETIME_Refresh(), DefWndControlColor(), RdpClientUI::Display_DrawGlyph(), RdpClientUI::Display_PatBlt(), RdpClientUI::Display_Polygon(), DlgProc(), DoTestEntry(), CardButton::Draw(), draw_graphics(), Pane::draw_item(), draw_para_number(), draw_space(), draw_text(), draw_text_2(), DrawCheckedRect(), DrawGrayText(), DrawNCPreview(), DrawShadowText(), CUIFButton::DrawTextProc(), CUIFBalloonButton::DrawTextProc(), DrawThemeText(), EDIT_PaintText(), EDIT_WM_Paint(), EditTypeDlg_OnDrawItem(), EnumEnhMetaFile(), FD31_FileOpenDlgProc(), FD31_WMDrawItem(), FILEDLG95_LOOKIN_DrawItem(), FileMenu_DrawItem(), GDI32_GdipDrawDriverString(), Graph_DrawCpuUsageGraph(), Graph_DrawMemUsageGraph(), GuiPaintTextModeBuffer(), HEADER_DrawItem(), HEXEDIT_PaintLines(), HLPFILE_RtfAddTransparentBitmap(), HOTKEY_DrawHotKey(), ICONTITLE_Paint(), ImageList_DrawIndirect(), IntDrawState(), IntGrayString(), IPADDRESS_Draw(), LISTBOX_DrawFocusRect(), LISTBOX_Paint(), LISTBOX_PaintItem(), LISTBOX_RepaintItem(), LISTVIEW_Refresh(), LogOffDialogProc(), MainWnd_OnDrawItem(), MainWndProc(), ME_DebugWrite(), MonSelPaint(), MonSelPaintMonitor(), MONTHCAL_PaintCalendar(), MONTHCAL_PaintLeadTrailMonths(), MONTHCAL_PaintTitle(), MONTHCAL_PaintTodayTitle(), MonthCalPaint(), MouseOnCtrlColorStatic(), MSIText_WndProc(), MyDrawCaptionTemp(), MyDrawFrameCaption(), MyDrawFrameScroll(), MyDrawMenuBarTemp(), NT5_DrawLogoffCaptionText(), CCanvasWindow::OnCtlColorEdit(), CMenuToolbarBase::OnCustomDraw(), OnDrawItem(), CFontsDialog::OnDrawItem(), CAutoComplete::OnDrawItem(), CTextEditWindow::OnEraseBkGnd(), OnPaint(), CTrayClockWnd::OnPaint(), PaintControl(), CUIFBalloonWindow::PaintMessageProc(), PaintText(), parent_wnd_proc(), PB_Paint(), PlayEnhMetaFileRecord(), PlayMetaFileRecord(), PlotCharacter(), prepaint_setup(), PROPSHEET_Paint(), RealDrawFrameControl(), REBAR_DrawBand(), render_masked_bitmap(), RosImageProc(), SetTextColor(), SetupControls(), ShutdownDialogProc(), SS_ItemOut(), START_TEST(), STATIC_PaintTextfn(), SubclassButtonProc(), SYSLINK_Draw(), T1_SetData(), TAB_DrawItemInterior(), TAB_EraseTabInterior(), TabDlgProc(), test_bitmap_colors(), test_dc_values(), test_ExtTextOut(), Test_GetPixel_1bpp(), test_mono_bitmap(), Test_SrcMono1(), test_StretchBlt(), Text(), ThemeDrawCaptionText(), TOOLBAR_CustomizeDialogProc(), TOOLBAR_DrawPattern(), TOOLBAR_DrawString(), ToolTipProc(), TOOLTIPS_Refresh(), TRACKBAR_DrawThumb(), TreeListDraw(), TREEVIEW_DrawItem(), UITOOLS95_DFC_ButtonCheckRadio(), UITOOLS95_DrawFrameCaption(), UITOOLS95_DrawFrameMenu(), UITOOLS95_DrawFrameScroll(), ColorStatic::WndProc(), HyperlinkCtrl::WndProc(), and ZoomWnd_OnDraw().

◆ SetTextJustification()

BOOL WINAPI SetTextJustification ( _In_ HDC  hdc,
_In_ INT  nBreakExtra,
_In_ INT  nBreakCount 
)

Definition at line 951 of file text.c.

955{
956 PDC_ATTR pdcattr;
957
958 HANDLE_METADC16(BOOL, SetTextJustification, FALSE, hdc, nBreakExtra, nBreakCount);
959
960 /* Get the DC attribute */
961 pdcattr = GdiGetDcAttr(hdc);
962 if (pdcattr == NULL)
963 {
964 /* Do not set LastError here! */
965 return GDI_ERROR;
966 }
967
968
969 if (NtCurrentTeb()->GdiTebBatch.HDC == hdc)
970 {
971 if (pdcattr->ulDirty_ & DC_FONTTEXT_DIRTY)
972 {
973 NtGdiFlush(); // Sync up pdcattr from Kernel space.
975 }
976 }
977
978 pdcattr->cBreak = nBreakCount;
979 pdcattr->lBreakExtra = nBreakExtra;
980 return TRUE;
981}
LONG lBreakExtra
Definition: ntgdihdl.h:328
LONG cBreak
Definition: ntgdihdl.h:329
BOOL WINAPI SetTextJustification(_In_ HDC hdc, _In_ INT nBreakExtra, _In_ INT nBreakCount)
Definition: text.c:951

Referenced by SetTextJustification().

◆ TextOutA()

BOOL WINAPI TextOutA ( _In_ HDC  hdc,
_In_ INT  nXStart,
_In_ INT  nYStart,
_In_reads_(cchString) LPCSTR  lpString,
_In_ INT  cchString 
)

Definition at line 19 of file text.c.

25{
26 ANSI_STRING StringA;
27 UNICODE_STRING StringU;
28 BOOL bResult;
30
31 if (lpString != NULL && cchString > 0)
32 {
33 if (cchString > MAXUSHORT)
34 cchString = MAXUSHORT;
35
36 StringA.Length = (USHORT)cchString;
37 StringA.MaximumLength = (USHORT)cchString;
38 StringA.Buffer = (PCHAR)lpString;
39
40 Status = RtlAnsiStringToUnicodeString(&StringU, &StringA, TRUE);
41 if (!NT_SUCCESS(Status))
42 {
43 StringU.Buffer = NULL;
44 StringU.Length = 0;
45 }
46 }
47 else
48 {
49 StringU.Buffer = NULL;
50 StringU.Length = 0;
51 }
52
53 bResult = TextOutW(hdc, nXStart, nYStart,
54 StringU.Buffer, StringU.Length / sizeof(WCHAR));
55
56 RtlFreeUnicodeString(&StringU);
57 return bResult;
58}
#define MAXUSHORT
Definition: typedefs.h:83
BOOL WINAPI TextOutW(_In_ HDC hdc, _In_ INT nXStart, _In_ INT nYStart, _In_reads_(cchString) LPCWSTR lpString, _In_ INT cchString)
Definition: text.c:66

◆ TextOutW()

BOOL WINAPI TextOutW ( _In_ HDC  hdc,
_In_ INT  nXStart,
_In_ INT  nYStart,
_In_reads_(cchString) LPCWSTR  lpString,
_In_ INT  cchString 
)

Definition at line 66 of file text.c.

72{
73 return ExtTextOutW(hdc, nXStart, nYStart, 0, NULL, (LPWSTR)lpString, cchString, NULL);
74}

Referenced by GuiPaintTextModeBuffer(), and TextOutA().

Variable Documentation

◆ bBypassETOWMF

BOOL bBypassETOWMF = FALSE
static

Definition at line 485 of file text.c.

Referenced by ExtTextOutW().