ReactOS  0.4.13-dev-551-gf37fb1f
font.c File Reference
#include <stdarg.h>
#include "windef.h"
#include "winbase.h"
#include "wingdi.h"
#include "winnls.h"
#include "winreg.h"
#include "wine/debug.h"
#include "wine/unicode.h"
#include "objbase.h"
#include "gdiplus.h"
#include "gdiplus_private.h"
#include "pshpack2.h"
#include "poppack.h"
Include dependency graph for font.c:

Go to the source code of this file.

Classes

struct  TT_OS2_V2
 
struct  TT_HHEA
 
struct  font_metrics
 
struct  tt_header
 
struct  tt_table_directory
 
struct  tt_name_table
 
struct  tt_name_record
 
struct  add_font_param
 

Macros

#define GET_BE_WORD(x)   MAKEWORD(HIBYTE(x), LOBYTE(x))
 
#define GET_BE_DWORD(x)   MAKELONG(GET_BE_WORD(HIWORD(x)), GET_BE_WORD(LOWORD(x)));
 
#define MS_MAKE_TAG(ch0, ch1, ch2, ch3)
 
#define MS_OS2_TAG   MS_MAKE_TAG('O','S','/','2')
 
#define MS_HHEA_TAG   MS_MAKE_TAG('h','h','e','a')
 
#define TT_PLATFORM_APPLE_UNICODE   0
 
#define TT_PLATFORM_MACINTOSH   1
 
#define TT_PLATFORM_MICROSOFT   3
 
#define TT_APPLE_ID_DEFAULT   0
 
#define TT_APPLE_ID_ISO_10646   2
 
#define TT_APPLE_ID_UNICODE_2_0   3
 
#define TT_MS_ID_SYMBOL_CS   0
 
#define TT_MS_ID_UNICODE_CS   1
 
#define TT_MAC_ID_SIMPLIFIED_CHINESE   25
 
#define NAME_ID_FULL_FONT_NAME   4
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (gdiplus)
 
static GpStatus clone_font_family (const GpFontFamily *, GpFontFamily **)
 
GpStatus WINGDIPAPI GdipCreateFont (GDIPCONST GpFontFamily *fontFamily, REAL emSize, INT style, Unit unit, GpFont **font)
 
GpStatus WINGDIPAPI GdipCreateFontFromLogfontW (HDC hdc, GDIPCONST LOGFONTW *logfont, GpFont **font)
 
GpStatus WINGDIPAPI GdipCreateFontFromLogfontA (HDC hdc, GDIPCONST LOGFONTA *lfa, GpFont **font)
 
GpStatus WINGDIPAPI GdipDeleteFont (GpFont *font)
 
GpStatus WINGDIPAPI GdipCreateFontFromDC (HDC hdc, GpFont **font)
 
GpStatus WINGDIPAPI GdipGetFamily (GpFont *font, GpFontFamily **family)
 
static REAL get_font_size (const GpFont *font)
 
GpStatus WINGDIPAPI GdipGetFontSize (GpFont *font, REAL *size)
 
static INT get_font_style (const GpFont *font)
 
GpStatus WINGDIPAPI GdipGetFontStyle (GpFont *font, INT *style)
 
GpStatus WINGDIPAPI GdipGetFontUnit (GpFont *font, Unit *unit)
 
GpStatus WINGDIPAPI GdipGetLogFontA (GpFont *font, GpGraphics *graphics, LOGFONTA *lfa)
 
GpStatus WINGDIPAPI GdipGetLogFontW (GpFont *font, GpGraphics *graphics, LOGFONTW *lf)
 
GpStatus WINGDIPAPI GdipCloneFont (GpFont *font, GpFont **cloneFont)
 
GpStatus WINGDIPAPI GdipGetFontHeight (GDIPCONST GpFont *font, GDIPCONST GpGraphics *graphics, REAL *height)
 
GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI (GDIPCONST GpFont *font, REAL dpi, REAL *height)
 
