]> git.saurik.com Git - wxWidgets.git/blame - src/mac/carbon/fontenum.cpp
applied (slightly modified) wxToggleButton patch from John Norris and Axel Schlueter
[wxWidgets.git] / src / mac / carbon / fontenum.cpp
CommitLineData
ee6b1d97
SC
1///////////////////////////////////////////////////////////////////////////////
2// Name: mac/fontenum.cpp
3// Purpose: wxFontEnumerator class for MacOS
4// Author: Stefan Csomor
5// Modified by:
6// Created: 04/01/98
7// RCS-ID: $Id$
8// Copyright: (c) Stefan Csomor
9// Licence: wxWindows licence
10///////////////////////////////////////////////////////////////////////////////
11
12// ============================================================================
13// declarations
14// ============================================================================
15
16// ----------------------------------------------------------------------------
17// headers
18// ----------------------------------------------------------------------------
19
20#ifdef __GNUG__
21 #pragma implementation "fontenum.h"
22#endif
23
24// For compilers that support precompilation, includes "wx.h".
25#include "wx/wxprec.h"
26
27#ifdef __BORLANDC__
28 #pragma hdrstop
29#endif
30
31#ifndef WX_PRECOMP
32 #include "wx/font.h"
33#endif
34
35#include "wx/fontenum.h"
36#include "wx/fontmap.h"
3b7e6277 37#include "wx/fontutil.h"
ee6b1d97
SC
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;
81 m_fixedOnly = FALSE;
82}
83
84bool wxFontEnumeratorHelper::SetEncoding(wxFontEncoding encoding)
85{
86 wxNativeEncodingInfo info;
87 if ( !wxGetNativeFontEncoding(encoding, &info) )
88 {
89 if ( !wxTheFontMapper->GetAltForEncoding(encoding, &info) )
90 {
91 // no such encodings at all
92 return FALSE;
93 }
94 }
95 m_charset = info.charset;
96 m_facename = info.facename;
97
98 return TRUE;
99}
100
101void wxFontEnumeratorHelper::DoEnumerate()
102{
103 MenuHandle menu ;
104 Str255 name ;
105 short lines ;
106
107 menu = NewMenu( 32000 , "\pFont" ) ;
108 AppendResMenu( menu , 'FONT' ) ;
109 lines = CountMenuItems( menu ) ;
110
111 for ( int i = 1 ; i < lines+1 ; i ++ )
112 {
113 GetMenuItemText( menu , i , name ) ;
114 p2cstr( name ) ;
115 /*
116
117 if ( m_fixedOnly )
118 {
119 // check that it's a fixed pitch font (there is *no* error here, the
120 // flag name is misleading!)
121 if ( tm->tmPitchAndFamily & TMPF_FIXED_PITCH )
122 {
123 // not a fixed pitch font
124 return TRUE;
125 }
126 }
127
128 if ( m_charset != -1 )
129 {
130 // check that we have the right encoding
131 if ( lf->lfCharSet != m_charset )
132 {
133 return TRUE;
134 }
135 }
136
137 */
138 m_fontEnum->OnFacename( name ) ;
139 }
140 DisposeMenu( menu ) ;
141}
142
143// ----------------------------------------------------------------------------
144// wxFontEnumerator
145// ----------------------------------------------------------------------------
146
147bool wxFontEnumerator::EnumerateFacenames(wxFontEncoding encoding,
148 bool fixedWidthOnly)
149{
150 wxFontEnumeratorHelper fe(this);
151 if ( fe.SetEncoding(encoding) )
152 {
153 fe.SetFixedOnly(fixedWidthOnly);
154
155 fe.DoEnumerate();
156 }
157 // else: no such fonts, unknown encoding
158
159 return TRUE;
160}
161
162bool wxFontEnumerator::EnumerateEncodings(const wxString& family)
163{
164 wxFAIL_MSG(wxT("TODO"));
165
166 return TRUE;
167}