]> git.saurik.com Git - wxWidgets.git/blame - src/mac/classic/fontenum.cpp
Override GetPixelSize on OS X as the base impl creates a wxScreenDC each time, which...
[wxWidgets.git] / src / mac / classic / fontenum.cpp
CommitLineData
2646f485 1///////////////////////////////////////////////////////////////////////////////
48a1108e 2// Name: src/mac/classic/fontenum.cpp
2646f485
SC
3// Purpose: wxFontEnumerator class for MacOS
4// Author: Stefan Csomor
48a1108e 5// Modified by:
2646f485
SC
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Stefan Csomor
65571936 9// Licence: wxWindows licence
2646f485
SC
10///////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
2646f485
SC
20// For compilers that support precompilation, includes "wx.h".
21#include "wx/wxprec.h"
22
23#ifdef __BORLANDC__
48a1108e 24 #pragma hdrstop
2646f485
SC
25#endif
26
27#ifndef WX_PRECOMP
48a1108e 28 #include "wx/font.h"
2646f485
SC
29#endif
30
31#include "wx/fontenum.h"
32#include "wx/fontutil.h"
33#include "wx/fontmap.h"
34#include "wx/fontutil.h"
35#include "wx/encinfo.h"
36
37#include "wx/mac/private.h"
38
39// ----------------------------------------------------------------------------
40// private classes
41// ----------------------------------------------------------------------------
42
43class wxFontEnumeratorHelper
44{
45public:
46 wxFontEnumeratorHelper(wxFontEnumerator *fontEnum);
47
48 // control what exactly are we enumerating
49 bool SetEncoding(wxFontEncoding encoding);
50 void SetFixedOnly(bool fixedOnly)
51 { m_fixedOnly = fixedOnly; }
52
53 // call to start enumeration
54 void DoEnumerate();
55
56private:
57 // the object we forward calls to OnFont() to
58 wxFontEnumerator *m_fontEnum;
59
60 // if != -1, enum only fonts which have this encoding
61 int m_charset;
62
63 // if not empty, enum only the fonts with this facename
64 wxString m_facename;
65
66 // if TRUE, enum only fixed fonts
67 bool m_fixedOnly;
68};
69// ============================================================================
70// implementation
71// ============================================================================
72
73// ----------------------------------------------------------------------------
74// wxFontEnumeratorHelper
75// ----------------------------------------------------------------------------
76
77wxFontEnumeratorHelper::wxFontEnumeratorHelper(wxFontEnumerator *fontEnum)
78{
79 m_fontEnum = fontEnum;
80 m_charset = -1;
48a1108e 81 m_fixedOnly = false;
2646f485
SC
82}
83
84bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding)
85{
86 wxNativeEncodingInfo info;
87 if ( !wxGetNativeFontEncoding(encoding, &info) )
88 {
89 if ( !wxFontMapper::Get()->GetAltForEncoding(encoding, &info) )
90 {
91 // no such encodings at all
48a1108e 92 return false;
2646f485
SC
93 }
94 }
95 m_charset = info.charset;
96 m_facename = info.facename;
97
48a1108e 98 return true;
2646f485
SC
99}
100
101void wxFontEnumeratorHelper::DoEnumerate()
102{
103 MenuHandle menu ;
104 Str255 p_name ;
105
106 short lines ;
48a1108e 107
2646f485
SC
108 menu = NewMenu( 32000 , "\pFont" ) ;
109 AppendResMenu( menu , 'FONT' ) ;
110 lines = CountMenuItems( menu ) ;
111
112 for ( int i = 1 ; i < lines+1 ; i ++ )
113 {
114 GetMenuItemText( menu , i , p_name ) ;
115 wxString c_name = wxMacMakeStringFromPascal(p_name) ;
116
117 /*
48a1108e 118
2646f485
SC
119 if ( m_fixedOnly )
120 {
121 // check that it's a fixed pitch font (there is *no* error here, the
122 // flag name is misleading!)
123 if ( tm->tmPitchAndFamily & TMPF_FIXED_PITCH )
124 {
125 // not a fixed pitch font
126 return TRUE;
127 }
128 }
48a1108e 129
2646f485
SC
130 if ( m_charset != -1 )
131 {
132 // check that we have the right encoding
133 if ( lf->lfCharSet != m_charset )
134 {
135 return TRUE;
136 }
137 }
48a1108e 138
2646f485
SC
139 */
140 m_fontEnum->OnFacename( c_name ) ;
141 }
142 DisposeMenu( menu ) ;
143}
144
145// ----------------------------------------------------------------------------
146// wxFontEnumerator
147// ----------------------------------------------------------------------------
148
149bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
150 bool fixedWidthOnly)
151{
152 wxFontEnumeratorHelper fe(this);
153 if ( fe.SetEncoding(encoding) )
154 {
155 fe.SetFixedOnly(fixedWidthOnly);
156
157 fe.DoEnumerate();
158 }
159 // else: no such fonts, unknown encoding
160
48a1108e 161 return true;
2646f485
SC
162}
163
164bool wxFontEnumerator::EnumerateEncodings(const wxString& family)
165{
166 wxFAIL_MSG(wxT("wxFontEnumerator::EnumerateEncodings() not yet implemented"));
167
48a1108e 168 return true;
2646f485 169}