static INT CALLBACK is_font_installed_proc (const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
 
static BOOL get_font_metrics (HDC hdc, struct font_metrics *fm)
 
static GpStatus find_installed_font (const WCHAR *name, struct font_metrics *fm)
 
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName (GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
 
GpStatus WINGDIPAPI GdipCloneFontFamily (GpFontFamily *FontFamily, GpFontFamily **clonedFontFamily)
 
GpStatus WINGDIPAPI GdipGetFamilyName (GDIPCONST GpFontFamily *family, WCHAR *name, LANGID language)
 
GpStatus WINGDIPAPI GdipDeleteFontFamily (GpFontFamily *FontFamily)
 
GpStatus WINGDIPAPI GdipGetCellAscent (GDIPCONST GpFontFamily *family, INT style, UINT16 *CellAscent)
 
GpStatus WINGDIPAPI GdipGetCellDescent (GDIPCONST GpFontFamily *family, INT style, UINT16 *CellDescent)
 
GpStatus WINGDIPAPI GdipGetEmHeight (GDIPCONST GpFontFamily *family, INT style, UINT16 *EmHeight)
 
GpStatus WINGDIPAPI GdipGetLineSpacing (GDIPCONST GpFontFamily *family, INT style, UINT16 *LineSpacing)
 
static INT CALLBACK font_has_style_proc (const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
 
GpStatus WINGDIPAPI GdipIsStyleAvailable (GDIPCONST GpFontFamily *family, INT style, BOOL *IsStyleAvailable)
 
GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace (GpFontFamily **nativeFamily)
 
GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif (GpFontFamily **nativeFamily)
 
GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif (GpFontFamily **nativeFamily)
 
GpStatus WINGDIPAPI GdipNewPrivateFontCollection (GpFontCollection **fontCollection)
 
GpStatus WINGDIPAPI GdipDeletePrivateFontCollection (GpFontCollection **fontCollection)
 
GpStatus WINGDIPAPI GdipPrivateAddFontFile (GpFontCollection *collection, GDIPCONST WCHAR *name)
 
static WORD get_mac_code_page (const tt_name_record *name)
 
static int match_name_table_language (const tt_name_record *name, LANGID lang)
 
static WCHARcopy_name_table_string (const tt_name_record *name, const BYTE *data)
 
static WCHARload_ttf_name_id (const BYTE *mem, DWORD_PTR size, DWORD id)
 
static INT CALLBACK add_font_proc (const LOGFONTW *lfw, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
 
GpStatus WINGDIPAPI GdipPrivateAddMemoryFont (GpFontCollection *fontCollection, GDIPCONST void *memory, INT length)
 
GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount (GpFontCollection *fontCollection, INT *numFound)
 
GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList (GpFontCollection *fontCollection, INT numSought, GpFontFamily *gpfamilies[], INT *numFound)
 
void free_installed_fonts (void)
 
GpStatus WINGDIPAPI GdipNewInstalledFontCollection (GpFontCollection **fontCollection)
 

Variables

static GpFontCollection installedFontCollection = {0}
 
static const LANGID mac_langid_table []
 

Macro Definition Documentation

◆ GET_BE_DWORD

#define GET_BE_DWORD (   x)    MAKELONG(GET_BE_WORD(HIWORD(x)), GET_BE_WORD(LOWORD(x)));

Definition at line 110 of file font.c.

◆ GET_BE_WORD

#define GET_BE_WORD (   x)    MAKEWORD(HIBYTE(x), LOBYTE(x))

Definition at line 109 of file font.c.

◆ MS_HHEA_TAG

#define MS_HHEA_TAG   MS_MAKE_TAG('h','h','e','a')

Definition at line 117 of file font.c.

◆ MS_MAKE_TAG

#define MS_MAKE_TAG (   ch0,
  ch1,
  ch2,
  ch3 
)
Value:
((DWORD)(BYTE)(ch0) | ((DWORD)(BYTE)(ch1) << 8) | \
((DWORD)(BYTE)(ch2) << 16) | ((DWORD)(BYTE)(ch3) << 24))
unsigned long DWORD
Definition: ntddk_ex.h:95
unsigned char BYTE
Definition: mem.h:68
static DWORD
Definition: font.c:57

Definition at line 113 of file font.c.

◆ MS_OS2_TAG

#define MS_OS2_TAG   MS_MAKE_TAG('O','S','/','2')

Definition at line 116 of file font.c.

◆ NAME_ID_FULL_FONT_NAME

#define NAME_ID_FULL_FONT_NAME   4

Definition at line 1185 of file font.c.

◆ TT_APPLE_ID_DEFAULT

#define TT_APPLE_ID_DEFAULT   0

Definition at line 1176 of file font.c.

◆ TT_APPLE_ID_ISO_10646

#define TT_APPLE_ID_ISO_10646   2

Definition at line 1177 of file font.c.

◆ TT_APPLE_ID_UNICODE_2_0

#define TT_APPLE_ID_UNICODE_2_0   3

Definition at line 1178 of file font.c.

◆ TT_MAC_ID_SIMPLIFIED_CHINESE

#define TT_MAC_ID_SIMPLIFIED_CHINESE   25

Definition at line 1183 of file font.c.

◆ TT_MS_ID_SYMBOL_CS

#define TT_MS_ID_SYMBOL_CS   0

Definition at line 1180 of file font.c.

◆ TT_MS_ID_UNICODE_CS

#define TT_MS_ID_UNICODE_CS   1

Definition at line 1181 of file font.c.

◆ TT_PLATFORM_APPLE_UNICODE

#define TT_PLATFORM_APPLE_UNICODE   0

Definition at line 1172 of file font.c.

◆ TT_PLATFORM_MACINTOSH

#define TT_PLATFORM_MACINTOSH   1

Definition at line 1173 of file font.c.

◆ TT_PLATFORM_MICROSOFT

#define TT_PLATFORM_MICROSOFT   3

Definition at line 1174 of file font.c.

Function Documentation

◆ add_font_proc()

static INT CALLBACK add_font_proc ( const LOGFONTW lfw,
const TEXTMETRICW ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 1617 of file font.c.

1619 {
1620  struct add_font_param *param = (struct add_font_param *)lParam;
1621  GpFontCollection *fonts = param->collection;
1622  GpFontFamily* family;
1623  GpStatus stat;
1624  int i;
1625 
1626  param->stat = Ok;
1627 
1628  if (type == RASTER_FONTTYPE)
1629  return 1;
1630 
1631  /* skip rotated fonts */
1632  if (lfw->lfFaceName[0] == '@')
1633  return 1;
1634 
1635  if (fonts->count && strcmpiW(lfw->lfFaceName, fonts->FontFamilies[fonts->count-1]->FamilyName) == 0)
1636  return 1;
1637 
1638  if (fonts->allocated == fonts->count)
1639  {
1640  INT new_alloc_count = fonts->allocated+50;
1641  GpFontFamily** new_family_list = heap_alloc(new_alloc_count*sizeof(void*));
1642 
1643  if (!new_family_list)
1644  {
1645  param->stat = OutOfMemory;
1646  return 0;
1647  }
1648 
1649  memcpy(new_family_list, fonts->FontFamilies, fonts->count*sizeof(void*));
1650  heap_free(fonts->FontFamilies);
1651  fonts->FontFamilies = new_family_list;
1652  fonts->allocated = new_alloc_count;
1653  }
1654 
1655  if ((stat = GdipCreateFontFamilyFromName(lfw->lfFaceName, NULL, &family)) != Ok)
1656  {
1657  WARN("Failed to create font family for %s, status %d.\n", debugstr_w(lfw->lfFaceName), stat);
1658  if (param->is_system)
1659  return 1;
1660  param->stat = stat;
1661  return 0;
1662  }
1663 
1664  /* skip duplicates */
1665  for (i=0; i<fonts->count; i++)
1666  {
1667  if (strcmpiW(family->FamilyName, fonts->FontFamilies[i]->FamilyName) == 0)
1668  {
1669  GdipDeleteFontFamily(family);
1670  return 1;
1671  }
1672  }
1673 
1674  fonts->FontFamilies[fonts->count++] = family;
1675 
1676  return 1;
1677 }
GpFontFamily ** FontFamilies
WCHAR FamilyName[LF_FACESIZE]
#define WARN(fmt,...)
Definition: debug.h:111
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
int32_t INT
Definition: typedefs.h:56
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
Definition: font.c:746
GLfloat param
Definition: glext.h:5796
GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
Definition: font.c:869
#define RASTER_FONTTYPE
Definition: wingdi.h:1089
Definition: stat.h:55
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Status
Definition: gdiplustypes.h:24
#define strcmpiW(s1, s2)
Definition: unicode.h:39
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LPARAM lParam
Definition: combotst.c:139
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by GdipNewInstalledFontCollection(), and GdipPrivateAddMemoryFont().

◆ clone_font_family()

static GpStatus clone_font_family ( const GpFontFamily family,
GpFontFamily **  clone 
)
static

Definition at line 781 of file font.c.

782 {
783  *clone = heap_alloc_zero(sizeof(GpFontFamily));
784  if (!*clone) return OutOfMemory;
785 
786  **clone = *family;
787 
788  return Ok;
789 }

Referenced by GdipCloneFontFamily(), and GdipCreateFont().

◆ copy_name_table_string()

static WCHAR* copy_name_table_string ( const tt_name_record name,
const BYTE data 
)
static

Definition at line 1397 of file font.c.

1398 {
1399  WORD name_len = GET_BE_WORD(name->length);
1400  WORD codepage;
1401  WCHAR *ret;
1402  int len;
1403 
1404  switch (GET_BE_WORD(name->platform_id))
1405  {
1407  case TT_PLATFORM_MICROSOFT:
1408  ret = heap_alloc((name_len / 2 + 1) * sizeof(WCHAR));
1409  for (len = 0; len < name_len / 2; len++)
1410  ret[len] = (data[len * 2] << 8) | data[len * 2 + 1];
1411  ret[len] = 0;
1412  return ret;
1413  case TT_PLATFORM_MACINTOSH:
1415  len = MultiByteToWideChar( codepage, 0, (char *)data, name_len, NULL, 0 ) + 1;
1416  if (!len)
1417  return NULL;
1418  ret = heap_alloc(len * sizeof(WCHAR));
1419  len = MultiByteToWideChar( codepage, 0, (char *)data, name_len, ret, len - 1 );
1420  ret[len] = 0;
1421  return ret;
1422  }
1423  return NULL;
1424 }
static void * heap_alloc(size_t len)
Definition: appwiz.h:65
#define TT_PLATFORM_MICROSOFT
Definition: font.c:1174
#define TT_PLATFORM_APPLE_UNICODE
Definition: font.c:1172
int codepage
Definition: win_iconv.c:156
smooth NULL
Definition: ftsmooth.c:416
#define TT_PLATFORM_MACINTOSH
Definition: font.c:1173
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned short WORD
Definition: ntddk_ex.h:93
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
Definition: gl.h:1950
int ret
GLenum GLsizei len
Definition: glext.h:6722
static WORD get_mac_code_page(const tt_name_record *name)
Definition: font.c:1344
#define GET_BE_WORD(x)
Definition: font.c:109
#define MultiByteToWideChar
Definition: compat.h:100
Definition: name.c:36

Referenced by load_ttf_name_id().

◆ find_installed_font()

static GpStatus find_installed_font ( const WCHAR name,
struct font_metrics fm 
)
static

Definition at line 703 of file font.c.

704 {
705  LOGFONTW lf;
708 
710  {
711  HFONT hfont, old_font;
712 
713  strcpyW(fm->facename, lf.lfFaceName);
714 
715  hfont = CreateFontIndirectW(&lf);
716  old_font = SelectObject(hdc, hfont);
718  SelectObject(hdc, old_font);
720  }
721 
722  DeleteDC(hdc);
723  return ret;
724 }
HFONT WINAPI CreateFontIndirectW(CONST LOGFONTW *lplf)
Definition: font.c:1803
static HDC
Definition: imagelist.c:92
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
static BOOL get_font_metrics(HDC hdc, struct font_metrics *fm)
Definition: font.c:654
int WINAPI EnumFontFamiliesW(HDC hdc, LPCWSTR lpszFamily, FONTENUMPROCW lpEnumFontFamProc, LPARAM lParam)
Definition: font.c:423
LONG_PTR LPARAM
Definition: windef.h:208
static HFONT hfont
static INT CALLBACK is_font_installed_proc(const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
Definition: font.c:632
int ret
HDC hdc
Definition: main.c:9
Status
Definition: gdiplustypes.h:24
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
WCHAR facename[LF_FACESIZE]
Definition: font.c:649
BOOL WINAPI DeleteDC(_In_ HDC)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
Definition: name.c:36

Referenced by GdipCreateFontFamilyFromName().

◆ font_has_style_proc()

static INT CALLBACK font_has_style_proc ( const LOGFONTW elf,
const TEXTMETRICW ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 961 of file font.c.

963 {
964  INT fontstyle = FontStyleRegular;
965 
966  if (!ntm) return 1;
967 
968  if (ntm->tmWeight >= FW_BOLD) fontstyle |= FontStyleBold;
969  if (ntm->tmItalic) fontstyle |= FontStyleItalic;
970  if (ntm->tmUnderlined) fontstyle |= FontStyleUnderline;
971  if (ntm->tmStruckOut) fontstyle |= FontStyleStrikeout;
972 
973  return (INT)lParam != fontstyle;
974 }
BYTE tmUnderlined
Definition: wingdi.h:2377
int32_t INT
Definition: typedefs.h:56
BYTE tmStruckOut
Definition: wingdi.h:2378
#define FW_BOLD
Definition: wingdi.h:377
LONG tmWeight
Definition: wingdi.h:2368
LPARAM lParam
Definition: combotst.c:139
BYTE tmItalic
Definition: wingdi.h:2376

Referenced by GdipIsStyleAvailable().

◆ free_installed_fonts()

void free_installed_fonts ( void  )

Definition at line 1608 of file font.c.

1609 {
1615 }
GpFontFamily ** FontFamilies
static GpFontCollection installedFontCollection
Definition: font.c:121
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
Definition: font.c:869
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by DllMain(), and GdipNewInstalledFontCollection().

◆ GdipCloneFont()

GpStatus WINGDIPAPI GdipCloneFont ( GpFont font,
GpFont **  cloneFont 
)

Definition at line 520 of file font.c.

521 {
522  GpStatus stat;
523 
524  TRACE("(%p, %p)\n", font, cloneFont);
525 
526  if(!font || !cloneFont)
527  return InvalidParameter;
528 
529  *cloneFont = heap_alloc_zero(sizeof(GpFont));
530  if(!*cloneFont) return OutOfMemory;
531 
532  **cloneFont = *font;
533  stat = GdipCloneFontFamily(font->family, &(*cloneFont)->family);
534  if (stat != Ok) heap_free(*cloneFont);
535 
536  return stat;
537 }
Definition: mk_font.cpp:20
#define TRACE(s)
Definition: solgame.cpp:4
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *FontFamily, GpFontFamily **clonedFontFamily)
Definition: font.c:803
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by Font::Clone().

◆ GdipCloneFontFamily()

GpStatus WINGDIPAPI GdipCloneFontFamily ( GpFontFamily FontFamily,
GpFontFamily **  clonedFontFamily 
)

Definition at line 803 of file font.c.

804 {
806 
807  if (!(FontFamily && clonedFontFamily)) return InvalidParameter;
808 
809  TRACE("%p (%s), %p\n", FontFamily,
810  debugstr_w(FontFamily->FamilyName), clonedFontFamily);
811 
812  status = clone_font_family(FontFamily, clonedFontFamily);
813  if (status != Ok) return status;
814 
815  TRACE("<-- %p\n", *clonedFontFamily);
816 
817  return Ok;
818 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
Status
Definition: gdiplustypes.h:24
static GpStatus clone_font_family(const GpFontFamily *, GpFontFamily **)
Definition: font.c:781
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by GdipCloneFont(), GdipGetFamily(), GdipGetFontCollectionFamilyList(), and test_fontfamily().

◆ GdipCreateFont()

GpStatus WINGDIPAPI GdipCreateFont ( GDIPCONST GpFontFamily fontFamily,
REAL  emSize,
INT  style,
Unit  unit,
GpFont **  font 
)

Definition at line 144 of file font.c.

146 {
147  HFONT hfont;
148  OUTLINETEXTMETRICW otm;
149  LOGFONTW lfw;
150  HDC hdc;
151  GpStatus stat;
152  int ret;
153 
154  if (!fontFamily || !font || emSize < 0.0)
155  return InvalidParameter;
156 
157  TRACE("%p (%s), %f, %d, %d, %p\n", fontFamily,
158  debugstr_w(fontFamily->FamilyName), emSize, style, unit, font);
159 
160  memset(&lfw, 0, sizeof(lfw));
161 
162  stat = GdipGetFamilyName(fontFamily, lfw.lfFaceName, LANG_NEUTRAL);
163  if (stat != Ok) return stat;
164 
165  lfw.lfHeight = -units_to_pixels(emSize, unit, fontFamily->dpi);
170 
171  hfont = CreateFontIndirectW(&lfw);
172  hdc = CreateCompatibleDC(0);
174  otm.otmSize = sizeof(otm);
175  ret = GetOutlineTextMetricsW(hdc, otm.otmSize, &otm);
176  DeleteDC(hdc);
178 
179  if (!ret) return NotTrueTypeFont;
180 
181  *font = heap_alloc_zero(sizeof(GpFont));
182  if (!*font) return OutOfMemory;
183 
184  (*font)->unit = unit;
185  (*font)->emSize = emSize;
186  (*font)->otm = otm;
187 
188  stat = clone_font_family(fontFamily, &(*font)->family);
189  if (stat != Ok)
190  {
191  heap_free(*font);
192  return stat;
193  }
194 
195  TRACE("<-- %p\n", *font);
196 
197  return Ok;
198 }
HFONT WINAPI CreateFontIndirectW(CONST LOGFONTW *lplf)
Definition: font.c:1803
Definition: mk_font.cpp:20
#define LANG_NEUTRAL
Definition: nls.h:22
LONG lfHeight
Definition: dimm.idl:59
static HDC
Definition: imagelist.c:92
UINT APIENTRY GetOutlineTextMetricsW(HDC hdc, UINT cbData, LPOUTLINETEXTMETRICW lpOTM)
Definition: font.c:1401
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define FW_REGULAR
Definition: wingdi.h:373
#define debugstr_w
Definition: kernel32.h:32
png_const_structrp png_const_inforp int * unit
Definition: png.h:2161
static HFONT hfont
#define TRACE(s)
Definition: solgame.cpp:4
int ret
HDC hdc
Definition: main.c:9
Definition: stat.h:55
GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily *family, WCHAR *name, LANGID language)
Definition: font.c:837
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
#define FW_BOLD
Definition: wingdi.h:377
BOOL WINAPI DeleteDC(_In_ HDC)
BYTE lfStrikeOut
Definition: dimm.idl:66
BYTE lfItalic
Definition: dimm.idl:64
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
static GpStatus clone_font_family(const GpFontFamily *, GpFontFamily **)
Definition: font.c:781
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
Definition: gdiplus.c:327
LONG lfWeight
Definition: dimm.idl:63
Arabic default style
Definition: afstyles.h:93
BYTE lfUnderline
Definition: dimm.idl:65
#define memset(x, y, z)
Definition: compat.h:39
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by check_family(), Font::Font(), GdipAddPathString(), METAFILE_PlaybackObject(), test_createfont(), test_font_height_scaling(), test_font_metrics(), test_font_substitution(), test_GdipMeasureString(), test_heightgivendpi(), test_long_name(), test_measure_string(), test_measured_extra_space(), and test_string_functions().

◆ GdipCreateFontFamilyFromName()

GpStatus WINGDIPAPI GdipCreateFontFamilyFromName ( GDIPCONST WCHAR name,
GpFontCollection fontCollection,
GpFontFamily **  FontFamily 
)

Definition at line 746 of file font.c.

749 {
750  GpStatus stat;
751  GpFontFamily* ffamily;
752  struct font_metrics fm;
753 
754  TRACE("%s, %p %p\n", debugstr_w(name), fontCollection, FontFamily);
755 
756  if (!(name && FontFamily))
757  return InvalidParameter;
758  if (fontCollection)
759  FIXME("No support for FontCollections yet!\n");
760 
761  stat = find_installed_font(name, &fm);
762  if (stat != Ok) return stat;
763 
764  ffamily = heap_alloc_zero(sizeof (GpFontFamily));
765  if (!ffamily) return OutOfMemory;
766 
767  lstrcpyW(ffamily->FamilyName, fm.facename);
768  ffamily->em_height = fm.em_height;
769  ffamily->ascent = fm.ascent;
770  ffamily->descent = fm.descent;
771  ffamily->line_spacing = fm.line_spacing;
772  ffamily->dpi = fm.dpi;
773 
774  *FontFamily = ffamily;
775 
776  TRACE("<-- %p\n", ffamily);
777 
778  return Ok;
779 }
WCHAR FamilyName[LF_FACESIZE]
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define TRACE(s)
Definition: solgame.cpp:4
static GpStatus find_installed_font(const WCHAR *name, struct font_metrics *fm)
Definition: font.c:703
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
#define lstrcpyW
Definition: compat.h:406
Definition: name.c:36

Referenced by add_font_proc(), FontFamily::FontFamily(), GdipCreateFontFromLogfontW(), GdipGetGenericFontFamilyMonospace(), GdipGetGenericFontFamilySansSerif(), GdipGetGenericFontFamilySerif(), METAFILE_PlaybackObject(), test_createfont(), test_font_height_scaling(), test_font_metrics(), test_font_substitution(), test_fontfamily(), test_fontfamily_properties(), test_GdipMeasureString(), test_heightgivendpi(), test_measure_string(), test_measured_extra_space(), and test_string_functions().

◆ GdipCreateFontFromDC()

GpStatus WINGDIPAPI GdipCreateFontFromDC ( HDC  hdc,
GpFont **  font 
)

Definition at line 286 of file font.c.

287 {
288  HFONT hfont;
289  LOGFONTW lfw;
290 
291  TRACE("(%p, %p)\n", hdc, font);
292 
293  if(!font)
294  return InvalidParameter;
295 
297  if(!hfont)
298  return GenericError;
299 
300  if(!GetObjectW(hfont, sizeof(LOGFONTW), &lfw))
301  return GenericError;
302 
303  return GdipCreateFontFromLogfontW(hdc, &lfw, font);
304 }
GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, GDIPCONST LOGFONTW *logfont, GpFont **font)
Definition: font.c:203
Definition: mk_font.cpp:20
static HFONT hfont
#define TRACE(s)
Definition: solgame.cpp:4
#define OBJ_FONT
Definition: objidl.idl:1414
HDC hdc
Definition: main.c:9
int WINAPI GetObjectW(_In_ HANDLE h, _In_ int c, _Out_writes_bytes_opt_(c) LPVOID pv)
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
HGDIOBJ WINAPI GetCurrentObject(_In_ HDC, _In_ UINT)
Definition: dc.c:439

Referenced by Font::Font().

◆ GdipCreateFontFromLogfontA()

GpStatus WINGDIPAPI GdipCreateFontFromLogfontA ( HDC  hdc,
GDIPCONST LOGFONTA lfa,
GpFont **  font 
)

Definition at line 249 of file font.c.

251 {
252  LOGFONTW lfw;
253 
254  TRACE("(%p, %p, %p)\n", hdc, lfa, font);
255 
256  if(!lfa || !font)
257  return InvalidParameter;
258 
259  memcpy(&lfw, lfa, FIELD_OFFSET(LOGFONTA,lfFaceName) );
260 
261  if(!MultiByteToWideChar(CP_ACP, 0, lfa->lfFaceName, -1, lfw.lfFaceName, LF_FACESIZE))
262  return GenericError;
263 
264  return GdipCreateFontFromLogfontW(hdc, &lfw, font);
265 }
#define LF_FACESIZE
Definition: dimm.idl:39
GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, GDIPCONST LOGFONTW *logfont, GpFont **font)
Definition: font.c:203
Definition: mk_font.cpp:20
#define CP_ACP
Definition: compat.h:99
#define TRACE(s)
Definition: solgame.cpp:4
HDC hdc
Definition: main.c:9
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
#define MultiByteToWideChar
Definition: compat.h:100
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72

Referenced by Font::Font(), test_font_substitution(), test_font_transform(), test_GdipDrawString(), and test_logfont().

◆ GdipCreateFontFromLogfontW()

GpStatus WINGDIPAPI GdipCreateFontFromLogfontW ( HDC  hdc,
GDIPCONST LOGFONTW logfont,
GpFont **  font 
)

Definition at line 203 of file font.c.

205 {
206  HFONT hfont, oldfont;
207  OUTLINETEXTMETRICW otm;
209  GpStatus stat;
210  int ret;
211 
212  TRACE("(%p, %p, %p)\n", hdc, logfont, font);
213 
214  if (!hdc || !logfont || !font)
215  return InvalidParameter;
216 
217  hfont = CreateFontIndirectW(logfont);
218  oldfont = SelectObject(hdc, hfont);
219  otm.otmSize = sizeof(otm);
220  ret = GetOutlineTextMetricsW(hdc, otm.otmSize, &otm);
222  SelectObject(hdc, oldfont);
224 
225  if (!ret) return NotTrueTypeFont;
226 
227  *font = heap_alloc_zero(sizeof(GpFont));
228  if (!*font) return OutOfMemory;
229 
230  (*font)->unit = UnitWorld;
231  (*font)->emSize = otm.otmTextMetrics.tmAscent;
232  (*font)->otm = otm;
233 
234  stat = GdipCreateFontFamilyFromName(facename, NULL, &(*font)->family);
235  if (stat != Ok)
236  {
237  heap_free(*font);
238  return NotTrueTypeFont;
239  }
240 
241  TRACE("<-- %p\n", *font);
242 
243  return Ok;
244 }
HFONT WINAPI CreateFontIndirectW(CONST LOGFONTW *lplf)
Definition: font.c:1803
#define LF_FACESIZE
Definition: dimm.idl:39
Definition: mk_font.cpp:20
UINT APIENTRY GetOutlineTextMetricsW(HDC hdc, UINT cbData, LPOUTLINETEXTMETRICW lpOTM)
Definition: font.c:1401
HGDIOBJ WINAPI SelectObject(_In_ HDC, _In_ HGDIOBJ)
Definition: dc.c:1497
BOOL WINAPI DeleteObject(_In_ HGDIOBJ)
LONG tmAscent
Definition: wingdi.h:2362
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
Definition: font.c:746
static HFONT hfont
int WINAPI GetTextFaceW(_In_ HDC hdc, _In_ int c, _Out_writes_to_opt_(c, return) LPWSTR lpName)
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
int ret
HDC hdc
Definition: main.c:9
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
WCHAR facename[LF_FACESIZE]
Definition: font.c:649
TEXTMETRICW otmTextMetrics
Definition: wingdi.h:2492
static DWORD *static HFONT(WINAPI *pCreateFontIndirectExA)(const ENUMLOGFONTEXDVA *)
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by Font::Font(), GdipCreateFontFromDC(), GdipCreateFontFromLogfontA(), and test_font_metrics().

◆ GdipDeleteFont()

GpStatus WINGDIPAPI GdipDeleteFont ( GpFont font)

Definition at line 270 of file font.c.

271 {
272  TRACE("(%p)\n", font);
273 
274  if(!font)
275  return InvalidParameter;
276 
277  GdipDeleteFontFamily(font->family);
278  heap_free(font);
279 
280  return Ok;
281 }
Definition: mk_font.cpp:20
#define TRACE(s)
Definition: solgame.cpp:4
GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
Definition: font.c:869
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by check_family(), GdipAddPathString(), metafile_free_object_table_entry(), test_createfont(), test_font_height_scaling(), test_font_metrics(), test_font_substitution(), test_font_transform(), test_GdipDrawString(), test_GdipMeasureString(), test_heightgivendpi(), test_logfont(), test_long_name(), test_measure_string(), test_measured_extra_space(), and test_string_functions().

◆ GdipDeleteFontFamily()

◆ GdipDeletePrivateFontCollection()

GpStatus WINGDIPAPI GdipDeletePrivateFontCollection ( GpFontCollection **  fontCollection)

Definition at line 1118 of file font.c.

1119 {
1120  INT i;
1121 
1122  TRACE("%p\n", fontCollection);
1123 
1124  if (!fontCollection)
1125  return InvalidParameter;
1126 
1127  for (i = 0; i < (*fontCollection)->count; i++) heap_free((*fontCollection)->FontFamilies[i]);
1128  heap_free((*fontCollection)->FontFamilies);
1129  heap_free(*fontCollection);
1130 
1131  return Ok;
1132 }
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define TRACE(s)
Definition: solgame.cpp:4
static BOOL heap_free(void *mem)
Definition: appwiz.h:75

Referenced by test_long_name().

◆ GdipGetCellAscent()

GpStatus WINGDIPAPI GdipGetCellAscent ( GDIPCONST GpFontFamily family,
INT  style,
UINT16 CellAscent 
)

Definition at line 880 of file font.c.

882 {
883  if (!(family && CellAscent)) return InvalidParameter;
884 
885  *CellAscent = family->ascent;
886  TRACE("%s => %u\n", debugstr_w(family->FamilyName), *CellAscent);
887 
888  return Ok;
889 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by gdip_get_font_metrics(), FontFamily::GetCellAscent(), and test_fontfamily_properties().

◆ GdipGetCellDescent()

GpStatus WINGDIPAPI GdipGetCellDescent ( GDIPCONST GpFontFamily family,
INT  style,
UINT16 CellDescent 
)

Definition at line 891 of file font.c.

893 {
894  TRACE("(%p, %d, %p)\n", family, style, CellDescent);
895 
896  if (!(family && CellDescent)) return InvalidParameter;
897 
898  *CellDescent = family->descent;
899  TRACE("%s => %u\n", debugstr_w(family->FamilyName), *CellDescent);
900 
901  return Ok;
902 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
Arabic default style
Definition: afstyles.h:93

Referenced by gdip_get_font_metrics(), FontFamily::GetCellDescent(), and test_fontfamily_properties().

◆ GdipGetEmHeight()

GpStatus WINGDIPAPI GdipGetEmHeight ( GDIPCONST GpFontFamily family,
INT  style,
UINT16 EmHeight 
)

Definition at line 918 of file font.c.

919 {
920  if (!(family && EmHeight)) return InvalidParameter;
921 
922  TRACE("%p (%s), %d, %p\n", family, debugstr_w(family->FamilyName), style, EmHeight);
923 
924  *EmHeight = family->em_height;
925  TRACE("%s => %u\n", debugstr_w(family->FamilyName), *EmHeight);
926 
927  return Ok;
928 }
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
Arabic default style
Definition: afstyles.h:93

Referenced by gdip_get_font_metrics(), GdipAddPathString(), GdipGetFontHeightGivenDPI(), FontFamily::GetEmHeight(), test_fontfamily_properties(), and test_logfont().

◆ GdipGetFamily()

GpStatus WINGDIPAPI GdipGetFamily ( GpFont font,
GpFontFamily **  family 
)

Definition at line 319 of file font.c.

320 {
321  TRACE("%p %p\n", font, family);
322 
323  if (!(font && family))
324  return InvalidParameter;
325 
326  return GdipCloneFontFamily(font->family, family);
327 }
Definition: mk_font.cpp:20
#define TRACE(s)
Definition: solgame.cpp:4
GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *FontFamily, GpFontFamily **clonedFontFamily)
Definition: font.c:803

Referenced by gdip_get_font_metrics(), Font::GetFamily(), test_createfont(), and test_logfont().

◆ GdipGetFamilyName()

GpStatus WINGDIPAPI GdipGetFamilyName ( GDIPCONST GpFontFamily family,
WCHAR name,
LANGID  language 
)

Definition at line 837 of file font.c.

839 {
840  static int lang_fixme;
841 
842  if (family == NULL)
843  return InvalidParameter;
844 
845  TRACE("%p, %p, %d\n", family, name, language);
846 
847  if (language != LANG_NEUTRAL && !lang_fixme++)
848  FIXME("No support for handling of multiple languages!\n");
849 
850  lstrcpynW (name, family->FamilyName, LF_FACESIZE);
851 
852  return Ok;
853 }
#define LF_FACESIZE
Definition: dimm.idl:39
#define LANG_NEUTRAL
Definition: nls.h:22
#define lstrcpynW
Definition: compat.h:397
#define FIXME(fmt,...)
Definition: debug.h:110
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
Definition: name.c:36

Referenced by check_family(), GdipCreateFont(), FontFamily::GetFamilyName(), test_createfont(), test_fontfamily(), and test_long_name().

◆ GdipGetFontCollectionFamilyCount()

GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount ( GpFontCollection fontCollection,
INT numFound 
)

Definition at line 1559 of file font.c.

1561 {
1562  TRACE("%p, %p\n", fontCollection, numFound);
1563 
1564  if (!(fontCollection && numFound))
1565  return InvalidParameter;
1566 
1567  *numFound = fontCollection->count;
1568  return Ok;
1569 }
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by test_GdipGetFontCollectionFamilyCount(), test_GdipGetFontCollectionFamilyList(), and test_long_name().

◆ GdipGetFontCollectionFamilyList()

GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList ( GpFontCollection fontCollection,
INT  numSought,
GpFontFamily gpfamilies[],
INT numFound 
)

Definition at line 1574 of file font.c.

1577 {
1578  INT i;
1579  GpStatus stat=Ok;
1580 
1581  TRACE("%p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, numFound);
1582 
1583  if (!(fontCollection && gpfamilies && numFound))
1584  return InvalidParameter;
1585 
1586  memset(gpfamilies, 0, sizeof(*gpfamilies) * numSought);
1587 
1588  for (i = 0; i < numSought && i < fontCollection->count && stat == Ok; i++)
1589  {
1590  stat = GdipCloneFontFamily(fontCollection->FontFamilies[i], &gpfamilies[i]);
1591  }
1592 
1593  if (stat == Ok)
1594  *numFound = i;
1595  else
1596  {
1597  int numToFree=i;
1598  for (i=0; i<numToFree; i++)
1599  {
1600  GdipDeleteFontFamily(gpfamilies[i]);
1601  gpfamilies[i] = NULL;
1602  }
1603  }
1604 
1605  return stat;
1606 }
GpFontFamily ** FontFamilies
int32_t INT
Definition: typedefs.h:56
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily)
Definition: font.c:869
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily *FontFamily, GpFontFamily **clonedFontFamily)
Definition: font.c:803
#define memset(x, y, z)
Definition: compat.h:39

Referenced by test_GdipGetFontCollectionFamilyList(), and test_long_name().

◆ GdipGetFontHeight()

GpStatus WINGDIPAPI GdipGetFontHeight ( GDIPCONST GpFont font,
GDIPCONST GpGraphics graphics,
REAL height 
)

Definition at line 552 of file font.c.

554 {
555  REAL dpi;
556  GpStatus stat;
558 
559  TRACE("%p %p %p\n", font, graphics, height);
560 
561  if (!font || !height) return InvalidParameter;
562 
564  if (stat != Ok) return stat;
565 
566  if (!graphics)
567  {
568  *height = font_height;
569  TRACE("%s,%d => %f\n",
570  debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *height);
571  return Ok;
572  }
573 
574  stat = GdipGetDpiY((GpGraphics *)graphics, &dpi);
575  if (stat != Ok) return stat;
576 
577  *height = pixels_to_units(font_height, graphics->unit, dpi);
578 
579  TRACE("%s,%d(unit %d) => %f\n",
580  debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, graphics->unit, *height);
581  return Ok;
582 }
GpStatus WINGDIPAPI GdipGetDpiY(GpGraphics *graphics, REAL *dpi)
Definition: graphics.c:6635
Definition: mk_font.cpp:20
#define debugstr_w
Definition: kernel32.h:32
REAL pixels_to_units(REAL pixels, GpUnit unit, REAL dpi)
Definition: gdiplus.c:350
#define dpi
Definition: sysparams.c:22
#define TRACE(s)
Definition: solgame.cpp:4
Definition: stat.h:55
static int font_height(HFONT hFont)
Definition: combo.c:612
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height)
Definition: font.c:599
float REAL
Definition: types.h:41

Referenced by gdip_get_font_metrics(), Font::GetHeight(), test_font_height_scaling(), test_font_transform(), and test_logfont().

◆ GdipGetFontHeightGivenDPI()

GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI ( GDIPCONST GpFont font,
REAL  dpi,
REAL height 
)

Definition at line 599 of file font.c.

600 {
601  GpStatus stat;
602  INT style;
604  REAL font_size;
605 
606  if (!font || !height) return InvalidParameter;
607 
608  TRACE("%p (%s), %f, %p\n", font,
609  debugstr_w(font->family->FamilyName), dpi, height);
610 
614  if (stat != Ok) return stat;
615  stat = GdipGetEmHeight(font->family, style, &em_height);
616  if (stat != Ok) return stat;
617 
619 
620  TRACE("%s,%d => %f\n",
621  debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *height);
622 
623  return Ok;
624 }
Definition: mk_font.cpp:20
int32_t INT
Definition: typedefs.h:56
#define debugstr_w
Definition: kernel32.h:32
static REAL get_font_size(const GpFont *font)
Definition: font.c:329
#define dpi
Definition: sysparams.c:22
#define TRACE(s)
Definition: solgame.cpp:4
GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily *family, INT style, UINT16 *LineSpacing)
Definition: font.c:945
Definition: stat.h:55
UINT16 line_spacing
Definition: font.c:650
static FT_F26Dot6 font_size
Definition: ftrandom.c:89
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
unsigned short UINT16
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
Definition: gdiplus.c:327
float REAL
Definition: types.h:41
Arabic default style
Definition: afstyles.h:93
static INT get_font_style(const GpFont *font)
Definition: font.c:362
GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, UINT16 *EmHeight)
Definition: font.c:918
UINT16 em_height
Definition: font.c:650

