[Win32SS] Add TextOut to GDI Batch

Add fix ups to PolyPatBlt and freetype.
TextOut supports 580 characters w/o Dx and Dx at a max of 193 characters
with Dx*1, both if offset is 0.

Noticed a lot of over drawing with start menu from ComCtl32 SB_SETTEXT
going through User32 DrawText/Worker ExtTextOutW. Explain why it might
be slowing down.

If issues arise, commenting out lines in win32ss/include/gdi32p.h can
help.

Example:
else if (Cmd == GdiBCTextOut) cjSize = 0;//sizeof(GDIBSTEXTOUT); <----
this one most of all.
 else if (Cmd == GdiBCExtTextOut) cjSize = 0;//sizeof(GDIBSEXTTEXTOUT);

Test results:
https://reactos.org/testman/compare.php?ids=66260,66262
This commit is contained in:
James Tabor 2019-03-08 22:21:41 -06:00
parent 6676b7c48b
commit d57f7becc3
6 changed files with 255 additions and 24 deletions

View file

@ -495,12 +495,17 @@ typedef struct _GDIBSPPATBLT
PATRECT pRect[1]; // POLYPATBLT
} GDIBSPPATBLT, *PGDIBSPPATBLT;
//
// Both ExtSelectClipRgn and TextOut pass a nill RECT.
//
#define GDIBS_NORECT 0x80000000
typedef struct _GDIBSTEXTOUT
{
GDIBATCHHDR gbHdr;
COLORREF crForegroundClr;
COLORREF crBackgroundClr;
LONG lmBkMode;
LONG lBkMode;
ULONG ulForegroundClr;
ULONG ulBackgroundClr;
int x;
@ -513,7 +518,10 @@ typedef struct _GDIBSTEXTOUT
HANDLE hlfntNew;
FLONG flTextAlign;
POINTL ptlViewportOrg;
union {
WCHAR String[2];
ULONG Buffer[1];
};
} GDIBSTEXTOUT, *PGDIBSTEXTOUT;
typedef struct _GDIBSEXTTEXTOUT