applied wxNativeFontInfo patch from Derry Bryson (with minor changes)
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@8934 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -67,6 +67,40 @@ enum wxFontWeight
|
|||||||
wxFONTWEIGHT_MAX
|
wxFONTWEIGHT_MAX
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxNativeFontInfo is platform-specific font representation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// this struct should be considered as opaque font description only used by
|
||||||
|
// the native functions, the user code can only get the objects of this type
|
||||||
|
// from somewhere and pass it somewhere else (possibly save them somewhere
|
||||||
|
// using ToString() and restore them using FromString())
|
||||||
|
struct WXDLLEXPORT wxNativeFontInfo
|
||||||
|
{
|
||||||
|
#if defined(__WXGTK__)
|
||||||
|
wxString xFontName;
|
||||||
|
#else // other platforms
|
||||||
|
//
|
||||||
|
// This is a generic implementation that should work on all ports
|
||||||
|
// without specific support by the port.
|
||||||
|
//
|
||||||
|
int pointSize;
|
||||||
|
int family;
|
||||||
|
int style;
|
||||||
|
int weight;
|
||||||
|
bool underlined;
|
||||||
|
wxString faceName;
|
||||||
|
wxFontEncoding encoding;
|
||||||
|
#endif // platforms
|
||||||
|
|
||||||
|
// it is important to be able to serialize wxNativeFontInfo objects to be
|
||||||
|
// able to store them (in config file, for example)
|
||||||
|
bool FromString(const wxString& s);
|
||||||
|
wxString ToString() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
WXDLLEXPORT_DATA(extern wxNativeFontInfo) wxNullNativeFontInfo;
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxFontBase represents a font object
|
// wxFontBase represents a font object
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -85,6 +119,7 @@ public:
|
|||||||
bool underlined = FALSE, // not underlined by default
|
bool underlined = FALSE, // not underlined by default
|
||||||
const wxString& face = wxEmptyString, // facename
|
const wxString& face = wxEmptyString, // facename
|
||||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
|
wxFontEncoding encoding = wxFONTENCODING_DEFAULT); // ISO8859-X, ...
|
||||||
|
static wxFont *New(const wxNativeFontInfo& info);
|
||||||
|
|
||||||
// was the font successfully created?
|
// was the font successfully created?
|
||||||
bool Ok() const { return m_refData != NULL; }
|
bool Ok() const { return m_refData != NULL; }
|
||||||
@@ -101,6 +136,7 @@ public:
|
|||||||
virtual bool GetUnderlined() const = 0;
|
virtual bool GetUnderlined() const = 0;
|
||||||
virtual wxString GetFaceName() const = 0;
|
virtual wxString GetFaceName() const = 0;
|
||||||
virtual wxFontEncoding GetEncoding() const = 0;
|
virtual wxFontEncoding GetEncoding() const = 0;
|
||||||
|
virtual wxNativeFontInfo GetNativeFontInfo() const;
|
||||||
|
|
||||||
// change the font characteristics
|
// change the font characteristics
|
||||||
virtual void SetPointSize( int pointSize ) = 0;
|
virtual void SetPointSize( int pointSize ) = 0;
|
||||||
@@ -110,6 +146,7 @@ public:
|
|||||||
virtual void SetFaceName( const wxString& faceName ) = 0;
|
virtual void SetFaceName( const wxString& faceName ) = 0;
|
||||||
virtual void SetUnderlined( bool underlined ) = 0;
|
virtual void SetUnderlined( bool underlined ) = 0;
|
||||||
virtual void SetEncoding(wxFontEncoding encoding) = 0;
|
virtual void SetEncoding(wxFontEncoding encoding) = 0;
|
||||||
|
virtual void SetNativeFontInfo(const wxNativeFontInfo& info);
|
||||||
|
|
||||||
// translate the fonts into human-readable string (i.e. GetStyleString()
|
// translate the fonts into human-readable string (i.e. GetStyleString()
|
||||||
// will return "wxITALIC" for an italic font, ...)
|
// will return "wxITALIC" for an italic font, ...)
|
||||||
|
@@ -36,7 +36,8 @@ public:
|
|||||||
// ctors and such
|
// ctors and such
|
||||||
wxFont() { Init(); }
|
wxFont() { Init(); }
|
||||||
wxFont(const wxFont& font) { Init(); Ref(font); }
|
wxFont(const wxFont& font) { Init(); Ref(font); }
|
||||||
wxFont(const wxString& fontname, const wxFontData& fontdata);
|
wxFont(const wxString& fontname, const wxFontData& fontdata) { Create(fontname, fontdata); }
|
||||||
|
wxFont(const wxNativeFontInfo& info);
|
||||||
|
|
||||||
// assignment
|
// assignment
|
||||||
wxFont& operator=(const wxFont& font);
|
wxFont& operator=(const wxFont& font);
|
||||||
@@ -60,7 +61,10 @@ public:
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined = FALSE,
|
bool underlined = FALSE,
|
||||||
const wxString& face = wxEmptyString,
|
const wxString& face = wxEmptyString,
|
||||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo);
|
||||||
|
|
||||||
|
bool Create(const wxString& fontname, const wxFontData& fontdata);
|
||||||
|
|
||||||
~wxFont();
|
~wxFont();
|
||||||
|
|
||||||
@@ -72,6 +76,7 @@ public:
|
|||||||
virtual wxString GetFaceName() const;
|
virtual wxString GetFaceName() const;
|
||||||
virtual bool GetUnderlined() const;
|
virtual bool GetUnderlined() const;
|
||||||
virtual wxFontEncoding GetEncoding() const;
|
virtual wxFontEncoding GetEncoding() const;
|
||||||
|
virtual wxNativeFontInfo GetNativeFontInfo() const;
|
||||||
|
|
||||||
virtual void SetPointSize( int pointSize );
|
virtual void SetPointSize( int pointSize );
|
||||||
virtual void SetFamily( int family );
|
virtual void SetFamily( int family );
|
||||||
@@ -80,6 +85,7 @@ public:
|
|||||||
virtual void SetFaceName( const wxString& faceName );
|
virtual void SetFaceName( const wxString& faceName );
|
||||||
virtual void SetUnderlined( bool underlined );
|
virtual void SetUnderlined( bool underlined );
|
||||||
virtual void SetEncoding(wxFontEncoding encoding);
|
virtual void SetEncoding(wxFontEncoding encoding);
|
||||||
|
virtual void SetNativeFontInfo( const wxNativeFontInfo& info );
|
||||||
|
|
||||||
// implementation from now on
|
// implementation from now on
|
||||||
void Unshare();
|
void Unshare();
|
||||||
|
@@ -36,7 +36,8 @@ public:
|
|||||||
// ctors and such
|
// ctors and such
|
||||||
wxFont() { Init(); }
|
wxFont() { Init(); }
|
||||||
wxFont(const wxFont& font) { Init(); Ref(font); }
|
wxFont(const wxFont& font) { Init(); Ref(font); }
|
||||||
wxFont(const wxString& fontname, const wxFontData& fontdata);
|
wxFont(const wxString& fontname, const wxFontData& fontdata) { Create(fontname, fontdata); }
|
||||||
|
wxFont(const wxNativeFontInfo& info);
|
||||||
|
|
||||||
// assignment
|
// assignment
|
||||||
wxFont& operator=(const wxFont& font);
|
wxFont& operator=(const wxFont& font);
|
||||||
@@ -60,7 +61,10 @@ public:
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined = FALSE,
|
bool underlined = FALSE,
|
||||||
const wxString& face = wxEmptyString,
|
const wxString& face = wxEmptyString,
|
||||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo);
|
||||||
|
|
||||||
|
bool Create(const wxString& fontname, const wxFontData& fontdata);
|
||||||
|
|
||||||
~wxFont();
|
~wxFont();
|
||||||
|
|
||||||
@@ -72,6 +76,7 @@ public:
|
|||||||
virtual wxString GetFaceName() const;
|
virtual wxString GetFaceName() const;
|
||||||
virtual bool GetUnderlined() const;
|
virtual bool GetUnderlined() const;
|
||||||
virtual wxFontEncoding GetEncoding() const;
|
virtual wxFontEncoding GetEncoding() const;
|
||||||
|
virtual wxNativeFontInfo GetNativeFontInfo() const;
|
||||||
|
|
||||||
virtual void SetPointSize( int pointSize );
|
virtual void SetPointSize( int pointSize );
|
||||||
virtual void SetFamily( int family );
|
virtual void SetFamily( int family );
|
||||||
@@ -80,6 +85,7 @@ public:
|
|||||||
virtual void SetFaceName( const wxString& faceName );
|
virtual void SetFaceName( const wxString& faceName );
|
||||||
virtual void SetUnderlined( bool underlined );
|
virtual void SetUnderlined( bool underlined );
|
||||||
virtual void SetEncoding(wxFontEncoding encoding);
|
virtual void SetEncoding(wxFontEncoding encoding);
|
||||||
|
virtual void SetNativeFontInfo( const wxNativeFontInfo& info );
|
||||||
|
|
||||||
// implementation from now on
|
// implementation from now on
|
||||||
void Unshare();
|
void Unshare();
|
||||||
|
@@ -37,6 +37,14 @@ public:
|
|||||||
(void)Create(size, family, style, weight, underlined, face, encoding);
|
(void)Create(size, family, style, weight, underlined, face, encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxFont(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
|
||||||
|
(void)Create(info.pointSize, info.family, info.style, info.weight,
|
||||||
|
info.underlined, info.faceName, info.encoding);
|
||||||
|
}
|
||||||
|
|
||||||
bool Create(int size,
|
bool Create(int size,
|
||||||
int family,
|
int family,
|
||||||
int style,
|
int style,
|
||||||
|
@@ -40,6 +40,14 @@ public:
|
|||||||
(void)Create(size, family, style, weight, underlined, face, encoding);
|
(void)Create(size, family, style, weight, underlined, face, encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxFont(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Init();
|
||||||
|
|
||||||
|
(void)Create(info.pointSize, info.family, info.style, info.weight,
|
||||||
|
info.underlined, info.faceName, info.encoding);
|
||||||
|
}
|
||||||
|
|
||||||
bool Create(int size,
|
bool Create(int size,
|
||||||
int family,
|
int family,
|
||||||
int style,
|
int style,
|
||||||
|
@@ -21,12 +21,14 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
// returns the handle of the nearest available font or 0
|
// returns the handle of the nearest available font or 0
|
||||||
extern wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
extern wxNativeFont
|
||||||
int family,
|
wxLoadQueryNearestFont(int pointSize,
|
||||||
int style,
|
int family,
|
||||||
int weight,
|
int style,
|
||||||
bool underlined,
|
int weight,
|
||||||
const wxString &facename,
|
bool underlined,
|
||||||
wxFontEncoding encoding);
|
const wxString &facename,
|
||||||
|
wxFontEncoding encoding,
|
||||||
|
wxString* xFontName = (wxString *)NULL);
|
||||||
|
|
||||||
#endif // _WX_UNIX_FONTUTIL_H_
|
#endif // _WX_UNIX_FONTUTIL_H_
|
||||||
|
@@ -96,6 +96,8 @@ public:
|
|||||||
{ DoEnumerateFamilies(TRUE); }
|
{ DoEnumerateFamilies(TRUE); }
|
||||||
void OnEnumerateEncodings(wxCommandEvent& event);
|
void OnEnumerateEncodings(wxCommandEvent& event);
|
||||||
|
|
||||||
|
void OnCheckNativeToFromString(wxCommandEvent& event);
|
||||||
|
|
||||||
void OnSize(wxSizeEvent& event);
|
void OnSize(wxSizeEvent& event);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
@@ -136,7 +138,8 @@ enum
|
|||||||
Font_EnumFamilies,
|
Font_EnumFamilies,
|
||||||
Font_EnumFixedFamilies,
|
Font_EnumFixedFamilies,
|
||||||
Font_EnumEncodings,
|
Font_EnumEncodings,
|
||||||
Font_Max
|
Font_CheckNativeToFromString
|
||||||
|
Font_Max,
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -157,6 +160,7 @@ BEGIN_EVENT_TABLE(MyFrame, wxFrame)
|
|||||||
EVT_MENU(Font_EnumFamilies, MyFrame::OnEnumerateFamilies)
|
EVT_MENU(Font_EnumFamilies, MyFrame::OnEnumerateFamilies)
|
||||||
EVT_MENU(Font_EnumFixedFamilies, MyFrame::OnEnumerateFixedFamilies)
|
EVT_MENU(Font_EnumFixedFamilies, MyFrame::OnEnumerateFixedFamilies)
|
||||||
EVT_MENU(Font_EnumEncodings, MyFrame::OnEnumerateEncodings)
|
EVT_MENU(Font_EnumEncodings, MyFrame::OnEnumerateEncodings)
|
||||||
|
EVT_MENU(Font_CheckNativeToFromString, MyFrame::OnCheckNativeToFromString)
|
||||||
|
|
||||||
EVT_SIZE(MyFrame::OnSize)
|
EVT_SIZE(MyFrame::OnSize)
|
||||||
END_EVENT_TABLE()
|
END_EVENT_TABLE()
|
||||||
@@ -228,6 +232,9 @@ MyFrame::MyFrame(const wxString& title, const wxPoint& pos, const wxSize& size)
|
|||||||
menuFont->Append(Font_EnumFamiliesForEncoding,
|
menuFont->Append(Font_EnumFamiliesForEncoding,
|
||||||
"Find font for en&coding...\tCtrl-C",
|
"Find font for en&coding...\tCtrl-C",
|
||||||
"Find font families for given encoding");
|
"Find font families for given encoding");
|
||||||
|
menuFont->AppendSeparator();
|
||||||
|
menuFont->Append(Font_CheckNativeToFromString,
|
||||||
|
"Check Native Font Info To/From String");
|
||||||
|
|
||||||
// now append the freshly created menu to the menu bar...
|
// now append the freshly created menu to the menu bar...
|
||||||
wxMenuBar *menuBar = new wxMenuBar;
|
wxMenuBar *menuBar = new wxMenuBar;
|
||||||
@@ -382,7 +389,7 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event))
|
|||||||
wxFONTENCODING_CP1252,
|
wxFONTENCODING_CP1252,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const char *encodingNames[] =
|
static const wxString encodingNames[] =
|
||||||
{
|
{
|
||||||
"West European (Latin 1)",
|
"West European (Latin 1)",
|
||||||
"Central European (Latin 2)",
|
"Central European (Latin 2)",
|
||||||
@@ -397,7 +404,7 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event))
|
|||||||
|
|
||||||
int n = wxGetSingleChoiceIndex("Choose an encoding", "Font demo",
|
int n = wxGetSingleChoiceIndex("Choose an encoding", "Font demo",
|
||||||
WXSIZEOF(encodingNames),
|
WXSIZEOF(encodingNames),
|
||||||
(char **)encodingNames,
|
encodingNames,
|
||||||
this);
|
this);
|
||||||
|
|
||||||
if ( n != -1 )
|
if ( n != -1 )
|
||||||
@@ -406,6 +413,27 @@ void MyFrame::OnEnumerateFamiliesForEncoding(wxCommandEvent& WXUNUSED(event))
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event))
|
||||||
|
{
|
||||||
|
wxString fontInfo = m_canvas->GetTextFont().GetNativeFontInfo().ToString();
|
||||||
|
|
||||||
|
if(fontInfo.IsEmpty())
|
||||||
|
wxMessageBox("Native font info string is empty!", "Font demo",
|
||||||
|
wxOK);
|
||||||
|
else
|
||||||
|
{
|
||||||
|
wxNativeFontInfo info;
|
||||||
|
info.FromString(fontInfo);
|
||||||
|
wxFont font(info);
|
||||||
|
if(fontInfo == font.GetNativeFontInfo().ToString())
|
||||||
|
wxMessageBox("wxNativeFontInfo ToString()/FromString() works!",
|
||||||
|
"Font demo", wxOK);
|
||||||
|
else
|
||||||
|
wxMessageBox("wxNativeFontInfo ToString()/FromString() doesn't work!",
|
||||||
|
"Font demo", wxOK);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MyFrame::DoResizeFont(int diff)
|
void MyFrame::DoResizeFont(int diff)
|
||||||
{
|
{
|
||||||
wxFont fontOld = m_canvas->GetTextFont();
|
wxFont fontOld = m_canvas->GetTextFont();
|
||||||
@@ -650,6 +678,13 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
|
|
||||||
dc.DrawText(fontInfo, 5, 5);
|
dc.DrawText(fontInfo, 5, 5);
|
||||||
|
|
||||||
|
if(m_font.Ok())
|
||||||
|
{
|
||||||
|
dc.SetFont(wxFont(m_font.GetNativeFontInfo()));
|
||||||
|
fontInfo.Printf("Native font info: %s", m_font.GetNativeFontInfo().ToString().GetData());
|
||||||
|
dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight());
|
||||||
|
}
|
||||||
|
|
||||||
// prepare to draw the font
|
// prepare to draw the font
|
||||||
dc.SetFont(m_font);
|
dc.SetFont(m_font);
|
||||||
dc.SetTextForeground(m_colour);
|
dc.SetTextForeground(m_colour);
|
||||||
|
@@ -32,6 +32,8 @@
|
|||||||
#include "wx/font.h"
|
#include "wx/font.h"
|
||||||
#endif // WX_PRECOMP
|
#endif // WX_PRECOMP
|
||||||
|
|
||||||
|
#include "wx/tokenzr.h"
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
@@ -54,6 +56,44 @@ wxFont *wxFontBase::New(int size,
|
|||||||
return new wxFont(size, family, style, weight, underlined, face, encoding);
|
return new wxFont(size, family, style, weight, underlined, face, encoding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* static */
|
||||||
|
wxFont *wxFontBase::New(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
return new wxFont(info);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxNativeFontInfo wxFontBase::GetNativeFontInfo() const
|
||||||
|
{
|
||||||
|
#if !defined(__WXGTK__)
|
||||||
|
wxNativeFontInfo fontInfo;
|
||||||
|
|
||||||
|
fontInfo.pointSize = GetPointSize();
|
||||||
|
fontInfo.family = GetFamily();
|
||||||
|
fontInfo.style = GetStyle();
|
||||||
|
fontInfo.weight = GetWeight();
|
||||||
|
fontInfo.underlined = GetUnderlined();
|
||||||
|
fontInfo.faceName = GetFaceName();
|
||||||
|
fontInfo.encoding = GetEncoding();
|
||||||
|
|
||||||
|
return fontInfo;
|
||||||
|
#else
|
||||||
|
return wxNullNativeFontInfo;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
#if !defined(__WXGTK__)
|
||||||
|
SetPointSize(info.pointSize);
|
||||||
|
SetFamily(info.family);
|
||||||
|
SetStyle(info.style);
|
||||||
|
SetWeight(info.weight);
|
||||||
|
SetUnderlined(info.underlined);
|
||||||
|
SetFaceName(info.faceName);
|
||||||
|
SetEncoding(info.encoding);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
wxFont& wxFont::operator=(const wxFont& font)
|
wxFont& wxFont::operator=(const wxFont& font)
|
||||||
{
|
{
|
||||||
if ( this != &font )
|
if ( this != &font )
|
||||||
@@ -115,3 +155,75 @@ wxString wxFontBase::GetWeightString() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !defined(__WXGTK__)
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxNativeFontInfo
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
// These are the generic forms of FromString()/ToString.
|
||||||
|
//
|
||||||
|
// convert to/from the string representation: format is
|
||||||
|
// pointsize;family;style;weight;underlined;facename;encoding
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromString(const wxString& s)
|
||||||
|
{
|
||||||
|
long l;
|
||||||
|
|
||||||
|
wxStringTokenizer tokenizer(s, _T(";"));
|
||||||
|
|
||||||
|
wxString token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
pointSize = (int)l;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
family = (int)l;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
style = (int)l;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
weight = (int)l;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
underlined = (int)l;
|
||||||
|
|
||||||
|
faceName = tokenizer.GetNextToken();
|
||||||
|
if( !faceName )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
token = tokenizer.GetNextToken();
|
||||||
|
if ( !token.ToLong(&l) )
|
||||||
|
return FALSE;
|
||||||
|
encoding = (wxFontEncoding)l;
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToString() const
|
||||||
|
{
|
||||||
|
wxString s;
|
||||||
|
|
||||||
|
s.Printf("%d;%d;%d;%d;%d;%s;%d",
|
||||||
|
pointSize,
|
||||||
|
family,
|
||||||
|
style,
|
||||||
|
weight,
|
||||||
|
underlined,
|
||||||
|
faceName.GetData(),
|
||||||
|
(int)encoding);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
@@ -126,6 +126,7 @@ wxBrush wxNullBrush;
|
|||||||
wxFont wxNullFont;
|
wxFont wxNullFont;
|
||||||
wxColour wxNullColour;
|
wxColour wxNullColour;
|
||||||
wxPalette wxNullPalette;
|
wxPalette wxNullPalette;
|
||||||
|
wxNativeFontInfo wxNullNativeFontInfo;
|
||||||
|
|
||||||
/* Default window names */
|
/* Default window names */
|
||||||
const wxChar *wxControlNameStr = wxT("control");
|
const wxChar *wxControlNameStr = wxT("control");
|
||||||
|
106
src/gtk/font.cpp
106
src/gtk/font.cpp
@@ -47,7 +47,8 @@ public:
|
|||||||
int weight = wxDEFAULT,
|
int weight = wxDEFAULT,
|
||||||
bool underlined = FALSE,
|
bool underlined = FALSE,
|
||||||
const wxString& faceName = wxEmptyString,
|
const wxString& faceName = wxEmptyString,
|
||||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo);
|
||||||
wxFontRefData( const wxFontRefData& data );
|
wxFontRefData( const wxFontRefData& data );
|
||||||
virtual ~wxFontRefData();
|
virtual ~wxFontRefData();
|
||||||
|
|
||||||
@@ -59,7 +60,8 @@ protected:
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString& faceName,
|
const wxString& faceName,
|
||||||
wxFontEncoding encoding);
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxList m_scaled_xfonts;
|
wxList m_scaled_xfonts;
|
||||||
@@ -70,6 +72,7 @@ private:
|
|||||||
bool m_underlined;
|
bool m_underlined;
|
||||||
wxString m_faceName;
|
wxString m_faceName;
|
||||||
wxFontEncoding m_encoding;
|
wxFontEncoding m_encoding;
|
||||||
|
wxNativeFontInfo m_nativeFontInfo;
|
||||||
|
|
||||||
friend class wxFont;
|
friend class wxFont;
|
||||||
};
|
};
|
||||||
@@ -88,7 +91,8 @@ void wxFontRefData::Init(int pointSize,
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString& faceName,
|
const wxString& faceName,
|
||||||
wxFontEncoding encoding)
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo)
|
||||||
{
|
{
|
||||||
if (family == wxDEFAULT)
|
if (family == wxDEFAULT)
|
||||||
m_family = wxSWISS;
|
m_family = wxSWISS;
|
||||||
@@ -114,21 +118,24 @@ void wxFontRefData::Init(int pointSize,
|
|||||||
|
|
||||||
m_underlined = underlined;
|
m_underlined = underlined;
|
||||||
m_encoding = encoding;
|
m_encoding = encoding;
|
||||||
|
m_nativeFontInfo = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
||||||
: m_scaled_xfonts(wxKEY_INTEGER)
|
: m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
{
|
{
|
||||||
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
|
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
|
||||||
data.m_underlined, data.m_faceName, data.m_encoding);
|
data.m_underlined, data.m_faceName, data.m_encoding,
|
||||||
|
data.m_nativeFontInfo );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::wxFontRefData(int size, int family, int style,
|
wxFontRefData::wxFontRefData(int size, int family, int style,
|
||||||
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding )
|
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo)
|
||||||
: m_scaled_xfonts(wxKEY_INTEGER)
|
: m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
{
|
{
|
||||||
Init(size, family, style, weight,
|
Init(size, family, style, weight,
|
||||||
underlined, faceName, encoding);
|
underlined, faceName, encoding, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::~wxFontRefData()
|
wxFontRefData::~wxFontRefData()
|
||||||
@@ -143,6 +150,21 @@ wxFontRefData::~wxFontRefData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxNativeFontInfo
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromString(const wxString& s)
|
||||||
|
{
|
||||||
|
xFontName = s;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToString() const
|
||||||
|
{
|
||||||
|
return xFontName;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -155,14 +177,40 @@ void wxFont::Init()
|
|||||||
wxTheFontList->Append( this );
|
wxTheFontList->Append( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
wxFont::wxFont(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Create(info.xFontName, wxFontData());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFont::Create( int pointSize,
|
||||||
|
int family,
|
||||||
|
int style,
|
||||||
|
int weight,
|
||||||
|
bool underlined,
|
||||||
|
const wxString& face,
|
||||||
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info )
|
||||||
|
{
|
||||||
|
m_refData = new wxFontRefData(pointSize, family, style, weight,
|
||||||
|
underlined, face, encoding, info);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
wxCHECK_RET( !!fontname, _T("invalid font spec") );
|
if(!fontname)
|
||||||
|
{
|
||||||
|
*this = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
m_refData = new wxFontRefData();
|
m_refData = new wxFontRefData();
|
||||||
|
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName = fontname; // X font name
|
||||||
|
|
||||||
wxString tmp;
|
wxString tmp;
|
||||||
|
|
||||||
wxStringTokenizer tn( fontname, wxT("-") );
|
wxStringTokenizer tn( fontname, wxT("-") );
|
||||||
@@ -170,6 +218,7 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
|||||||
tn.GetNextToken(); // skip initial empty token
|
tn.GetNextToken(); // skip initial empty token
|
||||||
tn.GetNextToken(); // foundry
|
tn.GetNextToken(); // foundry
|
||||||
|
|
||||||
|
|
||||||
M_FONTDATA->m_faceName = tn.GetNextToken(); // family
|
M_FONTDATA->m_faceName = tn.GetNextToken(); // family
|
||||||
|
|
||||||
tmp = tn.GetNextToken().MakeUpper(); // weight
|
tmp = tn.GetNextToken().MakeUpper(); // weight
|
||||||
@@ -247,20 +296,9 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
|||||||
M_FONTDATA->m_encoding = wxFONTENCODING_KOI8;
|
M_FONTDATA->m_encoding = wxFONTENCODING_KOI8;
|
||||||
}
|
}
|
||||||
//else: unknown encoding - may be give a warning here?
|
//else: unknown encoding - may be give a warning here?
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFont::Create( int pointSize,
|
|
||||||
int family,
|
|
||||||
int style,
|
|
||||||
int weight,
|
|
||||||
bool underlined,
|
|
||||||
const wxString& face,
|
|
||||||
wxFontEncoding encoding )
|
|
||||||
{
|
|
||||||
m_refData = new wxFontRefData(pointSize, family, style, weight,
|
|
||||||
underlined, face, encoding);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +376,16 @@ wxFontEncoding wxFont::GetEncoding() const
|
|||||||
return M_FONTDATA->m_encoding;
|
return M_FONTDATA->m_encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxNativeFontInfo wxFont::GetNativeFontInfo() const
|
||||||
|
{
|
||||||
|
wxCHECK_MSG( Ok(), wxNullNativeFontInfo, wxT("invalid font") );
|
||||||
|
|
||||||
|
if(M_FONTDATA->m_nativeFontInfo.xFontName.IsEmpty())
|
||||||
|
GetInternalFont();
|
||||||
|
return M_FONTDATA->m_nativeFontInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// change font attributes
|
// change font attributes
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -347,6 +395,7 @@ void wxFont::SetPointSize(int pointSize)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_pointSize = pointSize;
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetFamily(int family)
|
void wxFont::SetFamily(int family)
|
||||||
@@ -354,6 +403,7 @@ void wxFont::SetFamily(int family)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_family = family;
|
M_FONTDATA->m_family = family;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetStyle(int style)
|
void wxFont::SetStyle(int style)
|
||||||
@@ -361,6 +411,7 @@ void wxFont::SetStyle(int style)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_style = style;
|
M_FONTDATA->m_style = style;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetWeight(int weight)
|
void wxFont::SetWeight(int weight)
|
||||||
@@ -368,6 +419,7 @@ void wxFont::SetWeight(int weight)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_weight = weight;
|
M_FONTDATA->m_weight = weight;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetFaceName(const wxString& faceName)
|
void wxFont::SetFaceName(const wxString& faceName)
|
||||||
@@ -375,6 +427,7 @@ void wxFont::SetFaceName(const wxString& faceName)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_faceName = faceName;
|
M_FONTDATA->m_faceName = faceName;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetUnderlined(bool underlined)
|
void wxFont::SetUnderlined(bool underlined)
|
||||||
@@ -389,6 +442,14 @@ void wxFont::SetEncoding(wxFontEncoding encoding)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_encoding = encoding;
|
M_FONTDATA->m_encoding = encoding;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetNativeFontInfo(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_nativeFontInfo = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -450,7 +511,8 @@ GdkFont *wxFont::GetInternalFont( float scale ) const
|
|||||||
M_FONTDATA->m_weight,
|
M_FONTDATA->m_weight,
|
||||||
M_FONTDATA->m_underlined,
|
M_FONTDATA->m_underlined,
|
||||||
M_FONTDATA->m_faceName,
|
M_FONTDATA->m_faceName,
|
||||||
M_FONTDATA->m_encoding );
|
M_FONTDATA->m_encoding,
|
||||||
|
&M_FONTDATA->m_nativeFontInfo.xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
|
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
|
||||||
|
@@ -174,6 +174,16 @@ wxFontDialog::wxFontDialog( wxWindow *parent, wxFontData *fontdata )
|
|||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_fontdialog_delete_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_fontdialog_delete_callback), (gpointer)this );
|
||||||
|
|
||||||
|
wxFont font = m_fontData.GetInitialFont();
|
||||||
|
if( font.Ok() )
|
||||||
|
{
|
||||||
|
wxNativeFontInfo info = font.GetNativeFontInfo();
|
||||||
|
|
||||||
|
if( info.xFontName.IsEmpty() )
|
||||||
|
font.GetInternalFont();
|
||||||
|
gtk_font_selection_dialog_set_font_name(sel, wxConvCurrent->cWX2MB(info.xFontName.GetData()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontDialog::~wxFontDialog()
|
wxFontDialog::~wxFontDialog()
|
||||||
|
@@ -126,6 +126,7 @@ wxBrush wxNullBrush;
|
|||||||
wxFont wxNullFont;
|
wxFont wxNullFont;
|
||||||
wxColour wxNullColour;
|
wxColour wxNullColour;
|
||||||
wxPalette wxNullPalette;
|
wxPalette wxNullPalette;
|
||||||
|
wxNativeFontInfo wxNullNativeFontInfo;
|
||||||
|
|
||||||
/* Default window names */
|
/* Default window names */
|
||||||
const wxChar *wxControlNameStr = wxT("control");
|
const wxChar *wxControlNameStr = wxT("control");
|
||||||
|
@@ -47,7 +47,8 @@ public:
|
|||||||
int weight = wxDEFAULT,
|
int weight = wxDEFAULT,
|
||||||
bool underlined = FALSE,
|
bool underlined = FALSE,
|
||||||
const wxString& faceName = wxEmptyString,
|
const wxString& faceName = wxEmptyString,
|
||||||
wxFontEncoding encoding = wxFONTENCODING_DEFAULT);
|
wxFontEncoding encoding = wxFONTENCODING_DEFAULT,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo);
|
||||||
wxFontRefData( const wxFontRefData& data );
|
wxFontRefData( const wxFontRefData& data );
|
||||||
virtual ~wxFontRefData();
|
virtual ~wxFontRefData();
|
||||||
|
|
||||||
@@ -59,7 +60,8 @@ protected:
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString& faceName,
|
const wxString& faceName,
|
||||||
wxFontEncoding encoding);
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
wxList m_scaled_xfonts;
|
wxList m_scaled_xfonts;
|
||||||
@@ -70,6 +72,7 @@ private:
|
|||||||
bool m_underlined;
|
bool m_underlined;
|
||||||
wxString m_faceName;
|
wxString m_faceName;
|
||||||
wxFontEncoding m_encoding;
|
wxFontEncoding m_encoding;
|
||||||
|
wxNativeFontInfo m_nativeFontInfo;
|
||||||
|
|
||||||
friend class wxFont;
|
friend class wxFont;
|
||||||
};
|
};
|
||||||
@@ -88,7 +91,8 @@ void wxFontRefData::Init(int pointSize,
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString& faceName,
|
const wxString& faceName,
|
||||||
wxFontEncoding encoding)
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo)
|
||||||
{
|
{
|
||||||
if (family == wxDEFAULT)
|
if (family == wxDEFAULT)
|
||||||
m_family = wxSWISS;
|
m_family = wxSWISS;
|
||||||
@@ -114,21 +118,24 @@ void wxFontRefData::Init(int pointSize,
|
|||||||
|
|
||||||
m_underlined = underlined;
|
m_underlined = underlined;
|
||||||
m_encoding = encoding;
|
m_encoding = encoding;
|
||||||
|
m_nativeFontInfo = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
||||||
: m_scaled_xfonts(wxKEY_INTEGER)
|
: m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
{
|
{
|
||||||
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
|
Init(data.m_pointSize, data.m_family, data.m_style, data.m_weight,
|
||||||
data.m_underlined, data.m_faceName, data.m_encoding);
|
data.m_underlined, data.m_faceName, data.m_encoding,
|
||||||
|
data.m_nativeFontInfo );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::wxFontRefData(int size, int family, int style,
|
wxFontRefData::wxFontRefData(int size, int family, int style,
|
||||||
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding )
|
int weight, bool underlined, const wxString& faceName, wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info = wxNullNativeFontInfo)
|
||||||
: m_scaled_xfonts(wxKEY_INTEGER)
|
: m_scaled_xfonts(wxKEY_INTEGER)
|
||||||
{
|
{
|
||||||
Init(size, family, style, weight,
|
Init(size, family, style, weight,
|
||||||
underlined, faceName, encoding);
|
underlined, faceName, encoding, info);
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::~wxFontRefData()
|
wxFontRefData::~wxFontRefData()
|
||||||
@@ -143,6 +150,21 @@ wxFontRefData::~wxFontRefData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxNativeFontInfo
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromString(const wxString& s)
|
||||||
|
{
|
||||||
|
xFontName = s;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToString() const
|
||||||
|
{
|
||||||
|
return xFontName;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -155,14 +177,40 @@ void wxFont::Init()
|
|||||||
wxTheFontList->Append( this );
|
wxTheFontList->Append( this );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
wxFont::wxFont(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Create(info.xFontName, wxFontData());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFont::Create( int pointSize,
|
||||||
|
int family,
|
||||||
|
int style,
|
||||||
|
int weight,
|
||||||
|
bool underlined,
|
||||||
|
const wxString& face,
|
||||||
|
wxFontEncoding encoding,
|
||||||
|
const wxNativeFontInfo& info )
|
||||||
|
{
|
||||||
|
m_refData = new wxFontRefData(pointSize, family, style, weight,
|
||||||
|
underlined, face, encoding, info);
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxFont::Create(const wxString& fontname, const wxFontData& fontdata)
|
||||||
{
|
{
|
||||||
Init();
|
Init();
|
||||||
|
|
||||||
wxCHECK_RET( !!fontname, _T("invalid font spec") );
|
if(!fontname)
|
||||||
|
{
|
||||||
|
*this = wxSystemSettings::GetSystemFont( wxSYS_DEFAULT_GUI_FONT);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
m_refData = new wxFontRefData();
|
m_refData = new wxFontRefData();
|
||||||
|
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName = fontname; // X font name
|
||||||
|
|
||||||
wxString tmp;
|
wxString tmp;
|
||||||
|
|
||||||
wxStringTokenizer tn( fontname, wxT("-") );
|
wxStringTokenizer tn( fontname, wxT("-") );
|
||||||
@@ -170,6 +218,7 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
|||||||
tn.GetNextToken(); // skip initial empty token
|
tn.GetNextToken(); // skip initial empty token
|
||||||
tn.GetNextToken(); // foundry
|
tn.GetNextToken(); // foundry
|
||||||
|
|
||||||
|
|
||||||
M_FONTDATA->m_faceName = tn.GetNextToken(); // family
|
M_FONTDATA->m_faceName = tn.GetNextToken(); // family
|
||||||
|
|
||||||
tmp = tn.GetNextToken().MakeUpper(); // weight
|
tmp = tn.GetNextToken().MakeUpper(); // weight
|
||||||
@@ -247,20 +296,9 @@ wxFont::wxFont( const wxString& fontname, const wxFontData& fontdata )
|
|||||||
M_FONTDATA->m_encoding = wxFONTENCODING_KOI8;
|
M_FONTDATA->m_encoding = wxFONTENCODING_KOI8;
|
||||||
}
|
}
|
||||||
//else: unknown encoding - may be give a warning here?
|
//else: unknown encoding - may be give a warning here?
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
bool wxFont::Create( int pointSize,
|
|
||||||
int family,
|
|
||||||
int style,
|
|
||||||
int weight,
|
|
||||||
bool underlined,
|
|
||||||
const wxString& face,
|
|
||||||
wxFontEncoding encoding )
|
|
||||||
{
|
|
||||||
m_refData = new wxFontRefData(pointSize, family, style, weight,
|
|
||||||
underlined, face, encoding);
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -338,6 +376,16 @@ wxFontEncoding wxFont::GetEncoding() const
|
|||||||
return M_FONTDATA->m_encoding;
|
return M_FONTDATA->m_encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxNativeFontInfo wxFont::GetNativeFontInfo() const
|
||||||
|
{
|
||||||
|
wxCHECK_MSG( Ok(), wxNullNativeFontInfo, wxT("invalid font") );
|
||||||
|
|
||||||
|
if(M_FONTDATA->m_nativeFontInfo.xFontName.IsEmpty())
|
||||||
|
GetInternalFont();
|
||||||
|
return M_FONTDATA->m_nativeFontInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// change font attributes
|
// change font attributes
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -347,6 +395,7 @@ void wxFont::SetPointSize(int pointSize)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_pointSize = pointSize;
|
M_FONTDATA->m_pointSize = pointSize;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetFamily(int family)
|
void wxFont::SetFamily(int family)
|
||||||
@@ -354,6 +403,7 @@ void wxFont::SetFamily(int family)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_family = family;
|
M_FONTDATA->m_family = family;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetStyle(int style)
|
void wxFont::SetStyle(int style)
|
||||||
@@ -361,6 +411,7 @@ void wxFont::SetStyle(int style)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_style = style;
|
M_FONTDATA->m_style = style;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetWeight(int weight)
|
void wxFont::SetWeight(int weight)
|
||||||
@@ -368,6 +419,7 @@ void wxFont::SetWeight(int weight)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_weight = weight;
|
M_FONTDATA->m_weight = weight;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetFaceName(const wxString& faceName)
|
void wxFont::SetFaceName(const wxString& faceName)
|
||||||
@@ -375,6 +427,7 @@ void wxFont::SetFaceName(const wxString& faceName)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_faceName = faceName;
|
M_FONTDATA->m_faceName = faceName;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxFont::SetUnderlined(bool underlined)
|
void wxFont::SetUnderlined(bool underlined)
|
||||||
@@ -389,6 +442,14 @@ void wxFont::SetEncoding(wxFontEncoding encoding)
|
|||||||
Unshare();
|
Unshare();
|
||||||
|
|
||||||
M_FONTDATA->m_encoding = encoding;
|
M_FONTDATA->m_encoding = encoding;
|
||||||
|
M_FONTDATA->m_nativeFontInfo.xFontName.Clear(); // invalid now
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxFont::SetNativeFontInfo(const wxNativeFontInfo& info)
|
||||||
|
{
|
||||||
|
Unshare();
|
||||||
|
|
||||||
|
M_FONTDATA->m_nativeFontInfo = info;
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -450,7 +511,8 @@ GdkFont *wxFont::GetInternalFont( float scale ) const
|
|||||||
M_FONTDATA->m_weight,
|
M_FONTDATA->m_weight,
|
||||||
M_FONTDATA->m_underlined,
|
M_FONTDATA->m_underlined,
|
||||||
M_FONTDATA->m_faceName,
|
M_FONTDATA->m_faceName,
|
||||||
M_FONTDATA->m_encoding );
|
M_FONTDATA->m_encoding,
|
||||||
|
&M_FONTDATA->m_nativeFontInfo.xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
|
M_FONTDATA->m_scaled_xfonts.Append( int_scale, (wxObject*)font );
|
||||||
|
@@ -174,6 +174,16 @@ wxFontDialog::wxFontDialog( wxWindow *parent, wxFontData *fontdata )
|
|||||||
|
|
||||||
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
|
gtk_signal_connect( GTK_OBJECT(m_widget), "delete_event",
|
||||||
GTK_SIGNAL_FUNC(gtk_fontdialog_delete_callback), (gpointer)this );
|
GTK_SIGNAL_FUNC(gtk_fontdialog_delete_callback), (gpointer)this );
|
||||||
|
|
||||||
|
wxFont font = m_fontData.GetInitialFont();
|
||||||
|
if( font.Ok() )
|
||||||
|
{
|
||||||
|
wxNativeFontInfo info = font.GetNativeFontInfo();
|
||||||
|
|
||||||
|
if( info.xFontName.IsEmpty() )
|
||||||
|
font.GetInternalFont();
|
||||||
|
gtk_font_selection_dialog_set_font_name(sel, wxConvCurrent->cWX2MB(info.xFontName.GetData()));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontDialog::~wxFontDialog()
|
wxFontDialog::~wxFontDialog()
|
||||||
|
@@ -87,6 +87,7 @@ wxBrush wxNullBrush;
|
|||||||
wxPalette wxNullPalette;
|
wxPalette wxNullPalette;
|
||||||
wxFont wxNullFont;
|
wxFont wxNullFont;
|
||||||
wxColour wxNullColour;
|
wxColour wxNullColour;
|
||||||
|
wxNativeFontInfo wxNullNativeFontInfo;
|
||||||
|
|
||||||
// Default window names
|
// Default window names
|
||||||
const char *wxButtonNameStr = "button";
|
const char *wxButtonNameStr = "button";
|
||||||
|
@@ -96,6 +96,7 @@ wxBrush wxNullBrush;
|
|||||||
wxPalette wxNullPalette;
|
wxPalette wxNullPalette;
|
||||||
wxFont wxNullFont;
|
wxFont wxNullFont;
|
||||||
wxColour wxNullColour;
|
wxColour wxNullColour;
|
||||||
|
wxNativeFontInfo wxNullNativeFontInfo;
|
||||||
|
|
||||||
// Default window names
|
// Default window names
|
||||||
const wxChar *wxControlNameStr = wxT("control");
|
const wxChar *wxControlNameStr = wxT("control");
|
||||||
|
@@ -95,7 +95,8 @@ static wxNativeFont wxLoadQueryFont(int pointSize,
|
|||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
const wxString& xregistry,
|
const wxString& xregistry,
|
||||||
const wxString& xencoding);
|
const wxString& xencoding,
|
||||||
|
wxString* xFontName);
|
||||||
|
|
||||||
// ============================================================================
|
// ============================================================================
|
||||||
// implementation
|
// implementation
|
||||||
@@ -240,7 +241,8 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
int weight,
|
int weight,
|
||||||
bool underlined,
|
bool underlined,
|
||||||
const wxString &facename,
|
const wxString &facename,
|
||||||
wxFontEncoding encoding)
|
wxFontEncoding encoding,
|
||||||
|
wxString* xFontName)
|
||||||
{
|
{
|
||||||
if ( encoding == wxFONTENCODING_DEFAULT )
|
if ( encoding == wxFONTENCODING_DEFAULT )
|
||||||
{
|
{
|
||||||
@@ -274,9 +276,17 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
}
|
}
|
||||||
|
|
||||||
// OK, we have the correct xregistry/xencoding in info structure
|
// OK, we have the correct xregistry/xencoding in info structure
|
||||||
wxNativeFont font = wxLoadQueryFont( pointSize, family, style, weight,
|
wxNativeFont font = 0;
|
||||||
|
|
||||||
|
// if we already have the X font name, try to use it
|
||||||
|
if( xFontName && !xFontName->IsEmpty() )
|
||||||
|
font = wxLoadFont(*xFontName);
|
||||||
|
|
||||||
|
if( !font )
|
||||||
|
font = wxLoadQueryFont( pointSize, family, style, weight,
|
||||||
underlined, facename,
|
underlined, facename,
|
||||||
info.xregistry, info.xencoding );
|
info.xregistry, info.xencoding,
|
||||||
|
xFontName );
|
||||||
|
|
||||||
if ( !font )
|
if ( !font )
|
||||||
{
|
{
|
||||||
@@ -290,14 +300,16 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
for ( i = pointSize - 10; !font && i >= 10 && i >= min_size; i -= 10 )
|
for ( i = pointSize - 10; !font && i >= 10 && i >= min_size; i -= 10 )
|
||||||
{
|
{
|
||||||
font = wxLoadQueryFont(i, family, style, weight, underlined,
|
font = wxLoadQueryFont(i, family, style, weight, underlined,
|
||||||
facename, info.xregistry, info.xencoding);
|
facename, info.xregistry, info.xencoding,
|
||||||
|
xFontName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Search for larger size (approx.)
|
// Search for larger size (approx.)
|
||||||
for ( i = pointSize + 10; !font && i <= max_size; i += 10 )
|
for ( i = pointSize + 10; !font && i <= max_size; i += 10 )
|
||||||
{
|
{
|
||||||
font = wxLoadQueryFont(i, family, style, weight, underlined,
|
font = wxLoadQueryFont(i, family, style, weight, underlined,
|
||||||
facename, info.xregistry, info.xencoding);
|
facename, info.xregistry, info.xencoding,
|
||||||
|
xFontName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try default family
|
// Try default family
|
||||||
@@ -305,7 +317,8 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
{
|
{
|
||||||
font = wxLoadQueryFont(pointSize, wxDEFAULT, style, weight,
|
font = wxLoadQueryFont(pointSize, wxDEFAULT, style, weight,
|
||||||
underlined, facename,
|
underlined, facename,
|
||||||
info.xregistry, info.xencoding );
|
info.xregistry, info.xencoding,
|
||||||
|
xFontName );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bogus font I
|
// Bogus font I
|
||||||
@@ -313,7 +326,8 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
{
|
{
|
||||||
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
||||||
underlined, facename,
|
underlined, facename,
|
||||||
info.xregistry, info.xencoding);
|
info.xregistry, info.xencoding,
|
||||||
|
xFontName);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Bogus font II
|
// Bogus font II
|
||||||
@@ -321,7 +335,8 @@ wxNativeFont wxLoadQueryNearestFont(int pointSize,
|
|||||||
{
|
{
|
||||||
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
font = wxLoadQueryFont(120, wxDEFAULT, wxNORMAL, wxNORMAL,
|
||||||
underlined, wxEmptyString,
|
underlined, wxEmptyString,
|
||||||
info.xregistry, info.xencoding);
|
info.xregistry, info.xencoding,
|
||||||
|
xFontName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -371,7 +386,8 @@ static wxNativeFont wxLoadQueryFont(int pointSize,
|
|||||||
bool WXUNUSED(underlined),
|
bool WXUNUSED(underlined),
|
||||||
const wxString& facename,
|
const wxString& facename,
|
||||||
const wxString& xregistry,
|
const wxString& xregistry,
|
||||||
const wxString& xencoding)
|
const wxString& xencoding,
|
||||||
|
wxString* xFontName)
|
||||||
{
|
{
|
||||||
wxString xfamily;
|
wxString xfamily;
|
||||||
switch (family)
|
switch (family)
|
||||||
@@ -545,6 +561,9 @@ static wxNativeFont wxLoadQueryFont(int pointSize,
|
|||||||
xfamily.c_str(), xweight.c_str(), xstyle.c_str(),
|
xfamily.c_str(), xweight.c_str(), xstyle.c_str(),
|
||||||
pointSize, xregistry.c_str(), xencoding.c_str());
|
pointSize, xregistry.c_str(), xencoding.c_str());
|
||||||
|
|
||||||
|
if( xFontName )
|
||||||
|
*xFontName = fontSpec;
|
||||||
|
|
||||||
return wxLoadFont(fontSpec);
|
return wxLoadFont(fontSpec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user