Referenced by GdipGetFontHeight(), Font::GetHeight(), and test_heightgivendpi().

◆ GdipGetFontSize()

GpStatus WINGDIPAPI GdipGetFontSize ( GpFont font,
REAL size 
)

Definition at line 350 of file font.c.

351 {
352  TRACE("(%p, %p)\n", font, size);
353 
354  if (!(font && size)) return InvalidParameter;
355 
356  *size = get_font_size(font);
357  TRACE("%s,%d => %f\n", debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *size);
358 
359  return Ok;
360 }
Definition: mk_font.cpp:20
#define debugstr_w
Definition: kernel32.h:32
static REAL get_font_size(const GpFont *font)
Definition: font.c:329
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919

Referenced by gdip_get_font_metrics(), Font::GetSize(), test_createfont(), test_GdipMeasureString(), test_logfont(), and test_measured_extra_space().

◆ GdipGetFontStyle()

GpStatus WINGDIPAPI GdipGetFontStyle ( GpFont font,
INT style 
)

Definition at line 393 of file font.c.

394 {
395  TRACE("%p %p\n", font, style);
396 
397  if (!(font && style))
398  return InvalidParameter;
399 
401  TRACE("%s,%d => %d\n", debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *style);
402 
403  return Ok;
404 }
Definition: mk_font.cpp:20
#define debugstr_w
Definition: kernel32.h:32
#define TRACE(s)
Definition: solgame.cpp:4
Arabic default style
Definition: afstyles.h:93
static INT get_font_style(const GpFont *font)
Definition: font.c:362

