Allow displaying Japanese character with wxMotif/ANSI under a
Japanese EUC-JP locale: - add a #define (wxMOTIF_NEW_FONT_HANDLING) defaulting to off - factor the code for getting text extents in a central wxGetTextExtent function - when the new font handling is enabled load a fontset instead of a single font. For non-Japanese locales this should load a fontset containing a single font. - on a Japanese locale set the default point size to 15: the Japanese fonts I have are much more readable like this. - do not set the wordwrap property for multiline wxTextCtrl with OpenMotif 2.1, otherwise it crashes when text is added git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@35035 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -43,6 +43,7 @@ wxGTK:
|
|||||||
|
|
||||||
- ShowFullScreen() shows the window if it was still hidden (rpedroso)
|
- ShowFullScreen() shows the window if it was still hidden (rpedroso)
|
||||||
- Implemented wxTopLevelWindow::RequestUserAttention() (Mart Raudsepp)
|
- Implemented wxTopLevelWindow::RequestUserAttention() (Mart Raudsepp)
|
||||||
|
- Base library is now binary compatible when built with wxGTK and wxMotif
|
||||||
|
|
||||||
wxOS2
|
wxOS2
|
||||||
|
|
||||||
@@ -53,6 +54,11 @@ wxUniv:
|
|||||||
- Window creation now honours wxVSCROLL.
|
- Window creation now honours wxVSCROLL.
|
||||||
- Standalone scrollbars generate events of correct type (Jochen Roemmler)
|
- Standalone scrollbars generate events of correct type (Jochen Roemmler)
|
||||||
|
|
||||||
|
wxMotif:
|
||||||
|
|
||||||
|
- Base library is now binary compatible when built with wxGTK and wxMotif
|
||||||
|
- wxMotif can now display Japanese text under Japanese locale.
|
||||||
|
|
||||||
|
|
||||||
2.6.1
|
2.6.1
|
||||||
-----
|
-----
|
||||||
|
@@ -2677,6 +2677,7 @@ typedef void* WXRegion;
|
|||||||
typedef void* WXFont;
|
typedef void* WXFont;
|
||||||
typedef void* WXImage;
|
typedef void* WXImage;
|
||||||
typedef void* WXFontList;
|
typedef void* WXFontList;
|
||||||
|
typedef void* WXFontSet;
|
||||||
typedef void* WXRendition;
|
typedef void* WXRendition;
|
||||||
typedef void* WXRenderTable;
|
typedef void* WXRenderTable;
|
||||||
typedef void* WXFontType; /* either a XmFontList or XmRenderTable */
|
typedef void* WXFontType; /* either a XmFontList or XmRenderTable */
|
||||||
|
@@ -16,6 +16,10 @@
|
|||||||
#pragma interface "font.h"
|
#pragma interface "font.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if __WXMOTIF20__ && !__WXLESSTIF__ && !defined(wxMOTIF_NEW_FONT_HANDLING)
|
||||||
|
#define wxMOTIF_NEW_FONT_HANDLING 0 // safe default
|
||||||
|
#endif
|
||||||
|
|
||||||
class wxXFont;
|
class wxXFont;
|
||||||
|
|
||||||
// Font
|
// Font
|
||||||
@@ -95,14 +99,18 @@ public:
|
|||||||
WXDisplay* display = NULL) const;
|
WXDisplay* display = NULL) const;
|
||||||
|
|
||||||
// These two are helper functions for convenient access of the above.
|
// These two are helper functions for convenient access of the above.
|
||||||
|
#if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
WXFontStructPtr GetFontStruct(double scale = 1.0,
|
WXFontStructPtr GetFontStruct(double scale = 1.0,
|
||||||
WXDisplay* display = NULL) const;
|
WXDisplay* display = NULL) const;
|
||||||
WXFontList GetFontList(double scale = 1.0,
|
WXFontList GetFontList(double scale = 1.0,
|
||||||
WXDisplay* display = NULL) const;
|
WXDisplay* display = NULL) const;
|
||||||
#if __WXMOTIF20__
|
#else
|
||||||
|
WXFontSet GetFontSet(double scale, WXDisplay* display = NULL) const;
|
||||||
|
#endif
|
||||||
|
#if __WXMOTIF20__ // && !__WXLESSTIF__ for 2.7
|
||||||
WXRenderTable GetRenderTable(WXDisplay* display) const;
|
WXRenderTable GetRenderTable(WXDisplay* display) const;
|
||||||
#endif
|
#endif
|
||||||
// returns either a XmFontList or XmRendition, depending
|
// returns either a XmFontList or XmRenderTable, depending
|
||||||
// on Motif version
|
// on Motif version
|
||||||
WXFontType GetFontType(WXDisplay* display) const;
|
WXFontType GetFontType(WXDisplay* display) const;
|
||||||
// like the function above but does a copy for XmFontList
|
// like the function above but does a copy for XmFontList
|
||||||
|
@@ -36,7 +36,7 @@ class WXDLLEXPORT wxColour;
|
|||||||
#define wxCHECK_LESSTIF_VERSION( major, minor ) \
|
#define wxCHECK_LESSTIF_VERSION( major, minor ) \
|
||||||
( LesstifVersion >= (major) * 1000 + (minor) )
|
( LesstifVersion >= (major) * 1000 + (minor) )
|
||||||
|
|
||||||
#define wxCHECK_LESSTIF() ( defined(LesstifVersion) && LesstifVersion > 0 )
|
#define wxCHECK_LESSTIF() ( __WXLESSTIF__ )
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// Miscellaneous functions
|
// Miscellaneous functions
|
||||||
@@ -96,6 +96,10 @@ extern void wxDoChangeBackgroundColour(WXWidget widget,
|
|||||||
wxColour& backgroundColour,
|
wxColour& backgroundColour,
|
||||||
bool changeArmColour = false);
|
bool changeArmColour = false);
|
||||||
extern void wxDoChangeFont(WXWidget widget, wxFont& font);
|
extern void wxDoChangeFont(WXWidget widget, wxFont& font);
|
||||||
|
extern void wxGetTextExtent(WXDisplay* display, const wxFont& font,
|
||||||
|
double scale,
|
||||||
|
const wxString& string, int* width, int* height,
|
||||||
|
int* ascent, int* descent);
|
||||||
|
|
||||||
#define wxNO_COLORS 0x00
|
#define wxNO_COLORS 0x00
|
||||||
#define wxBACK_COLORS 0x01
|
#define wxBACK_COLORS 0x01
|
||||||
|
@@ -131,8 +131,10 @@ bool MyApp::OnInit()
|
|||||||
wxLANGUAGE_CZECH,
|
wxLANGUAGE_CZECH,
|
||||||
wxLANGUAGE_POLISH,
|
wxLANGUAGE_POLISH,
|
||||||
wxLANGUAGE_SWEDISH,
|
wxLANGUAGE_SWEDISH,
|
||||||
#if wxUSE_UNICODE
|
#if wxUSE_UNICODE || defined(__WXMOTIF__)
|
||||||
wxLANGUAGE_JAPANESE,
|
wxLANGUAGE_JAPANESE,
|
||||||
|
#endif
|
||||||
|
#if wxUSE_UNICODE
|
||||||
wxLANGUAGE_GEORGIAN,
|
wxLANGUAGE_GEORGIAN,
|
||||||
#endif
|
#endif
|
||||||
wxLANGUAGE_ENGLISH,
|
wxLANGUAGE_ENGLISH,
|
||||||
@@ -153,8 +155,10 @@ bool MyApp::OnInit()
|
|||||||
_T("Czech"),
|
_T("Czech"),
|
||||||
_T("Polish"),
|
_T("Polish"),
|
||||||
_T("Swedish"),
|
_T("Swedish"),
|
||||||
#if wxUSE_UNICODE
|
#if wxUSE_UNICODE || defined(__WXMOTIF__)
|
||||||
_T("Japanese"),
|
_T("Japanese"),
|
||||||
|
#endif
|
||||||
|
#if wxUSE_UNICODE
|
||||||
_T("Georgian"),
|
_T("Georgian"),
|
||||||
#endif
|
#endif
|
||||||
_T("English"),
|
_T("English"),
|
||||||
|
@@ -1035,7 +1035,7 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
|
|||||||
int cx = 0;
|
int cx = 0;
|
||||||
int cy = 0;
|
int cy = 0;
|
||||||
int ascent = 0;
|
int ascent = 0;
|
||||||
int slen;
|
int slen = text.length();
|
||||||
|
|
||||||
// Set FillStyle, otherwise X will use current stipple!
|
// Set FillStyle, otherwise X will use current stipple!
|
||||||
XGCValues gcV, gcBackingV;
|
XGCValues gcV, gcBackingV;
|
||||||
@@ -1049,27 +1049,9 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
|
|||||||
XSetFillStyle ((Display*) m_display, (GC) m_gcBacking, FillSolid);
|
XSetFillStyle ((Display*) m_display, (GC) m_gcBacking, FillSolid);
|
||||||
}
|
}
|
||||||
|
|
||||||
slen = strlen(text);
|
|
||||||
|
|
||||||
if (m_font.Ok())
|
if (m_font.Ok())
|
||||||
{
|
wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
text, &cx, &cy, &ascent, NULL);
|
||||||
int direction, descent;
|
|
||||||
XCharStruct overall_return;
|
|
||||||
#if 0
|
|
||||||
if (use16)
|
|
||||||
(void)XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *)(const char*) text, slen, &direction,
|
|
||||||
&ascent, &descent, &overall_return);
|
|
||||||
else
|
|
||||||
#endif // 0
|
|
||||||
(void)XTextExtents((XFontStruct*) pFontStruct,
|
|
||||||
wxConstCast(text.c_str(), char),
|
|
||||||
slen, &direction,
|
|
||||||
&ascent, &descent, &overall_return);
|
|
||||||
|
|
||||||
cx = overall_return.width;
|
|
||||||
cy = ascent + descent;
|
|
||||||
}
|
|
||||||
|
|
||||||
// First draw a rectangle representing the text background, if a text
|
// First draw a rectangle representing the text background, if a text
|
||||||
// background is specified
|
// background is specified
|
||||||
@@ -1145,7 +1127,12 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
|
|||||||
(XChar2b *)(char*) (const char*) text, slen);
|
(XChar2b *)(char*) (const char*) text, slen);
|
||||||
else
|
else
|
||||||
#endif // 0
|
#endif // 0
|
||||||
|
#if wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
XFontSet fset = (XFontSet) m_font.GetFontSet (m_userScaleY * m_logicalScaleY, m_display);
|
||||||
|
XmbDrawString((Display*) m_display, (Pixmap) m_pixmap, fset, (GC) m_gc, XLOG2DEV (x), YLOG2DEV (y) + ascent, text, slen);
|
||||||
|
#else
|
||||||
XDrawString((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, XLOG2DEV (x), YLOG2DEV (y) + ascent, text, slen);
|
XDrawString((Display*) m_display, (Pixmap) m_pixmap, (GC) m_gc, XLOG2DEV (x), YLOG2DEV (y) + ascent, text, slen);
|
||||||
|
#endif
|
||||||
|
|
||||||
if (m_window && m_window->GetBackingPixmap()) {
|
if (m_window && m_window->GetBackingPixmap()) {
|
||||||
#if 0
|
#if 0
|
||||||
@@ -1155,9 +1142,15 @@ void wxWindowDC::DoDrawText( const wxString &text, wxCoord x, wxCoord y )
|
|||||||
(XChar2b *)(char*) (const char*) text, slen);
|
(XChar2b *)(char*) (const char*) text, slen);
|
||||||
else
|
else
|
||||||
#endif // 0
|
#endif // 0
|
||||||
|
#if wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
XmbDrawString((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(), fset, (GC) m_gcBacking,
|
||||||
|
XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent,
|
||||||
|
wxConstCast(text.c_str(), char), slen);
|
||||||
|
#else
|
||||||
XDrawString((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(), (GC) m_gcBacking,
|
XDrawString((Display*) m_display, (Pixmap) m_window->GetBackingPixmap(), (GC) m_gcBacking,
|
||||||
XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent,
|
XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent,
|
||||||
wxConstCast(text.c_str(), char), slen);
|
wxConstCast(text.c_str(), char), slen);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// restore fill style
|
// restore fill style
|
||||||
@@ -1208,31 +1201,10 @@ void wxWindowDC::DoDrawRotatedText( const wxString &text, wxCoord x, wxCoord y,
|
|||||||
int cx = 0;
|
int cx = 0;
|
||||||
int cy = 0;
|
int cy = 0;
|
||||||
int ascent = 0;
|
int ascent = 0;
|
||||||
int slen = text.length();
|
|
||||||
|
|
||||||
if (m_font.Ok())
|
if (m_font.Ok())
|
||||||
{
|
wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
|
||||||
// Calculate text extent.
|
text, &cx, &cy, &ascent, NULL);
|
||||||
WXFontStructPtr pFontStruct =
|
|
||||||
m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
|
||||||
int direction, descent;
|
|
||||||
XCharStruct overall_return;
|
|
||||||
#if 0
|
|
||||||
if (use16)
|
|
||||||
(void)XTextExtents16((XFontStruct*) pFontStruct,
|
|
||||||
(XChar2b *)(const char*) text,
|
|
||||||
slen, &direction,
|
|
||||||
&ascent, &descent, &overall_return);
|
|
||||||
else
|
|
||||||
#endif // 0
|
|
||||||
(void)XTextExtents((XFontStruct*) pFontStruct,
|
|
||||||
wxConstCast(text.c_str(), char),
|
|
||||||
slen, &direction,
|
|
||||||
&ascent, &descent, &overall_return);
|
|
||||||
|
|
||||||
cx = overall_return.width;
|
|
||||||
cy = ascent + descent;
|
|
||||||
}
|
|
||||||
|
|
||||||
wxBitmap src(cx, cy);
|
wxBitmap src(cx, cy);
|
||||||
wxMemoryDC dc;
|
wxMemoryDC dc;
|
||||||
@@ -1340,9 +1312,7 @@ void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoor
|
|||||||
{
|
{
|
||||||
wxCHECK_RET( Ok(), "invalid dc" );
|
wxCHECK_RET( Ok(), "invalid dc" );
|
||||||
|
|
||||||
wxFont* theFont = font;
|
const wxFont* theFont = font ? font : &m_font;
|
||||||
if (!theFont)
|
|
||||||
theFont = (wxFont *)&m_font; // const_cast
|
|
||||||
|
|
||||||
if (!theFont->Ok())
|
if (!theFont->Ok())
|
||||||
{
|
{
|
||||||
@@ -1354,33 +1324,11 @@ void wxWindowDC::DoGetTextExtent( const wxString &string, wxCoord *width, wxCoor
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = theFont->GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
wxGetTextExtent(m_display, *theFont, m_userScaleY * m_logicalScaleY,
|
||||||
|
string, width, height, NULL, descent);
|
||||||
|
|
||||||
int direction, ascent, descent2;
|
if (width) *width = XDEV2LOGREL (*width);
|
||||||
XCharStruct overall;
|
if (height) *height = YDEV2LOGREL (*height);
|
||||||
int slen;
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (use16)
|
|
||||||
slen = str16len(string);
|
|
||||||
else
|
|
||||||
#endif // 0
|
|
||||||
slen = strlen(string);
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (use16)
|
|
||||||
XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *) (char*) (const char*) string, slen, &direction,
|
|
||||||
&ascent, &descent2, &overall);
|
|
||||||
else
|
|
||||||
#endif // 0
|
|
||||||
XTextExtents((XFontStruct*) pFontStruct,
|
|
||||||
wxConstCast(string.c_str(), char), slen, &direction,
|
|
||||||
&ascent, &descent2, &overall);
|
|
||||||
|
|
||||||
if (width) *width = XDEV2LOGREL (overall.width);
|
|
||||||
if (height) *height = YDEV2LOGREL (ascent + descent2);
|
|
||||||
if (descent)
|
|
||||||
*descent = descent2;
|
|
||||||
if (externalLeading)
|
if (externalLeading)
|
||||||
*externalLeading = 0;
|
*externalLeading = 0;
|
||||||
}
|
}
|
||||||
@@ -1389,14 +1337,13 @@ wxCoord wxWindowDC::GetCharWidth() const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( Ok(), 0, "invalid dc" );
|
wxCHECK_MSG( Ok(), 0, "invalid dc" );
|
||||||
wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
|
wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
|
||||||
|
|
||||||
|
int width;
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY * m_logicalScaleY, m_display);
|
wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
|
||||||
|
"x", &width, NULL, NULL, NULL);
|
||||||
|
|
||||||
int direction, ascent, descent;
|
return XDEV2LOGREL(width);
|
||||||
XCharStruct overall;
|
|
||||||
XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
|
|
||||||
&descent, &overall);
|
|
||||||
return XDEV2LOGREL(overall.width);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCoord wxWindowDC::GetCharHeight() const
|
wxCoord wxWindowDC::GetCharHeight() const
|
||||||
@@ -1404,14 +1351,12 @@ wxCoord wxWindowDC::GetCharHeight() const
|
|||||||
wxCHECK_MSG( Ok(), 0, "invalid dc" );
|
wxCHECK_MSG( Ok(), 0, "invalid dc" );
|
||||||
wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
|
wxCHECK_MSG( m_font.Ok(), 0, "invalid font" );
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
int height;
|
||||||
|
|
||||||
int direction, ascent, descent;
|
wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
|
||||||
XCharStruct overall;
|
"x", NULL, &height, NULL, NULL);
|
||||||
XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
|
|
||||||
&descent, &overall);
|
return XDEV2LOGREL(height);
|
||||||
// return XDEV2LOGREL(overall.ascent + overall.descent);
|
|
||||||
return XDEV2LOGREL(ascent + descent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindowDC::DoGetSize( int *width, int *height ) const
|
void wxWindowDC::DoGetSize( int *width, int *height ) const
|
||||||
@@ -1480,6 +1425,7 @@ void wxWindowDC::SetFont( const wxFont &font )
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
|
||||||
|
|
||||||
Font fontId = ((XFontStruct*)pFontStruct)->fid;
|
Font fontId = ((XFontStruct*)pFontStruct)->fid;
|
||||||
@@ -1487,6 +1433,7 @@ void wxWindowDC::SetFont( const wxFont &font )
|
|||||||
|
|
||||||
if (m_window && m_window->GetBackingPixmap())
|
if (m_window && m_window->GetBackingPixmap())
|
||||||
XSetFont ((Display*) m_display,(GC) m_gcBacking, fontId);
|
XSetFont ((Display*) m_display,(GC) m_gcBacking, fontId);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel)
|
void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel)
|
||||||
|
@@ -64,11 +64,14 @@ public:
|
|||||||
wxXFont();
|
wxXFont();
|
||||||
~wxXFont();
|
~wxXFont();
|
||||||
|
|
||||||
|
#if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
WXFontStructPtr m_fontStruct; // XFontStruct
|
WXFontStructPtr m_fontStruct; // XFontStruct
|
||||||
#if !wxUSE_RENDER_TABLE
|
#endif
|
||||||
|
#if !wxUSE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
|
||||||
WXFontList m_fontList; // Motif XmFontList
|
WXFontList m_fontList; // Motif XmFontList
|
||||||
#else // if wxUSE_RENDER_TABLE
|
#else // if wxUSE_RENDER_TABLE
|
||||||
WXRenderTable m_renderTable; // Motif XmRenderTable
|
WXRenderTable m_renderTable; // Motif XmRenderTable
|
||||||
|
WXRendition m_rendition; // Motif XmRendition
|
||||||
#endif
|
#endif
|
||||||
WXDisplay* m_display; // XDisplay
|
WXDisplay* m_display; // XDisplay
|
||||||
int m_scale; // Scale * 100
|
int m_scale; // Scale * 100
|
||||||
@@ -133,11 +136,14 @@ protected:
|
|||||||
|
|
||||||
wxXFont::wxXFont()
|
wxXFont::wxXFont()
|
||||||
{
|
{
|
||||||
|
#if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
m_fontStruct = (WXFontStructPtr) 0;
|
m_fontStruct = (WXFontStructPtr) 0;
|
||||||
#if !wxUSE_RENDER_TABLE
|
#endif
|
||||||
|
#if !wxUSE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
|
||||||
m_fontList = (WXFontList) 0;
|
m_fontList = (WXFontList) 0;
|
||||||
#else // if wxUSE_RENDER_TABLE
|
#else // if wxUSE_RENDER_TABLE
|
||||||
m_renderTable = (WXRenderTable) 0;
|
m_renderTable = (WXRenderTable) 0;
|
||||||
|
m_rendition = (WXRendition) 0;
|
||||||
#endif
|
#endif
|
||||||
m_display = (WXDisplay*) 0;
|
m_display = (WXDisplay*) 0;
|
||||||
m_scale = 100;
|
m_scale = 100;
|
||||||
@@ -536,6 +542,7 @@ wxXFont* wxFont::GetInternalFont(double scale, WXDisplay* display) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
// not found, create a new one
|
// not found, create a new one
|
||||||
|
wxString xFontSpec;
|
||||||
XFontStruct *font = (XFontStruct *)
|
XFontStruct *font = (XFontStruct *)
|
||||||
wxLoadQueryNearestFont(pointSize,
|
wxLoadQueryNearestFont(pointSize,
|
||||||
M_FONTDATA->m_family,
|
M_FONTDATA->m_family,
|
||||||
@@ -543,7 +550,8 @@ wxXFont* wxFont::GetInternalFont(double scale, WXDisplay* display) const
|
|||||||
M_FONTDATA->m_weight,
|
M_FONTDATA->m_weight,
|
||||||
M_FONTDATA->m_underlined,
|
M_FONTDATA->m_underlined,
|
||||||
wxT(""),
|
wxT(""),
|
||||||
M_FONTDATA->m_encoding);
|
M_FONTDATA->m_encoding,
|
||||||
|
&xFontSpec);
|
||||||
|
|
||||||
if ( !font )
|
if ( !font )
|
||||||
{
|
{
|
||||||
@@ -553,21 +561,27 @@ wxXFont* wxFont::GetInternalFont(double scale, WXDisplay* display) const
|
|||||||
}
|
}
|
||||||
|
|
||||||
wxXFont* f = new wxXFont;
|
wxXFont* f = new wxXFont;
|
||||||
|
#if wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
XFreeFont( (Display*) display, font );
|
||||||
|
#else
|
||||||
f->m_fontStruct = (WXFontStructPtr)font;
|
f->m_fontStruct = (WXFontStructPtr)font;
|
||||||
|
#endif
|
||||||
f->m_display = ( display ? display : wxGetDisplay() );
|
f->m_display = ( display ? display : wxGetDisplay() );
|
||||||
f->m_scale = intScale;
|
f->m_scale = intScale;
|
||||||
|
|
||||||
M_FONTDATA->m_fonts.Append(f);
|
#if wxUSE_RENDER_TABLE
|
||||||
|
|
||||||
#if !wxUSE_RENDER_TABLE
|
|
||||||
f->m_fontList = XmFontListCreate ((XFontStruct*) font, XmSTRING_DEFAULT_CHARSET);
|
|
||||||
#else // if wxUSE_RENDER_TABLE
|
|
||||||
XmRendition rendition;
|
XmRendition rendition;
|
||||||
XmRenderTable renderTable;
|
XmRenderTable renderTable;
|
||||||
Arg args[5];
|
Arg args[5];
|
||||||
int count = 0;
|
int count = 0;
|
||||||
|
|
||||||
|
#if wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
wxChar* fontSpec = wxStrdup( xFontSpec.c_str() );
|
||||||
|
XtSetArg( args[count], XmNfontName, fontSpec ); ++count;
|
||||||
|
XtSetArg( args[count], XmNfontType, XmFONT_IS_FONTSET ); ++count;
|
||||||
|
#else
|
||||||
XtSetArg( args[count], XmNfont, font ); ++count;
|
XtSetArg( args[count], XmNfont, font ); ++count;
|
||||||
|
#endif
|
||||||
XtSetArg( args[count], XmNunderlineType,
|
XtSetArg( args[count], XmNunderlineType,
|
||||||
GetUnderlined() ? XmSINGLE_LINE : XmNO_LINE ); ++count;
|
GetUnderlined() ? XmSINGLE_LINE : XmNO_LINE ); ++count;
|
||||||
rendition = XmRenditionCreate( XmGetXmDisplay( (Display*)f->m_display ),
|
rendition = XmRenditionCreate( XmGetXmDisplay( (Display*)f->m_display ),
|
||||||
@@ -577,11 +591,20 @@ wxXFont* wxFont::GetInternalFont(double scale, WXDisplay* display) const
|
|||||||
XmMERGE_REPLACE );
|
XmMERGE_REPLACE );
|
||||||
|
|
||||||
f->m_renderTable = (WXRenderTable)renderTable;
|
f->m_renderTable = (WXRenderTable)renderTable;
|
||||||
|
f->m_rendition = (WXRendition)rendition;
|
||||||
|
wxASSERT( f->m_renderTable != NULL );
|
||||||
|
#else // if !wxUSE_RENDER_TABLE
|
||||||
|
f->m_fontList = XmFontListCreate ((XFontStruct*) font, XmSTRING_DEFAULT_CHARSET);
|
||||||
|
wxASSERT( f->m_fontList != NULL );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
M_FONTDATA->m_fonts.Append(f);
|
||||||
|
|
||||||
return f;
|
return f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
|
||||||
WXFontStructPtr wxFont::GetFontStruct(double scale, WXDisplay* display) const
|
WXFontStructPtr wxFont::GetFontStruct(double scale, WXDisplay* display) const
|
||||||
{
|
{
|
||||||
wxXFont* f = GetInternalFont(scale, display);
|
wxXFont* f = GetInternalFont(scale, display);
|
||||||
@@ -600,6 +623,8 @@ WXFontList wxFont::GetFontList(double scale, WXDisplay* display) const
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#endif // !wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
|
||||||
// declared in the header, can't use wxUSE_RENDER_TABLE
|
// declared in the header, can't use wxUSE_RENDER_TABLE
|
||||||
#if wxCHECK_MOTIF_VERSION( 2, 0 )
|
#if wxCHECK_MOTIF_VERSION( 2, 0 )
|
||||||
|
|
||||||
@@ -614,7 +639,7 @@ WXRenderTable wxFont::GetRenderTable(WXDisplay* display) const
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif // wxCHECK_MOTIF_VERSION( 2, 0 )
|
||||||
|
|
||||||
WXFontType wxFont::GetFontType(WXDisplay* display) const
|
WXFontType wxFont::GetFontType(WXDisplay* display) const
|
||||||
{
|
{
|
||||||
@@ -642,3 +667,62 @@ WXFontType wxFont::GetFontTypeC(WXDisplay* display) const
|
|||||||
return (WXString)XmNfontList;
|
return (WXString)XmNfontList;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
|
||||||
|
WXFontSet wxFont::GetFontSet(double scale, WXDisplay* display) const
|
||||||
|
{
|
||||||
|
wxXFont* f = GetInternalFont(scale, display);
|
||||||
|
|
||||||
|
if( !f ) return (WXFontSet) 0;
|
||||||
|
|
||||||
|
Arg args[2];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
XtSetArg( args[count], XmNfont, 0 ); ++count;
|
||||||
|
XmRenditionRetrieve( (XmRendition) f->m_rendition, args, count );
|
||||||
|
|
||||||
|
return (WXFontSet) args[0].value;
|
||||||
|
}
|
||||||
|
|
||||||
|
void wxGetTextExtent(WXDisplay* display, const wxFont& font, double scale,
|
||||||
|
const wxString& str,
|
||||||
|
int* width, int* height, int* ascent, int* descent)
|
||||||
|
{
|
||||||
|
XRectangle ink, logical;
|
||||||
|
WXFontSet fset = font.GetFontSet(scale, display);
|
||||||
|
|
||||||
|
XmbTextExtents( (XFontSet)fset, str.c_str(), str.length(), &ink, &logical);
|
||||||
|
|
||||||
|
if( width ) *width = logical.width;
|
||||||
|
if( height ) *height = logical.height;
|
||||||
|
if( ascent ) *ascent = -logical.y;
|
||||||
|
if( descent ) *descent = logical.height + logical.y;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else // if !wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
|
||||||
|
void wxGetTextExtent(WXDisplay* display, const wxFont& font,
|
||||||
|
double scale, const wxString& str,
|
||||||
|
int* width, int* height, int* ascent, int* descent)
|
||||||
|
{
|
||||||
|
WXFontStructPtr pFontStruct = font.GetFontStruct(scale, display);
|
||||||
|
|
||||||
|
int direction, ascent2, descent2;
|
||||||
|
XCharStruct overall;
|
||||||
|
int slen = str.Len();
|
||||||
|
|
||||||
|
XTextExtents((XFontStruct*) pFontStruct, (char*) str.c_str(), slen,
|
||||||
|
&direction, &ascent2, &descent2, &overall);
|
||||||
|
|
||||||
|
if ( width )
|
||||||
|
*width = (overall.width);
|
||||||
|
if ( height )
|
||||||
|
*height = (ascent2 + descent2);
|
||||||
|
if ( descent )
|
||||||
|
*descent = descent2;
|
||||||
|
if ( ascent )
|
||||||
|
*ascent = ascent2;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !wxMOTIF_NEW_FONT_HANDLING
|
||||||
|
@@ -161,11 +161,17 @@ wxColour wxSystemSettingsNative::GetColour(wxSystemColour index)
|
|||||||
|
|
||||||
wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
|
wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
|
||||||
{
|
{
|
||||||
|
int pointSize = 12;
|
||||||
|
|
||||||
|
if ( wxFont::GetDefaultEncoding() == wxFONTENCODING_SHIFT_JIS
|
||||||
|
|| wxFont::GetDefaultEncoding() == wxFONTENCODING_EUC_JP)
|
||||||
|
pointSize = 15;
|
||||||
|
|
||||||
switch (index)
|
switch (index)
|
||||||
{
|
{
|
||||||
case wxSYS_SYSTEM_FIXED_FONT:
|
case wxSYS_SYSTEM_FIXED_FONT:
|
||||||
{
|
{
|
||||||
return wxFont(12, wxMODERN, wxNORMAL, wxNORMAL, false);
|
return wxFont(pointSize, wxMODERN, wxNORMAL, wxNORMAL, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case wxSYS_DEVICE_DEFAULT_FONT:
|
case wxSYS_DEVICE_DEFAULT_FONT:
|
||||||
@@ -173,7 +179,7 @@ wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
|
|||||||
case wxSYS_DEFAULT_GUI_FONT:
|
case wxSYS_DEFAULT_GUI_FONT:
|
||||||
default:
|
default:
|
||||||
{
|
{
|
||||||
return wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, false);
|
return wxFont(pointSize, wxSWISS, wxNORMAL, wxNORMAL, false);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -121,25 +121,35 @@ bool wxTextCtrl::Create(wxWindow *parent,
|
|||||||
|
|
||||||
Widget parentWidget = (Widget) parent->GetClientWidget();
|
Widget parentWidget = (Widget) parent->GetClientWidget();
|
||||||
|
|
||||||
bool wantHorizScrolling = ((m_windowStyle & wxHSCROLL) != 0);
|
Bool wantHorizScroll = (m_windowStyle & wxHSCROLL) != 0 ? True : False;
|
||||||
|
|
||||||
// If we don't have horizontal scrollbars, we want word wrap.
|
// If we don't have horizontal scrollbars, we want word wrap.
|
||||||
bool wantWordWrap = !wantHorizScrolling;
|
// OpenMotif 2.1 crashes if wantWordWrap is True in Japanese
|
||||||
|
// locale (and probably other multibyte locales). The check might be
|
||||||
|
// more precise
|
||||||
|
#if wxCHECK_LESSTIF() || wxCHECK_MOTIF_VERSION( 2, 2 )
|
||||||
|
Bool wantWordWrap = wantHorizScroll == True ? False : True;
|
||||||
|
#else
|
||||||
|
Bool wantWordWrap = False;
|
||||||
|
#endif
|
||||||
|
|
||||||
if (m_windowStyle & wxTE_MULTILINE)
|
if (m_windowStyle & wxTE_MULTILINE)
|
||||||
{
|
{
|
||||||
Arg args[2];
|
Arg args[8];
|
||||||
XtSetArg (args[0], XmNscrollHorizontal, wantHorizScrolling ? True : False);
|
int count = 0;
|
||||||
XtSetArg (args[1], XmNwordWrap, wantWordWrap ? True : False);
|
XtSetArg (args[count], XmNscrollHorizontal, wantHorizScroll); ++count;
|
||||||
|
XtSetArg (args[count], (String) wxFont::GetFontTag(),
|
||||||
|
m_font.GetFontType( XtDisplay(parentWidget) ) ); ++count;
|
||||||
|
XtSetArg (args[count], XmNwordWrap, wantWordWrap); ++count;
|
||||||
|
XtSetArg (args[count], XmNvalue, value.c_str()); ++count;
|
||||||
|
XtSetArg (args[count], XmNeditable,
|
||||||
|
style & wxTE_READONLY ? False : True); ++count;
|
||||||
|
XtSetArg (args[count], XmNeditMode, XmMULTI_LINE_EDIT ); ++count;
|
||||||
|
|
||||||
m_mainWidget = (WXWidget) XmCreateScrolledText(parentWidget,
|
m_mainWidget =
|
||||||
wxConstCast(name.c_str(), char),
|
(WXWidget) XmCreateScrolledText(parentWidget,
|
||||||
args, 2);
|
wxConstCast(name.c_str(), char),
|
||||||
|
args, count);
|
||||||
|
|
||||||
XtVaSetValues ((Widget) m_mainWidget,
|
|
||||||
XmNeditable, ((style & wxTE_READONLY) ? False : True),
|
|
||||||
XmNeditMode, XmMULTI_LINE_EDIT,
|
|
||||||
NULL);
|
|
||||||
XtManageChild ((Widget) m_mainWidget);
|
XtManageChild ((Widget) m_mainWidget);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
@@ -149,13 +159,14 @@ bool wxTextCtrl::Create(wxWindow *parent,
|
|||||||
wxConstCast(name.c_str(), char),
|
wxConstCast(name.c_str(), char),
|
||||||
xmTextWidgetClass,
|
xmTextWidgetClass,
|
||||||
parentWidget,
|
parentWidget,
|
||||||
|
wxFont::GetFontTag(), m_font.GetFontType( XtDisplay(parentWidget) ),
|
||||||
|
XmNvalue, value.c_str(),
|
||||||
|
XmNeditable, (style & wxTE_READONLY) ?
|
||||||
|
False : True,
|
||||||
NULL
|
NULL
|
||||||
);
|
);
|
||||||
|
|
||||||
XtVaSetValues ((Widget) m_mainWidget,
|
#if 0
|
||||||
XmNeditable, ((style & wxTE_READONLY) ? False : True),
|
|
||||||
NULL);
|
|
||||||
|
|
||||||
// TODO: Is this relevant? What does it do?
|
// TODO: Is this relevant? What does it do?
|
||||||
int noCols = 2;
|
int noCols = 2;
|
||||||
if (!value.IsNull() && (value.Length() > (unsigned int) noCols))
|
if (!value.IsNull() && (value.Length() > (unsigned int) noCols))
|
||||||
@@ -163,6 +174,7 @@ bool wxTextCtrl::Create(wxWindow *parent,
|
|||||||
XtVaSetValues((Widget) m_mainWidget,
|
XtVaSetValues((Widget) m_mainWidget,
|
||||||
XmNcolumns, noCols,
|
XmNcolumns, noCols,
|
||||||
NULL);
|
NULL);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// remove border if asked for
|
// remove border if asked for
|
||||||
@@ -173,15 +185,6 @@ bool wxTextCtrl::Create(wxWindow *parent,
|
|||||||
NULL);
|
NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( !value.empty() )
|
|
||||||
{
|
|
||||||
// do this instead... MB
|
|
||||||
//
|
|
||||||
XtVaSetValues( (Widget) m_mainWidget,
|
|
||||||
XmNvalue, wxConstCast(value.c_str(), char),
|
|
||||||
NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
// install callbacks
|
// install callbacks
|
||||||
XtAddCallback((Widget) m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxTextWindowChangedProc, (XtPointer)this);
|
XtAddCallback((Widget) m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxTextWindowChangedProc, (XtPointer)this);
|
||||||
|
|
||||||
@@ -193,9 +196,6 @@ bool wxTextCtrl::Create(wxWindow *parent,
|
|||||||
|
|
||||||
XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this);
|
XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this);
|
||||||
|
|
||||||
// font
|
|
||||||
ChangeFont(false);
|
|
||||||
|
|
||||||
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
|
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
|
||||||
pos.x, pos.y, size.x, size.y);
|
pos.x, pos.y, size.x, size.y);
|
||||||
|
|
||||||
@@ -242,21 +242,18 @@ wxString wxTextCtrl::GetValue() const
|
|||||||
return str;
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxTextCtrl::SetValue(const wxString& value)
|
void wxTextCtrl::SetValue(const wxString& text)
|
||||||
{
|
{
|
||||||
m_inSetValue = true;
|
m_inSetValue = true;
|
||||||
|
|
||||||
// do this instead... MB
|
XmTextSetString ((Widget) m_mainWidget, wxConstCast(text.c_str(), char));
|
||||||
//
|
XtVaSetValues ((Widget) m_mainWidget,
|
||||||
// with (at least) OpenMotif 2.1 this causes a lot of flicker
|
XmNcursorPosition, text.length(),
|
||||||
#if 0
|
|
||||||
XtVaSetValues( (Widget) m_mainWidget,
|
|
||||||
XmNvalue, wxConstCast(value.c_str(), char),
|
|
||||||
NULL);
|
NULL);
|
||||||
#endif
|
|
||||||
|
|
||||||
Clear();
|
SetInsertionPoint(text.length());
|
||||||
AppendText( value );
|
XmTextShowPosition ((Widget) m_mainWidget, text.length());
|
||||||
|
m_modified = TRUE;
|
||||||
|
|
||||||
m_inSetValue = false;
|
m_inSetValue = false;
|
||||||
}
|
}
|
||||||
|
@@ -1464,29 +1464,24 @@ int wxWindow::GetCharHeight() const
|
|||||||
{
|
{
|
||||||
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
|
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
|
int height;
|
||||||
|
|
||||||
|
wxGetTextExtent (GetXDisplay(), m_font, 1.0,
|
||||||
|
"x", NULL, &height, NULL, NULL);
|
||||||
|
|
||||||
int direction, ascent, descent;
|
return height;
|
||||||
XCharStruct overall;
|
|
||||||
XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
|
|
||||||
&descent, &overall);
|
|
||||||
|
|
||||||
// return (overall.ascent + overall.descent);
|
|
||||||
return (ascent + descent);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int wxWindow::GetCharWidth() const
|
int wxWindow::GetCharWidth() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
|
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
|
int width;
|
||||||
|
|
||||||
|
wxGetTextExtent (GetXDisplay(), m_font, 1.0,
|
||||||
|
"x", &width, NULL, NULL, NULL);
|
||||||
|
|
||||||
int direction, ascent, descent;
|
return width;
|
||||||
XCharStruct overall;
|
|
||||||
XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
|
|
||||||
&descent, &overall);
|
|
||||||
|
|
||||||
return overall.width;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxWindow::GetTextExtent(const wxString& string,
|
void wxWindow::GetTextExtent(const wxString& string,
|
||||||
@@ -1494,36 +1489,14 @@ void wxWindow::GetTextExtent(const wxString& string,
|
|||||||
int *descent, int *externalLeading,
|
int *descent, int *externalLeading,
|
||||||
const wxFont *theFont) const
|
const wxFont *theFont) const
|
||||||
{
|
{
|
||||||
wxFont *fontToUse = (wxFont *)theFont;
|
const wxFont *fontToUse = theFont ? theFont : &m_font;
|
||||||
if (!fontToUse)
|
|
||||||
fontToUse = (wxFont *) & m_font;
|
|
||||||
|
|
||||||
wxCHECK_RET( fontToUse->Ok(), "valid window font needed" );
|
wxCHECK_RET( fontToUse->Ok(), "valid window font needed" );
|
||||||
|
|
||||||
WXFontStructPtr pFontStruct = fontToUse->GetFontStruct(1.0, GetXDisplay());
|
|
||||||
|
|
||||||
int direction, ascent, descent2;
|
|
||||||
XCharStruct overall;
|
|
||||||
int slen = string.Len();
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (use16)
|
|
||||||
XTextExtents16((XFontStruct*) pFontStruct, (XChar2b *) (char*) (const char*) string, slen, &direction,
|
|
||||||
&ascent, &descent2, &overall);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
XTextExtents((XFontStruct*) pFontStruct, string, slen,
|
|
||||||
&direction, &ascent, &descent2, &overall);
|
|
||||||
|
|
||||||
if ( x )
|
|
||||||
*x = (overall.width);
|
|
||||||
if ( y )
|
|
||||||
*y = (ascent + descent2);
|
|
||||||
if (descent)
|
|
||||||
*descent = descent2;
|
|
||||||
if (externalLeading)
|
if (externalLeading)
|
||||||
*externalLeading = 0;
|
*externalLeading = 0;
|
||||||
|
wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
|
||||||
|
string, x, y, NULL, descent);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -31,6 +31,7 @@
|
|||||||
*wxEVT_MEDIA_LOADED*;
|
*wxEVT_MEDIA_LOADED*;
|
||||||
*wxGenericListCtrl*SetItemFont*wxFont*;
|
*wxGenericListCtrl*SetItemFont*wxFont*;
|
||||||
*wxGenericListCtrl*GetItemFont*;
|
*wxGenericListCtrl*GetItemFont*;
|
||||||
|
*wxGetTextExtent*wxFont*wxString*;
|
||||||
*wxImage*HSVValue*;
|
*wxImage*HSVValue*;
|
||||||
*wxImage*RGBValue*;
|
*wxImage*RGBValue*;
|
||||||
*wxImage*RotateHue*;
|
*wxImage*RotateHue*;
|
||||||
|
Reference in New Issue
Block a user