add more methods to wxNativeFontInfo: To/FromUserString and all the
accessor methods and implemented some of them git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@13156 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -114,7 +114,9 @@ public:
|
|||||||
virtual wxString GetFaceName() const = 0;
|
virtual wxString GetFaceName() const = 0;
|
||||||
virtual wxFontEncoding GetEncoding() const = 0;
|
virtual wxFontEncoding GetEncoding() const = 0;
|
||||||
virtual wxNativeFontInfo *GetNativeFontInfo() const;
|
virtual wxNativeFontInfo *GetNativeFontInfo() const;
|
||||||
|
|
||||||
wxString GetNativeFontInfoDesc() const;
|
wxString GetNativeFontInfoDesc() const;
|
||||||
|
wxString GetNativeFontInfoUserDesc() const;
|
||||||
|
|
||||||
// change the font characteristics
|
// change the font characteristics
|
||||||
virtual void SetPointSize( int pointSize ) = 0;
|
virtual void SetPointSize( int pointSize ) = 0;
|
||||||
@@ -125,7 +127,9 @@ public:
|
|||||||
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);
|
virtual void SetNativeFontInfo(const wxNativeFontInfo& info);
|
||||||
|
|
||||||
void SetNativeFontInfo(const wxString& info);
|
void SetNativeFontInfo(const wxString& info);
|
||||||
|
void SetNativeFontInfoUserDesc(const wxString& 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, ...)
|
||||||
|
@@ -27,8 +27,8 @@
|
|||||||
#include "wx/font.h" // for wxFont and wxFontEncoding
|
#include "wx/font.h" // for wxFont and wxFontEncoding
|
||||||
|
|
||||||
#if defined(__WXMSW__)
|
#if defined(__WXMSW__)
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "wx/msw/winundef.h"
|
#include "wx/msw/winundef.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -40,10 +40,23 @@
|
|||||||
// functions, the user code can only get the objects of this type from
|
// functions, the user code can only get the objects of this type from
|
||||||
// somewhere and pass it somewhere else (possibly save them somewhere using
|
// somewhere and pass it somewhere else (possibly save them somewhere using
|
||||||
// ToString() and restore them using FromString())
|
// ToString() and restore them using FromString())
|
||||||
|
//
|
||||||
|
// NB: it is a POD currently for max efficiency but if it continues to grow
|
||||||
|
// further it might make sense to make it a real class with virtual methods
|
||||||
struct WXDLLEXPORT wxNativeFontInfo
|
struct WXDLLEXPORT wxNativeFontInfo
|
||||||
{
|
{
|
||||||
#if defined(__WXGTK__)
|
#if defined(__WXGTK__) || defined(__WXMOTIF__)
|
||||||
|
// the components of the XLFD
|
||||||
|
wxString fontElements[14];
|
||||||
|
|
||||||
|
// the full XLFD
|
||||||
wxString xFontName;
|
wxString xFontName;
|
||||||
|
|
||||||
|
// init the elements from an XLFD, return TRUE if ok
|
||||||
|
bool FromXFontName(const wxString& xFontName);
|
||||||
|
|
||||||
|
// generate an XLFD using the fontElements
|
||||||
|
wxString GetXFontName() const;
|
||||||
#elif defined(__WXMSW__)
|
#elif defined(__WXMSW__)
|
||||||
LOGFONT lf;
|
LOGFONT lf;
|
||||||
#else // other platforms
|
#else // other platforms
|
||||||
@@ -51,19 +64,50 @@ struct WXDLLEXPORT wxNativeFontInfo
|
|||||||
// This is a generic implementation that should work on all ports
|
// This is a generic implementation that should work on all ports
|
||||||
// without specific support by the port.
|
// without specific support by the port.
|
||||||
//
|
//
|
||||||
|
#define wNO_NATIVE_FONTINFO
|
||||||
|
|
||||||
int pointSize;
|
int pointSize;
|
||||||
int family;
|
int family;
|
||||||
int style;
|
wxFontStyle style;
|
||||||
int weight;
|
wxFontWeight weight;
|
||||||
bool underlined;
|
bool underlined;
|
||||||
wxString faceName;
|
wxString faceName;
|
||||||
wxFontEncoding encoding;
|
wxFontEncoding encoding;
|
||||||
#endif // platforms
|
#endif // platforms
|
||||||
|
|
||||||
|
// default ctor (default copy ctor is ok)
|
||||||
|
wxNativeFontInfo() { Init(); }
|
||||||
|
|
||||||
|
// reset to the default state
|
||||||
|
void Init();
|
||||||
|
|
||||||
|
// accessors and modifiers for the font elements: note that there is no
|
||||||
|
// GetFamily() because in general it is impossible to get the family for an
|
||||||
|
// arbitrary native font
|
||||||
|
int GetPointSize() const;
|
||||||
|
wxFontStyle GetStyle() const;
|
||||||
|
wxFontWeight GetWeight() const;
|
||||||
|
bool GetUnderlined() const;
|
||||||
|
wxString GetFaceName() const;
|
||||||
|
wxFontEncoding GetEncoding() const;
|
||||||
|
|
||||||
|
void SetPointSize(int pointsize);
|
||||||
|
void SetStyle(wxFontStyle style);
|
||||||
|
void SetWeight(wxFontWeight weight);
|
||||||
|
void SetUnderlined(bool underlined);
|
||||||
|
void SetFaceName(wxString facename);
|
||||||
|
void SetEncoding(wxFontEncoding encoding);
|
||||||
|
|
||||||
// it is important to be able to serialize wxNativeFontInfo objects to be
|
// it is important to be able to serialize wxNativeFontInfo objects to be
|
||||||
// able to store them (in config file, for example)
|
// able to store them (in config file, for example)
|
||||||
bool FromString(const wxString& s);
|
bool FromString(const wxString& s);
|
||||||
wxString ToString() const;
|
wxString ToString() const;
|
||||||
|
|
||||||
|
// we also want to present the native font descriptions to the user in some
|
||||||
|
// human-readable form (it is not platform independent neither, but can
|
||||||
|
// hopefully be understood by the user)
|
||||||
|
bool FromUserString(const wxString& s);
|
||||||
|
wxString ToUserString() const;
|
||||||
};
|
};
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -426,26 +426,18 @@ void MyFrame::OnCheckNativeToFromString(wxCommandEvent& WXUNUSED(event))
|
|||||||
if ( fontInfo != font->GetNativeFontInfoDesc() )
|
if ( fontInfo != font->GetNativeFontInfoDesc() )
|
||||||
wxLogError(wxT("wxNativeFontInfo ToString()/FromString() broken!"));
|
wxLogError(wxT("wxNativeFontInfo ToString()/FromString() broken!"));
|
||||||
else
|
else
|
||||||
wxLogError(wxT("wxNativeFontInfo works: %s"), fontInfo.c_str());
|
wxLogMessage(wxT("wxNativeFontInfo works: %s"), fontInfo.c_str());
|
||||||
|
|
||||||
delete font;
|
delete font;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::DoResizeFont(int diff)
|
void MyFrame::DoResizeFont(int diff)
|
||||||
{
|
{
|
||||||
wxFont fontOld = m_canvas->GetTextFont();
|
wxFont font = m_canvas->GetTextFont();
|
||||||
|
|
||||||
DoChangeFont(
|
font.SetPointSize(font.GetPointSize() + diff);
|
||||||
wxFont(
|
DoChangeFont(font);
|
||||||
fontOld.GetPointSize() + diff,
|
|
||||||
fontOld.GetFamily(),
|
|
||||||
fontOld.GetStyle(),
|
|
||||||
fontOld.GetWeight(),
|
|
||||||
fontOld.GetUnderlined(),
|
|
||||||
fontOld.GetFaceName(),
|
|
||||||
fontOld.GetEncoding()
|
|
||||||
)
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MyFrame::DoChangeFont(const wxFont& font, const wxColour& col)
|
void MyFrame::DoChangeFont(const wxFont& font, const wxColour& col)
|
||||||
@@ -647,7 +639,7 @@ void MyCanvas::OnPaint( wxPaintEvent &WXUNUSED(event) )
|
|||||||
|
|
||||||
if ( m_font.Ok() )
|
if ( m_font.Ok() )
|
||||||
{
|
{
|
||||||
wxString fontDesc = m_font.GetNativeFontInfoDesc();
|
wxString fontDesc = m_font.GetNativeFontInfoUserDesc();
|
||||||
fontInfo.Printf(wxT("Native font info: %s"), fontDesc.c_str());
|
fontInfo.Printf(wxT("Native font info: %s"), fontDesc.c_str());
|
||||||
dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight());
|
dc.DrawText(fontInfo, 5, 5 + dc.GetCharHeight());
|
||||||
}
|
}
|
||||||
|
@@ -34,6 +34,7 @@
|
|||||||
|
|
||||||
#include "wx/gdicmn.h"
|
#include "wx/gdicmn.h"
|
||||||
#include "wx/fontutil.h" // for wxNativeFontInfo
|
#include "wx/fontutil.h" // for wxNativeFontInfo
|
||||||
|
#include "wx/fontmap.h"
|
||||||
|
|
||||||
#include "wx/tokenzr.h"
|
#include "wx/tokenzr.h"
|
||||||
|
|
||||||
@@ -77,16 +78,16 @@ wxFont *wxFontBase::New(const wxString& strNativeFontDesc)
|
|||||||
|
|
||||||
wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
|
wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
|
||||||
{
|
{
|
||||||
#if !defined(__WXGTK__) && !defined(__WXMSW__)
|
#ifdef wxNO_NATIVE_FONTINFO
|
||||||
wxNativeFontInfo *fontInfo = new wxNativeFontInfo;
|
wxNativeFontInfo *fontInfo = new wxNativeFontInfo();
|
||||||
|
|
||||||
fontInfo->pointSize = GetPointSize();
|
fontInfo->SetPointSize(GetPointSize());
|
||||||
fontInfo->family = GetFamily();
|
fontInfo->SetFamily(GetFamily());
|
||||||
fontInfo->style = GetStyle();
|
fontInfo->SetStyle((wxFontStyle)GetStyle());
|
||||||
fontInfo->weight = GetWeight();
|
fontInfo->SetWeight((wxFontWeight)GetWeight());
|
||||||
fontInfo->underlined = GetUnderlined();
|
fontInfo->SetUnderlined(GetUnderlined());
|
||||||
fontInfo->faceName = GetFaceName();
|
fontInfo->SetFaceName(GetFaceName());
|
||||||
fontInfo->encoding = GetEncoding();
|
fontInfo->SetEncoding(GetEncoding());
|
||||||
|
|
||||||
return fontInfo;
|
return fontInfo;
|
||||||
#else
|
#else
|
||||||
@@ -96,7 +97,7 @@ wxNativeFontInfo *wxFontBase::GetNativeFontInfo() const
|
|||||||
|
|
||||||
void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
|
void wxFontBase::SetNativeFontInfo(const wxNativeFontInfo& info)
|
||||||
{
|
{
|
||||||
#if !defined(__WXGTK__) && !defined(__WXMSW__)
|
#ifdef wxNO_NATIVE_FONTINFO
|
||||||
SetPointSize(info.pointSize);
|
SetPointSize(info.pointSize);
|
||||||
SetFamily(info.family);
|
SetFamily(info.family);
|
||||||
SetStyle(info.style);
|
SetStyle(info.style);
|
||||||
@@ -122,6 +123,19 @@ wxString wxFontBase::GetNativeFontInfoDesc() const
|
|||||||
return fontDesc;
|
return fontDesc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
wxString wxFontBase::GetNativeFontInfoUserDesc() const
|
||||||
|
{
|
||||||
|
wxString fontDesc;
|
||||||
|
wxNativeFontInfo *fontInfo = GetNativeFontInfo();
|
||||||
|
if ( fontInfo )
|
||||||
|
{
|
||||||
|
fontDesc = fontInfo->ToUserString();
|
||||||
|
delete fontInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
return fontDesc;
|
||||||
|
}
|
||||||
|
|
||||||
void wxFontBase::SetNativeFontInfo(const wxString& info)
|
void wxFontBase::SetNativeFontInfo(const wxString& info)
|
||||||
{
|
{
|
||||||
wxNativeFontInfo fontInfo;
|
wxNativeFontInfo fontInfo;
|
||||||
@@ -131,6 +145,15 @@ void wxFontBase::SetNativeFontInfo(const wxString& info)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxFontBase::SetNativeFontInfoUserDesc(const wxString& info)
|
||||||
|
{
|
||||||
|
wxNativeFontInfo fontInfo;
|
||||||
|
if ( !info.empty() && fontInfo.FromUserString(info) )
|
||||||
|
{
|
||||||
|
SetNativeFontInfo(fontInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
wxFont& wxFont::operator=(const wxFont& font)
|
wxFont& wxFont::operator=(const wxFont& font)
|
||||||
{
|
{
|
||||||
if ( this != &font )
|
if ( this != &font )
|
||||||
@@ -203,12 +226,12 @@ wxString wxFontBase::GetWeightString() const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__WXGTK__) && !defined(__WXMSW__)
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxNativeFontInfo
|
// wxNativeFontInfo
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#ifdef wxNO_NATIVE_FONTINFO
|
||||||
|
|
||||||
// These are the generic forms of FromString()/ToString.
|
// These are the generic forms of FromString()/ToString.
|
||||||
//
|
//
|
||||||
// convert to/from the string representation: format is
|
// convert to/from the string representation: format is
|
||||||
@@ -238,12 +261,12 @@ bool wxNativeFontInfo::FromString(const wxString& s)
|
|||||||
token = tokenizer.GetNextToken();
|
token = tokenizer.GetNextToken();
|
||||||
if ( !token.ToLong(&l) )
|
if ( !token.ToLong(&l) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
style = (int)l;
|
style = (wxFontStyle)l;
|
||||||
|
|
||||||
token = tokenizer.GetNextToken();
|
token = tokenizer.GetNextToken();
|
||||||
if ( !token.ToLong(&l) )
|
if ( !token.ToLong(&l) )
|
||||||
return FALSE;
|
return FALSE;
|
||||||
weight = (int)l;
|
weight = (wxFontWeight)l;
|
||||||
|
|
||||||
token = tokenizer.GetNextToken();
|
token = tokenizer.GetNextToken();
|
||||||
if ( !token.ToLong(&l) )
|
if ( !token.ToLong(&l) )
|
||||||
@@ -270,8 +293,8 @@ wxString wxNativeFontInfo::ToString() const
|
|||||||
0, // version
|
0, // version
|
||||||
pointSize,
|
pointSize,
|
||||||
family,
|
family,
|
||||||
style,
|
(int)style,
|
||||||
weight,
|
(int)weight,
|
||||||
underlined,
|
underlined,
|
||||||
faceName.GetData(),
|
faceName.GetData(),
|
||||||
(int)encoding);
|
(int)encoding);
|
||||||
@@ -279,5 +302,220 @@ wxString wxNativeFontInfo::ToString() const
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::Init()
|
||||||
|
{
|
||||||
|
pointSize = wxNORMAL_FONT->GetPointSize();
|
||||||
|
family = wxFONTFAMILY_DEFAULT;
|
||||||
|
style = wxFONTSTYLE_NORMAL;
|
||||||
|
weight = wxFONTWEIGHT_NORMAL;
|
||||||
|
underlined = FALSE;
|
||||||
|
faceName.clear();
|
||||||
|
encoding = wxFONTENCODING_DEFAULT;
|
||||||
|
}
|
||||||
|
|
||||||
|
int wxNativeFontInfo::GetPointSize() const
|
||||||
|
{
|
||||||
|
return pointSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFontStyle wxNativeFontInfo::GetStyle() const
|
||||||
|
{
|
||||||
|
return style;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFontWeight wxNativeFontInfo::GetWeight() const
|
||||||
|
{
|
||||||
|
return weight;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::GetUnderlined() const
|
||||||
|
{
|
||||||
|
return underlined;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::GetFaceName() const
|
||||||
|
{
|
||||||
|
return faceName;
|
||||||
|
}
|
||||||
|
|
||||||
|
wxFontEncoding wxNativeFontInfo::GetEncoding() const
|
||||||
|
{
|
||||||
|
return encoding;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetPointSize(int pointsize)
|
||||||
|
{
|
||||||
|
pointSize = pointsize;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetStyle(wxFontStyle style_)
|
||||||
|
{
|
||||||
|
style = style_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetWeight(wxFontWeight weight_)
|
||||||
|
{
|
||||||
|
weight = weight_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetUnderlined(bool underlined_)
|
||||||
|
{
|
||||||
|
underlined = underlined_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetFaceName(wxString facename_)
|
||||||
|
{
|
||||||
|
facename = facename_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxNativeFontInfo::SetEncoding(wxFontEncoding encoding_)
|
||||||
|
{
|
||||||
|
encoding = encoding_;
|
||||||
|
}
|
||||||
|
|
||||||
#endif // generic wxNativeFontInfo implementation
|
#endif // generic wxNativeFontInfo implementation
|
||||||
|
|
||||||
|
// conversion to/from user-readable string: this is used in the generic
|
||||||
|
// versions and under MSW as well because there is no standard font description
|
||||||
|
// format there anyhow (but there is a well-defined standard for X11 fonts used
|
||||||
|
// by wxGTK and wxMotif)
|
||||||
|
|
||||||
|
#if defined(wxNO_NATIVE_FONTINFO) || defined(__WXMSW__)
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToUserString() const
|
||||||
|
{
|
||||||
|
wxString desc;
|
||||||
|
|
||||||
|
// first put the adjectives, if any - this is English-centric, of course,
|
||||||
|
// but what else can we do?
|
||||||
|
if ( GetUnderlined() )
|
||||||
|
{
|
||||||
|
desc << _("underlined ");
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( GetWeight() )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( _T("unknown font weight") );
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case wxFONTWEIGHT_NORMAL:
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxFONTWEIGHT_LIGHT:
|
||||||
|
desc << _("light ");
|
||||||
|
break;
|
||||||
|
|
||||||
|
case wxFONTWEIGHT_BOLD:
|
||||||
|
desc << _("bold ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
switch ( GetStyle() )
|
||||||
|
{
|
||||||
|
default:
|
||||||
|
wxFAIL_MSG( _T("unknown font style") );
|
||||||
|
// fall through
|
||||||
|
|
||||||
|
case wxFONTSTYLE_NORMAL:
|
||||||
|
break;
|
||||||
|
|
||||||
|
// we don't distinguish between the two for now anyhow...
|
||||||
|
case wxFONTSTYLE_ITALIC:
|
||||||
|
case wxFONTSTYLE_SLANT:
|
||||||
|
desc << _("italic ");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( !facename.empty() )
|
||||||
|
{
|
||||||
|
desc << facename << _T(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( pointsize != wxNORMAL_FONT->GetPointSize() )
|
||||||
|
{
|
||||||
|
desc << pointsize;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromUserString(const wxString& s)
|
||||||
|
{
|
||||||
|
// reset to the default state
|
||||||
|
Init();
|
||||||
|
|
||||||
|
// parse a more or less free form string
|
||||||
|
//
|
||||||
|
// TODO: we should handle at least the quoted facenames
|
||||||
|
wxStringTokenizer tokenizer(s, _T(";, "), wxTOKEN_STRTOK);
|
||||||
|
|
||||||
|
wxString face;
|
||||||
|
unsigned long size;
|
||||||
|
wxFontEncoding encoding;
|
||||||
|
|
||||||
|
while ( tokenizer.HasMoreTokens() )
|
||||||
|
{
|
||||||
|
wxString token = tokenizer.GetNextToken();
|
||||||
|
|
||||||
|
// normalize it
|
||||||
|
token.Trim(TRUE).Trim(FALSE).MakeLower();
|
||||||
|
|
||||||
|
// look for the known tokens
|
||||||
|
if ( token == _T("underlined") || token == _("underlined") )
|
||||||
|
{
|
||||||
|
SetUnderlined(TRUE);
|
||||||
|
}
|
||||||
|
else if ( token == _T("light") || token == _("light") )
|
||||||
|
{
|
||||||
|
SetWeight(wxFONTWEIGHT_LIGHT);
|
||||||
|
}
|
||||||
|
else if ( token == _T("bold") || token == _("bold") )
|
||||||
|
{
|
||||||
|
SetWeight(wxFONTWEIGHT_BOLD);
|
||||||
|
}
|
||||||
|
else if ( token == _T("italic") || token == _("italic") )
|
||||||
|
{
|
||||||
|
SetStyle(wxFONTSTYLE_ITALIC);
|
||||||
|
}
|
||||||
|
else if ( token.ToULong(&size) )
|
||||||
|
{
|
||||||
|
pointsize = (int)size;
|
||||||
|
}
|
||||||
|
else if ( (encoding = wxTheFontMapper->CharsetToEncoding(token, FALSE))
|
||||||
|
!= wxFONTENCODING_DEFAULT )
|
||||||
|
{
|
||||||
|
SetEncoding(encoding);
|
||||||
|
}
|
||||||
|
else // assume it is the face name
|
||||||
|
{
|
||||||
|
if ( !face.empty() )
|
||||||
|
{
|
||||||
|
face += _T(' ');
|
||||||
|
}
|
||||||
|
|
||||||
|
face += token;
|
||||||
|
|
||||||
|
// skip the code which resets face below
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we had had the facename, we shouldn't continue appending tokens
|
||||||
|
// to it (i.e. "foo bold bar" shouldn't result in the facename "foo
|
||||||
|
// bar")
|
||||||
|
if ( !face.empty() )
|
||||||
|
{
|
||||||
|
SetFaceName(face);
|
||||||
|
face.clear();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// we might not have flushed it inside the loop
|
||||||
|
if ( !face.empty() )
|
||||||
|
{
|
||||||
|
SetFaceName(face);
|
||||||
|
}
|
||||||
|
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // generic or wxMSW
|
||||||
|
|
||||||
|
@@ -146,37 +146,6 @@ wxFontRefData::~wxFontRefData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// wxNativeFontInfo
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool wxNativeFontInfo::FromString(const wxString& s)
|
|
||||||
{
|
|
||||||
wxStringTokenizer tokenizer(s, _T(";"));
|
|
||||||
|
|
||||||
wxString token = tokenizer.GetNextToken();
|
|
||||||
//
|
|
||||||
// Ignore the version for now
|
|
||||||
//
|
|
||||||
|
|
||||||
xFontName = tokenizer.GetNextToken();
|
|
||||||
if(!xFontName)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxNativeFontInfo::ToString() const
|
|
||||||
{
|
|
||||||
wxString s;
|
|
||||||
|
|
||||||
s.Printf(_T("%d;%s"),
|
|
||||||
0, // version
|
|
||||||
xFontName.c_str());
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -146,37 +146,6 @@ wxFontRefData::~wxFontRefData()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
// wxNativeFontInfo
|
|
||||||
// ----------------------------------------------------------------------------
|
|
||||||
|
|
||||||
bool wxNativeFontInfo::FromString(const wxString& s)
|
|
||||||
{
|
|
||||||
wxStringTokenizer tokenizer(s, _T(";"));
|
|
||||||
|
|
||||||
wxString token = tokenizer.GetNextToken();
|
|
||||||
//
|
|
||||||
// Ignore the version for now
|
|
||||||
//
|
|
||||||
|
|
||||||
xFontName = tokenizer.GetNextToken();
|
|
||||||
if(!xFontName)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
return TRUE;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxString wxNativeFontInfo::ToString() const
|
|
||||||
{
|
|
||||||
wxString s;
|
|
||||||
|
|
||||||
s.Printf(_T("%d;%s"),
|
|
||||||
0, // version
|
|
||||||
xFontName.c_str());
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// wxFont
|
// wxFont
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -153,6 +153,91 @@ wxString wxNativeEncodingInfo::ToString() const
|
|||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// wxNativeFontInfo
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
void wxNativeFontInfo::Init()
|
||||||
|
{
|
||||||
|
xFontName.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromString(const wxString& s)
|
||||||
|
{
|
||||||
|
wxStringTokenizer tokenizer(s, _T(";"));
|
||||||
|
|
||||||
|
// check the version
|
||||||
|
wxString token = tokenizer.GetNextToken();
|
||||||
|
if ( token != _T('0') )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
xFontName = tokenizer.GetNextToken();
|
||||||
|
|
||||||
|
// this should be the end
|
||||||
|
if ( tokenizer.HasMoreTokens() )
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
return FromXFontName(xFontName);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToString() const
|
||||||
|
{
|
||||||
|
// 0 is the version
|
||||||
|
return wxString::Format(_T("%d;%s"), 0, GetXFontName().c_str());
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromUserString(const wxString& s)
|
||||||
|
{
|
||||||
|
return FromXFontName(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::ToUserString() const
|
||||||
|
{
|
||||||
|
return GetXFontName();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool wxNativeFontInfo::FromXFontName(const wxString& xFontName)
|
||||||
|
{
|
||||||
|
// TODO: we should be able to handle the font aliases here, but how?
|
||||||
|
wxStringTokenizer tokenizer(xFontName, _T("-"), wxTOKEN_STRTOK);
|
||||||
|
|
||||||
|
for ( size_t n = 0; n < WXSIZEOF(fontElements); n++ )
|
||||||
|
{
|
||||||
|
if ( !tokenizer.HasMoreTokens() )
|
||||||
|
{
|
||||||
|
// not enough elements in the XLFD - or maybe an alias
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
fontElements[n] = tokenizer.GetNextToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
// this should be all
|
||||||
|
return !tokenizer.HasMoreTokens();
|
||||||
|
}
|
||||||
|
|
||||||
|
wxString wxNativeFontInfo::GetXFontName() const
|
||||||
|
{
|
||||||
|
if ( xFontName.empty() )
|
||||||
|
{
|
||||||
|
for ( size_t n = 0; n < WXSIZEOF(fontElements); n++ )
|
||||||
|
{
|
||||||
|
// replace the non specified elements with '*' except for the
|
||||||
|
// additional style which is usually just omitted
|
||||||
|
wxString elt = fontElements[n];
|
||||||
|
if ( elt.empty() && n != 5 )
|
||||||
|
{
|
||||||
|
elt = _T('*');
|
||||||
|
}
|
||||||
|
|
||||||
|
// const_cast
|
||||||
|
((wxNativeFontInfo *)this)->xFontName << _T('-') << elt;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return xFontName;
|
||||||
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// common functions
|
// common functions
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
@@ -228,7 +313,7 @@ bool wxGetNativeFontEncoding(wxFontEncoding encoding,
|
|||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
info->encoding = encoding;
|
info->encoding = encoding;
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user