Referenced by gdip_get_font_metrics(), Font::GetStyle(), and test_logfont().

◆ GdipGetFontUnit()

GpStatus WINGDIPAPI GdipGetFontUnit ( GpFont font,
Unit unit 
)

Definition at line 417 of file font.c.

418 {
419  TRACE("(%p, %p)\n", font, unit);
420 
421  if (!(font && unit)) return InvalidParameter;
422 
423  *unit = font->unit;
424  TRACE("%s,%d => %d\n", debugstr_w(font->family->FamilyName), font->otm.otmTextMetrics.tmHeight, *unit);
425 
426  return Ok;
427 }
Definition: mk_font.cpp:20
#define debugstr_w
Definition: kernel32.h:32
png_const_structrp png_const_inforp int * unit
Definition: png.h:2161
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by Font::GetUnit(), test_createfont(), test_font_metrics(), test_GdipMeasureString(), test_heightgivendpi(), and test_logfont().

◆ GdipGetGenericFontFamilyMonospace()

GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace ( GpFontFamily **  nativeFamily)

Definition at line 1010 of file font.c.

1011 {
1012  static const WCHAR CourierNew[] = {'C','o','u','r','i','e','r',' ','N','e','w','\0'};
1013  static const WCHAR LiberationMono[] = {'L','i','b','e','r','a','t','i','o','n',' ','M','o','n','o','\0'};
1014  GpStatus stat;
1015 
1016  if (nativeFamily == NULL) return InvalidParameter;
1017 
1018  stat = GdipCreateFontFamilyFromName(CourierNew, NULL, nativeFamily);
1019 
1020  if (stat == FontFamilyNotFound)
1021  stat = GdipCreateFontFamilyFromName(LiberationMono, NULL, nativeFamily);
1022 
1023  if (stat == FontFamilyNotFound)
1024  ERR("Missing 'Courier New' font\n");
1025 
1026  return stat;
1027 }
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
Definition: font.c:746
__wchar_t WCHAR
Definition: xmlstorage.h:180
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
#define ERR(fmt,...)
Definition: debug.h:109
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345

