- ShowFullScreen() shows the window if it was still hidden (rpedroso)
- Implemented wxTopLevelWindow::RequestUserAttention() (Mart Raudsepp)
+- Base library is now binary compatible when built with wxGTK and wxMotif
wxOS2
- Window creation now honours wxVSCROLL.
- 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
-----
typedef void* WXFont;
typedef void* WXImage;
typedef void* WXFontList;
+typedef void* WXFontSet;
typedef void* WXRendition;
typedef void* WXRenderTable;
typedef void* WXFontType; /* either a XmFontList or XmRenderTable */
#pragma interface "font.h"
#endif
+#if __WXMOTIF20__ && !__WXLESSTIF__ && !defined(wxMOTIF_NEW_FONT_HANDLING)
+#define wxMOTIF_NEW_FONT_HANDLING 0 // safe default
+#endif
+
class wxXFont;
// Font
WXDisplay* display = NULL) const;
// These two are helper functions for convenient access of the above.
+#if !wxMOTIF_NEW_FONT_HANDLING
WXFontStructPtr GetFontStruct(double scale = 1.0,
WXDisplay* display = NULL) const;
WXFontList GetFontList(double scale = 1.0,
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;
#endif
- // returns either a XmFontList or XmRendition, depending
+ // returns either a XmFontList or XmRenderTable, depending
// on Motif version
WXFontType GetFontType(WXDisplay* display) const;
// like the function above but does a copy for XmFontList
#define wxCHECK_LESSTIF_VERSION( major, minor ) \
( LesstifVersion >= (major) * 1000 + (minor) )
-#define wxCHECK_LESSTIF() ( defined(LesstifVersion) && LesstifVersion > 0 )
+#define wxCHECK_LESSTIF() ( __WXLESSTIF__ )
// ----------------------------------------------------------------------------
// Miscellaneous functions
wxColour& backgroundColour,
bool changeArmColour = false);
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 wxBACK_COLORS 0x01
wxLANGUAGE_CZECH,
wxLANGUAGE_POLISH,
wxLANGUAGE_SWEDISH,
-#if wxUSE_UNICODE
+#if wxUSE_UNICODE || defined(__WXMOTIF__)
wxLANGUAGE_JAPANESE,
+#endif
+#if wxUSE_UNICODE
wxLANGUAGE_GEORGIAN,
#endif
wxLANGUAGE_ENGLISH,
_T("Czech"),
_T("Polish"),
_T("Swedish"),
-#if wxUSE_UNICODE
+#if wxUSE_UNICODE || defined(__WXMOTIF__)
_T("Japanese"),
+#endif
+#if wxUSE_UNICODE
_T("Georgian"),
#endif
_T("English"),
int cx = 0;
int cy = 0;
int ascent = 0;
- int slen;
+ int slen = text.length();
// Set FillStyle, otherwise X will use current stipple!
XGCValues gcV, gcBackingV;
XSetFillStyle ((Display*) m_display, (GC) m_gcBacking, FillSolid);
}
- slen = strlen(text);
-
if (m_font.Ok())
- {
- 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;
- }
+ wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
+ text, &cx, &cy, &ascent, NULL);
// First draw a rectangle representing the text background, if a text
// background is specified
(XChar2b *)(char*) (const char*) text, slen);
else
#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);
+#endif
if (m_window && m_window->GetBackingPixmap()) {
#if 0
(XChar2b *)(char*) (const char*) text, slen);
else
#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,
XLOG2DEV_2 (x), YLOG2DEV_2 (y) + ascent,
wxConstCast(text.c_str(), char), slen);
+#endif
}
// restore fill style
int cx = 0;
int cy = 0;
int ascent = 0;
- int slen = text.length();
if (m_font.Ok())
- {
- // Calculate text extent.
- 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;
- }
+ wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
+ text, &cx, &cy, &ascent, NULL);
wxBitmap src(cx, cy);
wxMemoryDC dc;
{
wxCHECK_RET( Ok(), "invalid dc" );
- wxFont* theFont = font;
- if (!theFont)
- theFont = (wxFont *)&m_font; // const_cast
+ const wxFont* theFont = font ? font : &m_font;
if (!theFont->Ok())
{
return;
}
- WXFontStructPtr pFontStruct = theFont->GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
-
- int direction, ascent, descent2;
- XCharStruct overall;
- int slen;
+ wxGetTextExtent(m_display, *theFont, m_userScaleY * m_logicalScaleY,
+ string, width, height, NULL, descent);
-#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 (width) *width = XDEV2LOGREL (*width);
+ if (height) *height = YDEV2LOGREL (*height);
if (externalLeading)
*externalLeading = 0;
}
{
wxCHECK_MSG( Ok(), 0, "invalid dc" );
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;
- XCharStruct overall;
- XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
- &descent, &overall);
- return XDEV2LOGREL(overall.width);
+ return XDEV2LOGREL(width);
}
wxCoord wxWindowDC::GetCharHeight() const
wxCHECK_MSG( Ok(), 0, "invalid dc" );
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;
- XCharStruct overall;
- XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
- &descent, &overall);
- // return XDEV2LOGREL(overall.ascent + overall.descent);
- return XDEV2LOGREL(ascent + descent);
+ wxGetTextExtent (m_display, m_font, m_userScaleY * m_logicalScaleY,
+ "x", NULL, &height, NULL, NULL);
+
+ return XDEV2LOGREL(height);
}
void wxWindowDC::DoGetSize( int *width, int *height ) const
return;
}
+#if !wxMOTIF_NEW_FONT_HANDLING
WXFontStructPtr pFontStruct = m_font.GetFontStruct(m_userScaleY*m_logicalScaleY, m_display);
Font fontId = ((XFontStruct*)pFontStruct)->fid;
if (m_window && m_window->GetBackingPixmap())
XSetFont ((Display*) m_display,(GC) m_gcBacking, fontId);
+#endif
}
void wxWindowDC::SetForegroundPixelWithLogicalFunction(int pixel)
wxXFont();
~wxXFont();
+#if !wxMOTIF_NEW_FONT_HANDLING
WXFontStructPtr m_fontStruct; // XFontStruct
-#if !wxUSE_RENDER_TABLE
+#endif
+#if !wxUSE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
WXFontList m_fontList; // Motif XmFontList
#else // if wxUSE_RENDER_TABLE
WXRenderTable m_renderTable; // Motif XmRenderTable
+ WXRendition m_rendition; // Motif XmRendition
#endif
WXDisplay* m_display; // XDisplay
int m_scale; // Scale * 100
wxXFont::wxXFont()
{
+#if !wxMOTIF_NEW_FONT_HANDLING
m_fontStruct = (WXFontStructPtr) 0;
-#if !wxUSE_RENDER_TABLE
+#endif
+#if !wxUSE_RENDER_TABLE && !wxMOTIF_NEW_FONT_HANDLING
m_fontList = (WXFontList) 0;
#else // if wxUSE_RENDER_TABLE
m_renderTable = (WXRenderTable) 0;
+ m_rendition = (WXRendition) 0;
#endif
m_display = (WXDisplay*) 0;
m_scale = 100;
}
// not found, create a new one
+ wxString xFontSpec;
XFontStruct *font = (XFontStruct *)
wxLoadQueryNearestFont(pointSize,
M_FONTDATA->m_family,
M_FONTDATA->m_weight,
M_FONTDATA->m_underlined,
wxT(""),
- M_FONTDATA->m_encoding);
+ M_FONTDATA->m_encoding,
+ &xFontSpec);
if ( !font )
{
}
wxXFont* f = new wxXFont;
+#if wxMOTIF_NEW_FONT_HANDLING
+ XFreeFont( (Display*) display, font );
+#else
f->m_fontStruct = (WXFontStructPtr)font;
+#endif
f->m_display = ( display ? display : wxGetDisplay() );
f->m_scale = intScale;
- M_FONTDATA->m_fonts.Append(f);
-
-#if !wxUSE_RENDER_TABLE
- f->m_fontList = XmFontListCreate ((XFontStruct*) font, XmSTRING_DEFAULT_CHARSET);
-#else // if wxUSE_RENDER_TABLE
+#if wxUSE_RENDER_TABLE
XmRendition rendition;
XmRenderTable renderTable;
Arg args[5];
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;
+#endif
XtSetArg( args[count], XmNunderlineType,
GetUnderlined() ? XmSINGLE_LINE : XmNO_LINE ); ++count;
rendition = XmRenditionCreate( XmGetXmDisplay( (Display*)f->m_display ),
XmMERGE_REPLACE );
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
+ M_FONTDATA->m_fonts.Append(f);
+
return f;
}
+#if !wxMOTIF_NEW_FONT_HANDLING
+
WXFontStructPtr wxFont::GetFontStruct(double scale, WXDisplay* display) const
{
wxXFont* f = GetInternalFont(scale, display);
#endif
}
+#endif // !wxMOTIF_NEW_FONT_HANDLING
+
// declared in the header, can't use wxUSE_RENDER_TABLE
#if wxCHECK_MOTIF_VERSION( 2, 0 )
#endif
}
-#endif
+#endif // wxCHECK_MOTIF_VERSION( 2, 0 )
WXFontType wxFont::GetFontType(WXDisplay* display) const
{
return (WXString)XmNfontList;
#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
wxFont wxSystemSettingsNative::GetFont(wxSystemFont index)
{
+ int pointSize = 12;
+
+ if ( wxFont::GetDefaultEncoding() == wxFONTENCODING_SHIFT_JIS
+ || wxFont::GetDefaultEncoding() == wxFONTENCODING_EUC_JP)
+ pointSize = 15;
+
switch (index)
{
case wxSYS_SYSTEM_FIXED_FONT:
{
- return wxFont(12, wxMODERN, wxNORMAL, wxNORMAL, false);
+ return wxFont(pointSize, wxMODERN, wxNORMAL, wxNORMAL, false);
break;
}
case wxSYS_DEVICE_DEFAULT_FONT:
case wxSYS_DEFAULT_GUI_FONT:
default:
{
- return wxFont(12, wxSWISS, wxNORMAL, wxNORMAL, false);
+ return wxFont(pointSize, wxSWISS, wxNORMAL, wxNORMAL, false);
break;
}
}
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.
- 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)
{
- Arg args[2];
- XtSetArg (args[0], XmNscrollHorizontal, wantHorizScrolling ? True : False);
- XtSetArg (args[1], XmNwordWrap, wantWordWrap ? True : False);
-
- m_mainWidget = (WXWidget) XmCreateScrolledText(parentWidget,
- wxConstCast(name.c_str(), char),
- args, 2);
-
- XtVaSetValues ((Widget) m_mainWidget,
- XmNeditable, ((style & wxTE_READONLY) ? False : True),
- XmNeditMode, XmMULTI_LINE_EDIT,
- NULL);
+ Arg args[8];
+ int count = 0;
+ 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,
+ wxConstCast(name.c_str(), char),
+ args, count);
+
XtManageChild ((Widget) m_mainWidget);
}
else
wxConstCast(name.c_str(), char),
xmTextWidgetClass,
parentWidget,
+ wxFont::GetFontTag(), m_font.GetFontType( XtDisplay(parentWidget) ),
+ XmNvalue, value.c_str(),
+ XmNeditable, (style & wxTE_READONLY) ?
+ False : True,
NULL
);
- XtVaSetValues ((Widget) m_mainWidget,
- XmNeditable, ((style & wxTE_READONLY) ? False : True),
- NULL);
-
+#if 0
// TODO: Is this relevant? What does it do?
int noCols = 2;
if (!value.IsNull() && (value.Length() > (unsigned int) noCols))
XtVaSetValues((Widget) m_mainWidget,
XmNcolumns, noCols,
NULL);
+#endif
}
// remove border if asked for
NULL);
}
- if ( !value.empty() )
- {
- // do this instead... MB
- //
- XtVaSetValues( (Widget) m_mainWidget,
- XmNvalue, wxConstCast(value.c_str(), char),
- NULL);
- }
-
// install callbacks
XtAddCallback((Widget) m_mainWidget, XmNvalueChangedCallback, (XtCallbackProc)wxTextWindowChangedProc, (XtPointer)this);
XtAddCallback((Widget) m_mainWidget, XmNlosingFocusCallback, (XtCallbackProc)wxTextWindowLoseFocusProc, (XtPointer)this);
- // font
- ChangeFont(false);
-
AttachWidget (parent, m_mainWidget, (WXWidget) NULL,
pos.x, pos.y, size.x, size.y);
return str;
}
-void wxTextCtrl::SetValue(const wxString& value)
+void wxTextCtrl::SetValue(const wxString& text)
{
m_inSetValue = true;
- // do this instead... MB
- //
- // with (at least) OpenMotif 2.1 this causes a lot of flicker
-#if 0
- XtVaSetValues( (Widget) m_mainWidget,
- XmNvalue, wxConstCast(value.c_str(), char),
+ XmTextSetString ((Widget) m_mainWidget, wxConstCast(text.c_str(), char));
+ XtVaSetValues ((Widget) m_mainWidget,
+ XmNcursorPosition, text.length(),
NULL);
-#endif
- Clear();
- AppendText( value );
+ SetInsertionPoint(text.length());
+ XmTextShowPosition ((Widget) m_mainWidget, text.length());
+ m_modified = TRUE;
m_inSetValue = false;
}
{
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
- WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
- int direction, ascent, descent;
- XCharStruct overall;
- XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
- &descent, &overall);
+ int height;
+
+ wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+ "x", NULL, &height, NULL, NULL);
- // return (overall.ascent + overall.descent);
- return (ascent + descent);
+ return height;
}
int wxWindow::GetCharWidth() const
{
wxCHECK_MSG( m_font.Ok(), 0, "valid window font needed" );
- WXFontStructPtr pFontStruct = m_font.GetFontStruct(1.0, GetXDisplay());
-
- int direction, ascent, descent;
- XCharStruct overall;
- XTextExtents ((XFontStruct*) pFontStruct, "x", 1, &direction, &ascent,
- &descent, &overall);
+ int width;
+
+ wxGetTextExtent (GetXDisplay(), m_font, 1.0,
+ "x", &width, NULL, NULL, NULL);
- return overall.width;
+ return width;
}
void wxWindow::GetTextExtent(const wxString& string,
int *descent, int *externalLeading,
const wxFont *theFont) const
{
- wxFont *fontToUse = (wxFont *)theFont;
- if (!fontToUse)
- fontToUse = (wxFont *) & m_font;
+ const wxFont *fontToUse = theFont ? theFont : &m_font;
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)
*externalLeading = 0;
-
+ wxGetTextExtent (GetXDisplay(), *fontToUse, 1.0,
+ string, x, y, NULL, descent);
}
// ----------------------------------------------------------------------------
*wxEVT_MEDIA_LOADED*;
*wxGenericListCtrl*SetItemFont*wxFont*;
*wxGenericListCtrl*GetItemFont*;
+ *wxGetTextExtent*wxFont*wxString*;
*wxImage*HSVValue*;
*wxImage*RGBValue*;
*wxImage*RotateHue*;