reactos/subsys/win32k/objects
diff -u -r1.121 -r1.122
--- text.c 18 Dec 2004 18:21:02 -0000 1.121
+++ text.c 18 Dec 2004 21:35:35 -0000 1.122
@@ -22,7 +22,7 @@
* along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
-/* $Id: text.c,v 1.121 2004/12/18 18:21:02 royce Exp $ */
+/* $Id: text.c,v 1.122 2004/12/18 21:35:35 royce Exp $ */
#include <w32k.h>
#include <ft2build.h>
@@ -184,7 +184,7 @@
ZwClose(hDirectory);
return;
}
-
+
FileName.Buffer = ExAllocatePool(PagedPool, MAX_PATH);
if (FileName.Buffer == NULL)
{
@@ -424,7 +424,7 @@
FT_Render_Mode FASTCALL
IntGetFontRenderMode(LOGFONTW *logfont)
-{
+{
switch(logfont->lfQuality)
{
//case ANTIALIASED_QUALITY:
@@ -449,7 +449,7 @@
PWSTR src;
NTSTATUS Status;
int Ret;
-
+
/* Copy the UNICODE_STRING structure */
Status = MmCopyFromCaller(&SafeFileName, Filename, sizeof(UNICODE_STRING));
if(!NT_SUCCESS(Status))
@@ -461,7 +461,7 @@
/* Reserve for prepending '\??\' */
SafeFileName.Length += 4 * sizeof(WCHAR);
SafeFileName.MaximumLength += 4 * sizeof(WCHAR);
-
+
src = SafeFileName.Buffer;
SafeFileName.Buffer = (PWSTR)ExAllocatePoolWithTag(PagedPool, SafeFileName.MaximumLength, TAG_STRING);
if(!SafeFileName.Buffer)
@@ -469,7 +469,7 @@
SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY);
return 0;
}
-
+
/* Prepend '\??\' */
RtlCopyMemory(SafeFileName.Buffer, L"\\??\\", 4 * sizeof(WCHAR));
@@ -480,9 +480,9 @@
SetLastNtError(Status);
return 0;
}
-
+
Ret = IntGdiAddFontResource(&SafeFileName, fl);
-
+
ExFreePool(SafeFileName.Buffer);
return Ret;
}
@@ -511,7 +511,7 @@
{
/* FIXME */
/* ASSERT(FALSE);*/
- Status = STATUS_INVALID_HANDLE;
+ Status = STATUS_INVALID_HANDLE;
}
}
else
@@ -809,7 +809,7 @@
TM->tmAveCharWidth = (FT_MulFix(pOS2->xAvgCharWidth, XScale) + 32) >> 6;
if (0 == TM->tmAveCharWidth)
{
- TM->tmAveCharWidth = 1;
+ TM->tmAveCharWidth = 1;
}
TM->tmMaxCharWidth = (FT_MulFix(FontGDI->face->bbox.xMax - FontGDI->face->bbox.xMin,
XScale) + 32) >> 6;
@@ -972,7 +972,7 @@
FontGDI = CurrentEntry->Font;
ASSERT(FontGDI);
-
+
RtlInitAnsiString(&EntryFaceNameA, FontGDI->face->family_name);
RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE);
if ((LF_FACESIZE - 1) * sizeof(WCHAR) < EntryFaceNameW.Length)
@@ -1032,7 +1032,7 @@
LOGFONTW *Lf;
TEXTMETRICW *TM;
NEWTEXTMETRICW *Ntm;
-
+
ZeroMemory(Info, sizeof(FONTFAMILYINFO));
Size = IntGetOutlineTextMetrics(FontGDI, 0, NULL);
Otm = ExAllocatePoolWithTag(PagedPool, Size, TAG_GDITEXT);
@@ -1124,7 +1124,7 @@
if (0 == pOS2->version)
{
FT_UInt Dummy;
-
+
if (FT_Get_First_Char(FontGDI->face, &Dummy) < 0x100)
{
fs_fsCsb0 |= 1;
@@ -1411,7 +1411,7 @@
/* Enumerate font families in the process local list */
Win32Process = PsGetWin32Process();
IntLockProcessPrivateFonts(Win32Process);
- if (! GetFontFamilyInfoForList(&LogFont, Info, &Count, Size,
+ if (! GetFontFamilyInfoForList(&LogFont, Info, &Count, Size,
&Win32Process->PrivateFontListHead))
{
IntUnLockProcessPrivateFonts(Win32Process);
@@ -1499,7 +1499,7 @@
PFONTGDI FontGDI;
PTEXTOBJ TextObj = NULL;
PPALGDI PalDestGDI;
- XLATEOBJ *XlateObj, *XlateObj2;
+ XLATEOBJ *XlateObj=NULL, *XlateObj2=NULL;
ULONG Mode;
FT_Render_Mode RenderMode;
BOOLEAN Render;
@@ -1513,7 +1513,7 @@
SetLastWin32Error(ERROR_INVALID_HANDLE);
return FALSE;
}
-
+
if (NULL != UnsafeDx && Count > 0)
{
Dx = ExAllocatePoolWithTag(PagedPool, Count * sizeof(INT), TAG_GDITEXT);
@@ -1527,10 +1527,12 @@
goto fail;
}
}
-
+
BitmapObj = BITMAPOBJ_LockBitmap(dc->w.hBitmap);
if ( !BitmapObj )
+ {
goto fail;
+ }
SurfObj = &BitmapObj->SurfObj;
ASSERT(SurfObj);
@@ -1543,35 +1545,47 @@
/* Create the brushes */
PalDestGDI = PALETTE_LockPalette(dc->w.hPalette);
if ( !PalDestGDI )
- Mode = PAL_RGB;
+ Mode = PAL_RGB;
else
{
- Mode = PalDestGDI->Mode;
- PALETTE_UnlockPalette(dc->w.hPalette);
+ Mode = PalDestGDI->Mode;
+ PALETTE_UnlockPalette(dc->w.hPalette);
}
XlateObj = (XLATEOBJ*)IntEngCreateXlate(Mode, PAL_RGB, dc->w.hPalette, NULL);
if ( !XlateObj )
+ {
goto fail;
+ }
hBrushFg = NtGdiCreateSolidBrush(XLATEOBJ_iXlate(XlateObj, dc->w.textColor));
if ( !hBrushFg )
+ {
goto fail;
+ }
BrushFg = BRUSHOBJ_LockBrush(hBrushFg);
if ( !BrushFg )
+ {
goto fail;
+ }
IntGdiInitBrushInstance(&BrushFgInst, BrushFg, NULL);
if ((fuOptions & ETO_OPAQUE) || dc->w.backgroundMode == OPAQUE)
{
hBrushBg = NtGdiCreateSolidBrush(XLATEOBJ_iXlate(XlateObj, dc->w.backgroundColor));
if ( !hBrushBg )
+ {
goto fail;
+ }
BrushBg = BRUSHOBJ_LockBrush(hBrushBg);
if ( !BrushBg )
+ {
goto fail;
+ }
IntGdiInitBrushInstance(&BrushBgInst, BrushBg, NULL);
}
XlateObj2 = (XLATEOBJ*)IntEngCreateXlate(PAL_RGB, Mode, NULL, dc->w.hPalette);
if ( !XlateObj2 )
+ {
goto fail;
+ }
SourcePoint.x = 0;
SourcePoint.y = 0;
@@ -1612,7 +1626,7 @@
TextObj = TEXTOBJ_LockText(dc->w.hFont);
if(TextObj == NULL)
{
- goto fail;
+ goto fail;
}
FontObj = TextObj->Font;
@@ -1637,12 +1651,16 @@
}
}
if (!found)
+ {
DPRINT1("WARNING: Could not find desired charmap!\n");
+ }
IntLockFreeType;
error = FT_Set_Charmap(face, found);
IntUnLockFreeType;
if (error)
+ {
DPRINT1("WARNING: Could not set the charmap!\n");
+ }
}
Render = IntIsFontRenderingEnabled();
@@ -1650,7 +1668,7 @@
RenderMode = IntGetFontRenderMode(&TextObj->logfont);
else
RenderMode = FT_RENDER_MODE_MONO;
-
+
IntLockFreeType;
error = FT_Set_Pixel_Sizes(
face,
@@ -1711,7 +1729,7 @@
glyph_index = FT_Get_Char_Index(face, *TempText);
error = FT_Load_Glyph(face, glyph_index, FT_LOAD_DEFAULT);
IntUnLockFreeType;
-
+
if (error)
{
DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
@@ -1764,8 +1782,6 @@
if (error)
{
- EngDeleteXlate(XlateObj);
- EngDeleteXlate(XlateObj2);
DPRINT1("WARNING: Failed to load and render glyph! [index: %u]\n", glyph_index);
goto fail;
}
@@ -1789,8 +1805,6 @@
IntUnLockFreeType;
if (error)
{
- EngDeleteXlate(XlateObj);
- EngDeleteXlate(XlateObj2);
DPRINT1("WARNING: Failed to render glyph!\n");
goto fail;
}
@@ -1824,12 +1838,12 @@
DestRect.right = DestRect.left + glyph->bitmap.width;
DestRect.top = TextTop + yoff - glyph->bitmap_top;
DestRect.bottom = DestRect.top + glyph->bitmap.rows;
-
+
bitSize.cx = glyph->bitmap.width;
bitSize.cy = glyph->bitmap.rows;
MaskRect.right = glyph->bitmap.width;
MaskRect.bottom = glyph->bitmap.rows;
-
+
/*
* We should create the bitmap out of the loop at the biggest possible
* glyph size. Then use memset with 0 to clear it and sourcerect to
@@ -1839,8 +1853,6 @@
HSourceGlyph = EngCreateBitmap(bitSize, pitch, (glyph->bitmap.pixel_mode == ft_pixel_mode_grays) ? BMF_8BPP : BMF_1BPP, BMF_TOPDOWN, glyph->bitmap.buffer);
if ( !HSourceGlyph )
{
- EngDeleteXlate(XlateObj);
- EngDeleteXlate(XlateObj2);
DPRINT1("WARNING: EngLockSurface() failed!\n");
goto fail;
}
@@ -1848,12 +1860,10 @@
if ( !SourceGlyphSurf )
{
EngDeleteSurface((HSURF)HSourceGlyph);
- EngDeleteXlate(XlateObj);
- EngDeleteXlate(XlateObj2);
DPRINT1("WARNING: EngLockSurface() failed!\n");
goto fail;
}
-
+
/*
* Use the font data as a mask to paint onto the DCs surface using a
* brush.
@@ -1904,7 +1914,7 @@
ExFreePool(Dx);
}
DC_UnlockDc( hDC );
-
+
return TRUE;
fail:
@@ -2027,7 +2037,7 @@
}
FontGDI = ObjToGDI(TextObj->Font, FONT);
-
+
face = FontGDI->face;
if (face->charmap == NULL)
{
@@ -2554,7 +2564,7 @@
SetLastWin32Error(STATUS_INVALID_PARAMETER);
return FALSE;
}
-
+
if(!(dc = DC_LockDc(hDC)))
{
SetLastWin32Error(ERROR_INVALID_HANDLE);
@@ -2612,13 +2622,13 @@
Status = STATUS_INVALID_HANDLE;
}
DC_UnlockDc(hDC);
-
+
if(!NT_SUCCESS(Status))
{
SetLastNtError(Status);
return FALSE;
}
-
+
return TRUE;
}
@@ -2742,9 +2752,9 @@
SetLastWin32Error(ERROR_INVALID_HANDLE);
return GDI_ERROR;
}
-
+
FontGdi = ObjToGDI(TextObj->Font, FONT);
-
+
IntLockFreeType;
if (FT_IS_SFNT(FontGdi->face))
@@ -2764,7 +2774,7 @@
TEXTOBJ_UnlockText(hFont);
- return Result;
+ return Result;
}
static UINT FASTCALL
@@ -2777,7 +2787,7 @@
LONG WeightDiff;
NTSTATUS Status;
UINT Score = 1;
-
+
RtlInitAnsiString(&EntryFaceNameA, FontGDI->face->family_name);
Status = RtlAnsiStringToUnicodeString(&EntryFaceNameW, &EntryFaceNameA, TRUE);
if (NT_SUCCESS(Status))
@@ -2923,7 +2933,7 @@
SubstituteFontFamily(&FaceName, 0);
MatchScore = 0;
TextObj->Font = NULL;
-
+
/* First search private fonts */
Win32Process = PsGetWin32Process();
IntLockProcessPrivateFonts(Win32Process);
@@ -2931,7 +2941,7 @@
&TextObj->logfont, &FaceName,
&Win32Process->PrivateFontListHead);
IntUnLockProcessPrivateFonts(Win32Process);
-
+
/* Search system fonts */
IntLockGlobalFonts;
FindBestFontFromList(&TextObj->Font, &MatchScore,
@@ -2952,7 +2962,7 @@
RtlFreeUnicodeString(&FaceName);
TEXTOBJ_UnlockText(FontHandle);
-
+
ASSERT((NT_SUCCESS(Status) ^ (NULL == TextObj->Font)) != 0);
return Status;