Referenced by FontFamily::GenericMonospace(), FontFamily::GenericSerif(), and test_getgenerics().

◆ GdipGetGenericFontFamilySansSerif()

GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif ( GpFontFamily **  nativeFamily)

Definition at line 1074 of file font.c.

1075 {
1076  GpStatus stat;
1077  static const WCHAR MicrosoftSansSerif[] = {'M','i','c','r','o','s','o','f','t',' ','S','a','n','s',' ','S','e','r','i','f','\0'};
1078  static const WCHAR Tahoma[] = {'T','a','h','o','m','a','\0'};
1079 
1080  TRACE("(%p)\n", nativeFamily);
1081 
1082  if (nativeFamily == NULL) return InvalidParameter;
1083 
1084  stat = GdipCreateFontFamilyFromName(MicrosoftSansSerif, NULL, nativeFamily);
1085 
1086  if (stat == FontFamilyNotFound)
1087  /* FIXME: Microsoft Sans Serif is not installed on Wine. */
1088  stat = GdipCreateFontFamilyFromName(Tahoma, NULL, nativeFamily);
1089 
1090  return stat;
1091 }
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
Definition: font.c:746
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345
static const WCHAR Tahoma[]
Definition: font.c:36

Referenced by FontFamily::GenericSansSerif(), and test_getgenerics().

◆ GdipGetGenericFontFamilySerif()

GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif ( GpFontFamily **  nativeFamily)

Definition at line 1041 of file font.c.

1042 {
1043  static const WCHAR TimesNewRoman[] = {'T','i','m','e','s',' ','N','e','w',' ','R','o','m','a','n','\0'};
1044  static const WCHAR LiberationSerif[] = {'L','i','b','e','r','a','t','i','o','n',' ','S','e','r','i','f','\0'};
1045  GpStatus stat;
1046 
1047  TRACE("(%p)\n", nativeFamily);
1048 
1049  if (nativeFamily == NULL) return InvalidParameter;
1050 
1052 
1053  if (stat == FontFamilyNotFound)
1054  stat = GdipCreateFontFamilyFromName(LiberationSerif, NULL, nativeFamily);
1055 
1056  if (stat == FontFamilyNotFound)
1057  ERR("Missing 'Times New Roman' font\n");
1058 
1059  return stat;
1060 }
static const WCHAR TimesNewRoman[]
Definition: font.c:35
smooth NULL
Definition: ftsmooth.c:416
GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontCollection *fontCollection, GpFontFamily **FontFamily)
Definition: font.c:746
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
Definition: stat.h:55
Status
Definition: gdiplustypes.h:24
#define ERR(fmt,...)
Definition: debug.h:109
_CRTIMP int __cdecl stat(const char *_Filename, struct stat *_Stat)
Definition: stat.h:345

Referenced by test_getgenerics().

◆ GdipGetLineSpacing()

GpStatus WINGDIPAPI GdipGetLineSpacing ( GDIPCONST GpFontFamily family,
INT  style,
UINT16 LineSpacing 
)

Definition at line 945 of file font.c.

947 {
948  TRACE("%p, %d, %p\n", family, style, LineSpacing);
949 
950  if (!(family && LineSpacing))
951  return InvalidParameter;
952 
953  if (style) FIXME("ignoring style\n");
954 
955  *LineSpacing = family->line_spacing;
956  TRACE("%s => %u\n", debugstr_w(family->FamilyName), *LineSpacing);
957 
958  return Ok;
959 }
#define debugstr_w
Definition: kernel32.h:32
#define FIXME(fmt,...)
Definition: debug.h:110
#define TRACE(s)
Definition: solgame.cpp:4
Arabic default style
Definition: afstyles.h:93

Referenced by gdip_get_font_metrics(), GdipGetFontHeightGivenDPI(), FontFamily::GetLineSpacing(), test_fontfamily_properties(), and test_logfont().

◆ GdipGetLogFontA()

GpStatus WINGDIPAPI GdipGetLogFontA ( GpFont font,
GpGraphics graphics,
LOGFONTA lfa 
)

Definition at line 432 of file font.c.

434 {
436  LOGFONTW lfw;
437 
438  TRACE("(%p, %p, %p)\n", font, graphics, lfa);
439 
440  status = GdipGetLogFontW(font, graphics, &lfw);
441  if(status != Ok)
442  return status;
443 
444  memcpy(lfa, &lfw, FIELD_OFFSET(LOGFONTA,lfFaceName) );
445 
447  return GenericError;
448 
449  return Ok;
450 }
GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, LOGFONTW *lf)
Definition: font.c:455
#define LF_FACESIZE
Definition: dimm.idl:39
#define WideCharToMultiByte
Definition: compat.h:101
Definition: mk_font.cpp:20
#define CP_ACP
Definition: compat.h:99
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4
#define memcpy(s1, s2, n)
Definition: mkisofs.h:878
Status
Definition: gdiplustypes.h:24
#define FIELD_OFFSET(t, f)
Definition: typedefs.h:254
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
CHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:55
static SERVICE_STATUS status
Definition: service.c:31
Definition: ps.c:97

Referenced by Font::GetLogFontA(), test_font_substitution(), test_font_transform(), and test_logfont().

◆ GdipGetLogFontW()

GpStatus WINGDIPAPI GdipGetLogFontW ( GpFont font,
GpGraphics graphics,
LOGFONTW lf 
)

Definition at line 455 of file font.c.

456 {
457  REAL angle, rel_height, height;
459  GpPointF pt[3];
460 
461  TRACE("(%p, %p, %p)\n", font, graphics, lf);
462 
463  if (!font || !graphics || !lf)
464  return InvalidParameter;
465 
466  matrix = graphics->worldtrans;
467 
468  if (font->unit == UnitPixel || font->unit == UnitWorld)
469  {
470  height = units_to_pixels(font->emSize, graphics->unit, graphics->yres);
471  if (graphics->unit != UnitDisplay)
472  GdipScaleMatrix(&matrix, graphics->scale, graphics->scale, MatrixOrderAppend);
473  }
474  else
475  {
476  if (graphics->unit == UnitDisplay || graphics->unit == UnitPixel)
477  height = units_to_pixels(font->emSize, font->unit, graphics->xres);
478  else
479  height = units_to_pixels(font->emSize, font->unit, graphics->yres);
480  }
481 
482  pt[0].X = 0.0;
483  pt[0].Y = 0.0;
484  pt[1].X = 1.0;
485  pt[1].Y = 0.0;
486  pt[2].X = 0.0;
487  pt[2].Y = 1.0;
489  angle = -gdiplus_atan2((pt[1].Y - pt[0].Y), (pt[1].X - pt[0].X));
490  rel_height = sqrt((pt[2].Y - pt[0].Y) * (pt[2].Y - pt[0].Y)+
491  (pt[2].X - pt[0].X) * (pt[2].X - pt[0].X));
492 
493  lf->lfHeight = -gdip_round(height * rel_height);
494  lf->lfWidth = 0;
495  lf->lfEscapement = lf->lfOrientation = gdip_round((angle / M_PI) * 1800.0);
496  if (lf->lfEscapement < 0)
497  {
498  lf->lfEscapement += 3600;
499  lf->lfOrientation += 3600;
500  }
501  lf->lfWeight = font->otm.otmTextMetrics.tmWeight;
502  lf->lfItalic = font->otm.otmTextMetrics.tmItalic ? 1 : 0;
503  lf->lfUnderline = font->otm.otmTextMetrics.tmUnderlined ? 1 : 0;
504  lf->lfStrikeOut = font->otm.otmTextMetrics.tmStruckOut ? 1 : 0;
505  lf->lfCharSet = font->otm.otmTextMetrics.tmCharSet;
509  lf->lfPitchAndFamily = 0;
510  strcpyW(lf->lfFaceName, font->family->FamilyName);
511 
512  TRACE("=> %s,%d\n", debugstr_w(lf->lfFaceName), lf->lfHeight);
513 
514  return Ok;
515 }
_STLP_DECLSPEC complex< float > _STLP_CALL sqrt(const complex< float > &)
Definition: complex.cpp:188
BYTE lfPitchAndFamily
Definition: dimm.idl:71
#define DEFAULT_QUALITY
Definition: wingdi.h:435
#define Y(I)
Definition: mk_font.cpp:20
#define pt(x, y)
Definition: drawing.c:79
GLuint GLenum matrix
Definition: glext.h:9407
LONG lfHeight
Definition: dimm.idl:59
BYTE lfCharSet
Definition: dimm.idl:67
BYTE lfClipPrecision
Definition: dimm.idl:69
LONG lfEscapement
Definition: dimm.idl:61
GLfloat angle
Definition: glext.h:10853
LONG lfOrientation
Definition: dimm.idl:62
#define debugstr_w
Definition: kernel32.h:32
#define CLIP_DEFAULT_PRECIS
Definition: wingdi.h:425
LONG lfWidth
Definition: dimm.idl:60
static LPTEXTMETRICW LONG * height
Definition: font.c:42
static INT gdip_round(REAL x)
BYTE lfOutPrecision
Definition: dimm.idl:68
#define TRACE(s)
Definition: solgame.cpp:4
#define OUT_DEFAULT_PRECIS
Definition: wingdi.h:414
BYTE lfQuality
Definition: dimm.idl:70
GpStatus WINGDIPAPI GdipScaleMatrix(GpMatrix *matrix, REAL scaleX, REAL scaleY, GpMatrixOrder order)
Definition: matrix.c:289
REAL gdiplus_atan2(REAL dy, REAL dx)
Definition: gdiplus.c:304
GpMatrix worldtrans
GLint GLint GLsizei GLsizei height
Definition: gl.h:1546
GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count)
Definition: matrix.c:363
WINE_UNICODE_INLINE WCHAR * strcpyW(WCHAR *dst, const WCHAR *src)
Definition: unicode.h:219
BYTE lfStrikeOut
Definition: dimm.idl:66
BYTE lfItalic
Definition: dimm.idl:64
#define M_PI
Definition: macros.h:263
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
REAL units_to_pixels(REAL units, GpUnit unit, REAL dpi)
Definition: gdiplus.c:327
LONG lfWeight
Definition: dimm.idl:63
float REAL
Definition: types.h:41
BYTE lfUnderline
Definition: dimm.idl:65

Referenced by GdipGetLogFontA(), Font::GetLogFontW(), test_font_metrics(), and test_GdipMeasureString().

◆ GdipIsStyleAvailable()

GpStatus WINGDIPAPI GdipIsStyleAvailable ( GDIPCONST GpFontFamily family,
INT  style,
BOOL IsStyleAvailable 
)

Definition at line 976 of file font.c.

978 {
979  HDC hdc;
980 
981  TRACE("%p %d %p\n", family, style, IsStyleAvailable);
982 
983  if (!(family && IsStyleAvailable))
984  return InvalidParameter;
985 
986  *IsStyleAvailable = FALSE;
987 
988  hdc = CreateCompatibleDC(0);
989 
990  if(!EnumFontFamiliesW(hdc, family->FamilyName, font_has_style_proc, (LPARAM)style))
991  *IsStyleAvailable = TRUE;
992 
993  DeleteDC(hdc);
994 
995  return Ok;
996 }
#define TRUE
Definition: types.h:120
static HDC
Definition: imagelist.c:92
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
int WINAPI EnumFontFamiliesW(HDC hdc, LPCWSTR lpszFamily, FONTENUMPROCW lpEnumFontFamProc, LPARAM lParam)
Definition: font.c:423
LONG_PTR LPARAM
Definition: windef.h:208
#define TRACE(s)
Definition: solgame.cpp:4
HDC hdc
Definition: main.c:9
static INT CALLBACK font_has_style_proc(const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
Definition: font.c:961
BOOL WINAPI DeleteDC(_In_ HDC)
Arabic default style
Definition: afstyles.h:93

Referenced by FontFamily::IsStyleAvailable().

◆ GdipNewInstalledFontCollection()

GpStatus WINGDIPAPI GdipNewInstalledFontCollection ( GpFontCollection **  fontCollection)

Definition at line 1679 of file font.c.

1681 {
1682  TRACE("(%p)\n",fontCollection);
1683 
1684  if (!fontCollection)
1685  return InvalidParameter;
1686 
1687  if (installedFontCollection.count == 0)
1688  {
1689  struct add_font_param param;
1690  HDC hdc;
1691  LOGFONTW lfw;
1692 
1693  hdc = CreateCompatibleDC(0);
1694 
1695  lfw.lfCharSet = DEFAULT_CHARSET;
1696  lfw.lfFaceName[0] = 0;
1697  lfw.lfPitchAndFamily = 0;
1698 
1699  param.collection = &installedFontCollection;
1700  param.is_system = TRUE;
1701  if (!EnumFontFamiliesExW(hdc, &lfw, add_font_proc, (LPARAM)&param, 0))
1702  {
1704  DeleteDC(hdc);
1705  return param.stat;
1706  }
1707 
1708  DeleteDC(hdc);
1709  }
1710 
1711  *fontCollection = &installedFontCollection;
1712 
1713  return Ok;
1714 }
int WINAPI EnumFontFamiliesExW(HDC hdc, LPLOGFONTW lpLogfont, FONTENUMPROCW lpEnumFontFamExProc, LPARAM lParam, DWORD dwFlags)
Definition: font.c:400
#define TRUE
Definition: types.h:120
BYTE lfPitchAndFamily
Definition: dimm.idl:71
static INT CALLBACK add_font_proc(const LOGFONTW *lfw, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
Definition: font.c:1617
BYTE lfCharSet
Definition: dimm.idl:67
static HDC
Definition: imagelist.c:92
void free_installed_fonts(void)
Definition: font.c:1608
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
static GpFontCollection installedFontCollection
Definition: font.c:121
#define DEFAULT_CHARSET
Definition: wingdi.h:383
LONG_PTR LPARAM
Definition: windef.h:208
#define TRACE(s)
Definition: solgame.cpp:4
GLfloat param
Definition: glext.h:5796
HDC hdc
Definition: main.c:9
BOOL WINAPI DeleteDC(_In_ HDC)
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72

Referenced by test_GdipGetFontCollectionFamilyCount(), test_GdipGetFontCollectionFamilyList(), and test_installedfonts().

◆ GdipNewPrivateFontCollection()

GpStatus WINGDIPAPI GdipNewPrivateFontCollection ( GpFontCollection **  fontCollection)

Definition at line 1096 of file font.c.

1097 {
1098  TRACE("%p\n", fontCollection);
1099 
1100  if (!fontCollection)
1101  return InvalidParameter;
1102 
1103  *fontCollection = heap_alloc_zero(sizeof(GpFontCollection));
1104  if (!*fontCollection) return OutOfMemory;
1105 
1106  (*fontCollection)->FontFamilies = NULL;
1107  (*fontCollection)->count = 0;
1108  (*fontCollection)->allocated = 0;
1109 
1110  TRACE("<-- %p\n", *fontCollection);
1111 
1112  return Ok;
1113 }
smooth NULL
Definition: ftsmooth.c:416
#define TRACE(s)
Definition: solgame.cpp:4

Referenced by test_long_name().

◆ GdipPrivateAddFontFile()

GpStatus WINGDIPAPI GdipPrivateAddFontFile ( GpFontCollection collection,
GDIPCONST WCHAR name 
)

Definition at line 1137 of file font.c.

1138 {
1139  HANDLE file, mapping;
1141  void *mem;
1142  GpStatus status;
1143 
1144  TRACE("%p, %s\n", collection, debugstr_w(name));
1145 
1146  if (!collection || !name) return InvalidParameter;
1147 
1150 
1151  if (!GetFileSizeEx(file, &size) || size.u.HighPart)
1152  {
1153  CloseHandle(file);
1154  return InvalidParameter;
1155  }
1156 
1158  CloseHandle(file);
1159  if (!mapping) return InvalidParameter;
1160 
1161  mem = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, 0);
1163  if (!mem) return InvalidParameter;
1164 
1165  /* GdipPrivateAddMemoryFont creates a copy of the memory block */
1168 
1169  return status;
1170 }
#define CloseHandle
Definition: compat.h:398
#define MapViewOfFile
Definition: compat.h:402
#define INVALID_HANDLE_VALUE
Definition: compat.h:391
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
#define FILE_MAP_READ
Definition: compat.h:427
#define OPEN_EXISTING
Definition: compat.h:426
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
#define CreateFileMappingW(a, b, c, d, e, f)
Definition: compat.h:401
const char file[]
Definition: icontest.c:11
GLenum GLenum GLenum GLenum mapping
Definition: glext.h:9031
#define GetFileSizeEx
Definition: compat.h:414
#define GENERIC_READ
Definition: compat.h:124
Status
Definition: gdiplustypes.h:24
static const WORD INT INT LPINT LPINT LPSIZE size
Definition: font.c:53
static ICollection collection
Definition: typelib.c:184
#define PAGE_READONLY
Definition: compat.h:127
GpStatus WINGDIPAPI GdipPrivateAddMemoryFont(GpFontCollection *fontCollection, GDIPCONST void *memory, INT length)
Definition: font.c:1509
#define CreateFileW
Definition: compat.h:400
Definition: mem.c:156
Definition: name.c:36
#define UnmapViewOfFile
Definition: compat.h:403
static SERVICE_STATUS status
Definition: service.c:31
Definition: fci.c:126
Definition: ps.c:97

Referenced by test_long_name().

◆ GdipPrivateAddMemoryFont()

GpStatus WINGDIPAPI GdipPrivateAddMemoryFont ( GpFontCollection fontCollection,
GDIPCONST void memory,
INT  length 
)

Definition at line 1509 of file font.c.

1511 {
1512  WCHAR *name;
1513  DWORD count = 0;
1514  HANDLE font;
1515  GpStatus ret = Ok;
1516  TRACE("%p, %p, %d\n", fontCollection, memory, length);
1517 
1518  if (!fontCollection || !memory || !length)
1519  return InvalidParameter;
1520 
1522  if (!name)
1523  return OutOfMemory;
1524 
1526  TRACE("%s: %p/%u\n", debugstr_w(name), font, count);
1527  if (!font || !count)
1529  else
1530  {
1531  struct add_font_param param;
1532  HDC hdc;
1533  LOGFONTW lfw;
1534 
1535  hdc = CreateCompatibleDC(0);
1536 
1537  /* Truncate name if necessary, GDI32 can't deal with long names */
1538  if(lstrlenW(name) > LF_FACESIZE - 1)
1539  name[LF_FACESIZE - 1] = 0;
1540 
1541  lfw.lfCharSet = DEFAULT_CHARSET;
1542  lstrcpyW(lfw.lfFaceName, name);
1543  lfw.lfPitchAndFamily = 0;
1544 
1545  param.collection = fontCollection;
1546  param.is_system = FALSE;
1547  if (!EnumFontFamiliesExW(hdc, &lfw, add_font_proc, (LPARAM)&param, 0))
1548  ret = param.stat;
1549 
1550  DeleteDC(hdc);
1551  }
1552  heap_free(name);
1553  return ret;
1554 }
int WINAPI EnumFontFamiliesExW(HDC hdc, LPLOGFONTW lpLogfont, FONTENUMPROCW lpEnumFontFamExProc, LPARAM lParam, DWORD dwFlags)
Definition: font.c:400
#define LF_FACESIZE
Definition: dimm.idl:39
BYTE lfPitchAndFamily
Definition: dimm.idl:71
Definition: mk_font.cpp:20
GLuint GLuint GLsizei count
Definition: gl.h:1545
static INT CALLBACK add_font_proc(const LOGFONTW *lfw, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam)
Definition: font.c:1617
HANDLE WINAPI AddFontMemResourceEx(PVOID pbFont, DWORD cbFont, PVOID pdv, DWORD *pcFonts)
Definition: font.c:2455
BYTE lfCharSet
Definition: dimm.idl:67
static HDC
Definition: imagelist.c:92
HDC WINAPI CreateCompatibleDC(_In_opt_ HDC hdc)
#define DEFAULT_CHARSET
Definition: wingdi.h:383
#define lstrlenW
Definition: compat.h:407
static char memory[1024 *256]
Definition: process.c:116
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
LONG_PTR LPARAM
Definition: windef.h:208
#define TRACE(s)
Definition: solgame.cpp:4
__wchar_t WCHAR
Definition: xmlstorage.h:180
GLenum GLuint GLenum GLsizei length
Definition: glext.h:5579
#define NAME_ID_FULL_FONT_NAME
Definition: font.c:1185
GLfloat param
Definition: glext.h:5796
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
HDC hdc
Definition: main.c:9
Status
Definition: gdiplustypes.h:24
#define lstrcpyW
Definition: compat.h:406
BOOL WINAPI DeleteDC(_In_ HDC)
Definition: name.c:36
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
static WCHAR * load_ttf_name_id(const BYTE *mem, DWORD_PTR size, DWORD id)
Definition: font.c:1426
static BOOL heap_free(void *mem)
Definition: appwiz.h:75
GLuint const GLchar * name
Definition: glext.h:6031

Referenced by GdipPrivateAddFontFile().

◆ get_font_metrics()

static BOOL get_font_metrics ( HDC  hdc,
struct font_metrics fm 
)
static

Definition at line 654 of file font.c.

655 {
656  OUTLINETEXTMETRICW otm;
657  TT_OS2_V2 tt_os2;
658  TT_HHEA tt_hori;
659  LONG size;
660  UINT16 line_gap;
661 
662  otm.otmSize = sizeof(otm);
663  if (!GetOutlineTextMetricsW(hdc, otm.otmSize, &otm)) return FALSE;
664 
665  fm->em_height = otm.otmEMSquare;
667 
668  memset(&tt_hori, 0, sizeof(tt_hori));
669  if (GetFontData(hdc, MS_HHEA_TAG, 0, &tt_hori, sizeof(tt_hori)) != GDI_ERROR)
670  {
671  fm->ascent = GET_BE_WORD(tt_hori.Ascender);
672  fm->descent = -GET_BE_WORD(tt_hori.Descender);
673  TRACE("hhea: ascent %d, descent %d\n", fm->ascent, fm->descent);
674  line_gap = GET_BE_WORD(tt_hori.LineGap);
675  fm->line_spacing = fm->ascent + fm->descent + line_gap;
676  TRACE("line_gap %u, line_spacing %u\n", line_gap, fm->line_spacing);
677  if (fm->ascent + fm->descent != 0) return TRUE;
678  }
679 
680  size = GetFontData(hdc, MS_OS2_TAG, 0, NULL, 0);
681  if (size == GDI_ERROR) return FALSE;
682 
683  if (size > sizeof(tt_os2)) size = sizeof(tt_os2);
684 
685  memset(&tt_os2, 0, sizeof(tt_os2));
686  if (GetFontData(hdc, MS_OS2_TAG, 0, &tt_os2, size) != size) return FALSE;
687 
688  fm->ascent = GET_BE_WORD(tt_os2.usWinAscent);
689  fm->descent = GET_BE_WORD(tt_os2.usWinDescent);
690  TRACE("usWinAscent %u, usWinDescent %u\n", fm->ascent, fm->descent);
691  if (fm->ascent + fm->descent == 0)
692  {
693  fm->ascent = GET_BE_WORD(tt_os2.sTypoAscender);
694  fm->descent = GET_BE_WORD(tt_os2.sTypoDescender);
695  TRACE("sTypoAscender %u, sTypoDescender %u\n", fm->ascent, fm->descent);
696  }
697  line_gap = GET_BE_WORD(tt_os2.sTypoLineGap);
698  fm->line_spacing = fm->ascent + fm->descent + line_gap;
699  TRACE("line_gap %u, line_spacing %u\n", line_gap, fm->line_spacing);
700  return TRUE;
701 }
#define TRUE
Definition: types.h:120
SHORT LineGap
Definition: font.c:91
Definition: font.c:39
UINT APIENTRY GetOutlineTextMetricsW(HDC hdc, UINT cbData, LPOUTLINETEXTMETRICW lpOTM)
Definition: font.c:1401
USHORT usWinDescent
Definition: font.c:74
DWORD WINAPI GetFontData(HDC hdc, DWORD dwTable, DWORD dwOffset, LPVOID lpvBuffer, DWORD cbData)
Definition: font.c:2654
SHORT Ascender
Definition: font.c:89
long LONG
Definition: pedump.c:60
smooth NULL
Definition: ftsmooth.c:416
Definition: font.c:86
#define MS_OS2_TAG
Definition: font.c:116
int dpi
Definition: font.c:651
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
USHORT usWinAscent
Definition: font.c:73
USHORT sTypoAscender
Definition: font.c:70
SHORT Descender
Definition: font.c:90
HDC hdc
Definition: main.c:9
int WINAPI GetDeviceCaps(_In_opt_ HDC, _In_ int)
UINT16 line_spacing
Definition: font.c:650
USHORT sTypoDescender
Definition: font.c:71
static const WORD INT INT LPINT LPINT LPSIZE size
Definition: font.c:53
#define GET_BE_WORD(x)
Definition: font.c:109
UINT16 ascent
Definition: font.c:650
UINT16 descent
Definition: font.c:650
unsigned short UINT16
#define MS_HHEA_TAG
Definition: font.c:117
#define LOGPIXELSY
Definition: wingdi.h:718
USHORT sTypoLineGap
Definition: font.c:72
#define GDI_ERROR
Definition: wingdi.h:1291
#define memset(x, y, z)
Definition: compat.h:39
UINT16 em_height
Definition: font.c:650

Referenced by find_installed_font().

◆ get_font_size()

static REAL get_font_size ( const GpFont font)
static

Definition at line 329 of file font.c.

330 {
331  return font->emSize;
332 }
Definition: mk_font.cpp:20

Referenced by GdipGetFontHeightGivenDPI(), and GdipGetFontSize().

◆ get_font_style()

static INT get_font_style ( const GpFont font)
static

Definition at line 362 of file font.c.

363 {
364  INT style;
365 
366  if (font->otm.otmTextMetrics.tmWeight > FW_REGULAR)
368  else
370  if (font->otm.otmTextMetrics.tmItalic)
372  if (font->otm.otmTextMetrics.tmUnderlined)
374  if (font->otm.otmTextMetrics.tmStruckOut)
376 
377  return style;
378 }
Definition: mk_font.cpp:20
int32_t INT
Definition: typedefs.h:56
#define FW_REGULAR
Definition: wingdi.h:373
Arabic default style
Definition: afstyles.h:93

Referenced by GdipGetFontHeightGivenDPI(), and GdipGetFontStyle().

◆ get_mac_code_page()

static WORD get_mac_code_page ( const tt_name_record name)
inlinestatic

Definition at line 1344 of file font.c.

1345 {
1346  WORD encoding_id = GET_BE_WORD(name->encoding_id);
1347  if (encoding_id == TT_MAC_ID_SIMPLIFIED_CHINESE) return 10008; /* special case */
1348  return 10000 + encoding_id;
1349 }
unsigned short WORD
Definition: ntddk_ex.h:93
#define GET_BE_WORD(x)
Definition: font.c:109
Definition: name.c:36
#define TT_MAC_ID_SIMPLIFIED_CHINESE
Definition: font.c:1183

Referenced by copy_name_table_string(), and match_name_table_language().

◆ is_font_installed_proc()

static INT CALLBACK is_font_installed_proc ( const LOGFONTW elf,
const TEXTMETRICW ntm,
DWORD  type,
LPARAM  lParam 
)
static

Definition at line 632 of file font.c.

634 {
635  const ENUMLOGFONTW *elfW = (const ENUMLOGFONTW *)elf;
636  LOGFONTW *lf = (LOGFONTW *)lParam;
637 
638  if (type & RASTER_FONTTYPE)
639  return 1;
640 
641  *lf = *elf;
642  /* replace substituted font name by a real one */
644  return 0;
645 }
#define LF_FACESIZE
Definition: dimm.idl:39
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
#define lstrcpynW
Definition: compat.h:397
#define RASTER_FONTTYPE
Definition: wingdi.h:1089
WCHAR elfFullName[LF_FULLFACESIZE]
Definition: wingdi.h:2670
WCHAR lfFaceName[LF_FACESIZE]
Definition: dimm.idl:72
LPARAM lParam
Definition: combotst.c:139

Referenced by find_installed_font().

◆ load_ttf_name_id()

static WCHAR* load_ttf_name_id ( const BYTE mem,
DWORD_PTR  size,
DWORD  id 
)
static

Definition at line 1426 of file font.c.

1427 {
1429  const tt_header *header;
1430  const tt_name_table *name_table;
1431  const tt_name_record *name_record;
1432  DWORD pos, ofs, count;
1433  int i, res, best_lang = 0, best_index = -1;
1434 
1435  if (sizeof(tt_header) > size)
1436  return NULL;
1437  header = (const tt_header*)mem;
1438  count = GET_BE_WORD(header->tables_no);
1439 
1440  if (GET_BE_WORD(header->major_version) != 1 || GET_BE_WORD(header->minor_version) != 0)
1441  return NULL;
1442 
1443  pos = sizeof(*header);
1444  for (i = 0; i < count; i++)
1445  {
1446  const tt_table_directory *table_directory = (const tt_table_directory*)&mem[pos];
1447  pos += sizeof(*table_directory);
1448  if (memcmp(table_directory->tag, "name", 4) == 0)
1449  {
1450  ofs = GET_BE_DWORD(table_directory->offset);
1451  break;
1452  }
1453  }
1454  if (i >= count)
1455  return NULL;
1456 
1457  if (ofs >= size)
1458  return NULL;
1459  pos = ofs + sizeof(*name_table);
1460  if (pos > size)
1461  return NULL;
1462  name_table = (const tt_name_table*)&mem[ofs];
1463  count = GET_BE_WORD(name_table->count);
1464  if (GET_BE_WORD(name_table->string_offset) >= size - ofs) return NULL;
1465  ofs += GET_BE_WORD(name_table->string_offset);
1466  for (i=0; i<count; i++)
1467  {
1468  name_record = (const tt_name_record*)&mem[pos];
1469  pos += sizeof(*name_record);
1470  if (pos > size)
1471  return NULL;
1472 
1473  if (GET_BE_WORD(name_record->name_id) != id) continue;
1474  if (GET_BE_WORD(name_record->offset) >= size - ofs) return NULL;
1475  if (GET_BE_WORD(name_record->length) > size - ofs - GET_BE_WORD(name_record->offset)) return NULL;
1476 
1477  res = match_name_table_language( name_record, lang );
1478  if (res > best_lang)
1479  {
1480  best_lang = res;
1481  best_index = i;
1482  }
1483  }
1484 
1485  if (best_lang)
1486  {
1487  WCHAR *ret;
1488  name_record = (const tt_name_record*)(name_table + 1) + best_index;
1489  ret = copy_name_table_string( name_record, mem+ofs+GET_BE_WORD(name_record->offset) );
1490  TRACE( "name %u found platform %u lang %04x %s\n", GET_BE_WORD(name_record->name_id),
1491  GET_BE_WORD(name_record->platform_id), GET_BE_WORD(name_record->language_id), debugstr_w( ret ));
1492  return ret;
1493  }
1494  return NULL;
1495 }
int memcmp(void *Buffer1, void *Buffer2, ACPI_SIZE Count)
Definition: utclib.c:112
GLuint GLuint GLsizei count
Definition: gl.h:1545
static WCHAR * copy_name_table_string(const tt_name_record *name, const BYTE *data)
Definition: font.c:1397
USHORT offset
Definition: font.c:1215
USHORT name_id
Definition: font.c:1213
WORD LANGID
Definition: typedefs.h:79
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define debugstr_w
Definition: kernel32.h:32
smooth NULL
Definition: ftsmooth.c:416
USHORT platform_id
Definition: font.c:1210
USHORT length
Definition: font.c:1214
static int match_name_table_language(const tt_name_record *name, LANGID lang)
Definition: font.c:1351
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define GET_BE_DWORD(x)
Definition: font.c:110
#define TRACE(s)
Definition: solgame.cpp:4
GLsizeiptr size
Definition: glext.h:5919
__wchar_t WCHAR
Definition: xmlstorage.h:180
static UINT UINT count
Definition: font.c:44
LANGID WINAPI GetSystemDefaultLangID(void)
Definition: lang.c:751
unsigned long DWORD
Definition: ntddk_ex.h:95
int ret
char tag[4]
Definition: font.c:1197
#define GET_BE_WORD(x)
Definition: font.c:109
USHORT language_id
Definition: font.c:1212
Definition: mem.c:156
GLuint res
Definition: glext.h:9613
GLenum GLuint id
Definition: glext.h:5579
struct CFHEADER header
Definition: fdi.c:109

Referenced by GdipPrivateAddMemoryFont().

◆ match_name_table_language()

static int match_name_table_language ( const tt_name_record name,
LANGID  lang 
)
static

Definition at line 1351 of file font.c.

1352 {
1353  LANGID name_lang;
1354 
1355  switch (GET_BE_WORD(name->platform_id))
1356  {
1357  case TT_PLATFORM_MICROSOFT:
1358  switch (GET_BE_WORD(name->encoding_id))
1359  {
1360  case TT_MS_ID_UNICODE_CS:
1361  case TT_MS_ID_SYMBOL_CS:
1362  name_lang = GET_BE_WORD(name->language_id);
1363  break;
1364  default:
1365  return 0;
1366  }
1367  break;
1368  case TT_PLATFORM_MACINTOSH:
1369  if (!IsValidCodePage( get_mac_code_page( name ))) return 0;
1370  name_lang = GET_BE_WORD(name->language_id);
1371  if (name_lang >= ARRAY_SIZE(mac_langid_table)) return 0;
1372  name_lang = mac_langid_table[name_lang];
1373  break;
1375  switch (GET_BE_WORD(name->encoding_id))
1376  {
1377  case TT_APPLE_ID_DEFAULT:
1378  case TT_APPLE_ID_ISO_10646:
1380  name_lang = GET_BE_WORD(name->language_id);
1381  if (name_lang >= ARRAY_SIZE(mac_langid_table)) return 0;
1382  name_lang = mac_langid_table[name_lang];
1383  break;
1384  default:
1385  return 0;
1386  }
1387  break;
1388  default:
1389  return 0;
1390  }
1391  if (name_lang == lang) return 3;
1392  if (PRIMARYLANGID( name_lang ) == PRIMARYLANGID( lang )) return 2;
1393  if (name_lang == MAKELANGID( LANG_ENGLISH, SUBLANG_DEFAULT )) return 1;
1394  return 0;
1395 }
#define TT_APPLE_ID_DEFAULT
Definition: font.c:1176
#define TT_APPLE_ID_ISO_10646
Definition: font.c:1177
#define TT_APPLE_ID_UNICODE_2_0
Definition: font.c:1178
#define SUBLANG_DEFAULT
Definition: nls.h:168
WORD LANGID
Definition: typedefs.h:79
#define TT_MS_ID_UNICODE_CS
Definition: font.c:1181
#define TT_PLATFORM_MICROSOFT
Definition: font.c:1174
#define TT_PLATFORM_APPLE_UNICODE
Definition: font.c:1172
static const WCHAR lang[]
Definition: wbemdisp.c:287
#define TT_PLATFORM_MACINTOSH
Definition: font.c:1173
#define LANG_ENGLISH
Definition: nls.h:52
static WORD get_mac_code_page(const tt_name_record *name)
Definition: font.c:1344
static const LANGID mac_langid_table[]
Definition: font.c:1220
#define TT_MS_ID_SYMBOL_CS
Definition: font.c:1180
BOOL WINAPI IsValidCodePage(UINT CodePage)
Definition: nls.c:1468
#define GET_BE_WORD(x)
Definition: font.c:109
#define ARRAY_SIZE(a)
Definition: main.h:24
Definition: name.c:36
#define MAKELANGID(p, s)
Definition: nls.h:15
#define PRIMARYLANGID(l)
Definition: nls.h:16

Referenced by load_ttf_name_id().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( gdiplus  )

Variable Documentation

◆ installedFontCollection

GpFontCollection installedFontCollection = {0}
static

Definition at line 121 of file font.c.

Referenced by free_installed_fonts(), and GdipNewInstalledFontCollection().

◆ mac_langid_table

const LANGID mac_langid_table[]
static

Definition at line 1220 of file font.c.

Referenced by match_name_table_language().