use the encoding of the font which is used to draw the text when convering it to UTF-8 in wxGTK_CONV; the old wxGTK_CONV renamed to wxGTK_CONV_SYS (uses system encoding) and used in the contexts where no font is available
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@38661 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -163,6 +163,7 @@ wxMSW:
|
|||||||
|
|
||||||
wxGTK:
|
wxGTK:
|
||||||
|
|
||||||
|
- Fixed handling of font encoding in non-Unicode build
|
||||||
- wxEVT_MENU_CLOSE and wxEVT_MENU_OPENED for popup menus are now generated.
|
- wxEVT_MENU_CLOSE and wxEVT_MENU_OPENED for popup menus are now generated.
|
||||||
- Implemented wxCURSOR_BLANK support.
|
- Implemented wxCURSOR_BLANK support.
|
||||||
- wxSlider generates all scroll events now and not only wxEVT_SCROLL_THUMBTRACK.
|
- wxSlider generates all scroll events now and not only wxEVT_SCROLL_THUMBTRACK.
|
||||||
|
@@ -24,10 +24,24 @@
|
|||||||
|
|
||||||
#if wxUSE_UNICODE
|
#if wxUSE_UNICODE
|
||||||
#define wxGTK_CONV(s) wxConvUTF8.cWX2MB(s)
|
#define wxGTK_CONV(s) wxConvUTF8.cWX2MB(s)
|
||||||
|
#define wxGTK_CONV_SYS(s, enc) wxGTK_CONV(s)
|
||||||
#define wxGTK_CONV_BACK(s) wxConvUTF8.cMB2WX(s)
|
#define wxGTK_CONV_BACK(s) wxConvUTF8.cMB2WX(s)
|
||||||
#else
|
#else
|
||||||
#define wxGTK_CONV(s) wxConvUTF8.cWC2MB( wxConvLocal.cWX2WC(s) )
|
// convert the text in given encoding to UTF-8 used by wxGTK
|
||||||
#define wxGTK_CONV_BACK(s) wxConvLocal.cWC2WX( (wxConvUTF8.cMB2WC( s ) ) )
|
extern wxCharBuffer
|
||||||
|
wxConvertToGTK(const wxString& s,
|
||||||
|
wxFontEncoding enc = wxFONTENCODING_SYSTEM);
|
||||||
|
|
||||||
|
// helper: use the encoding of the given font if it's valid
|
||||||
|
inline wxCharBuffer wxConvertToGTK(const wxString& s, const wxFont& font)
|
||||||
|
{
|
||||||
|
return wxConvertToGTK(s, font.Ok() ? font.GetEncoding()
|
||||||
|
: wxFONTENCODING_SYSTEM);
|
||||||
|
}
|
||||||
|
|
||||||
|
#define wxGTK_CONV(s) wxConvertToGTK((s), m_font)
|
||||||
|
#define wxGTK_CONV_SYS(s) wxConvertToGTK(s)
|
||||||
|
#define wxGTK_CONV_BACK(s) wxConvLocal.cWC2WX( wxConvUTF8.cMB2WC((s)) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Some deprecated GTK+ prototypes we still use often
|
// Some deprecated GTK+ prototypes we still use often
|
||||||
|
@@ -96,7 +96,7 @@ wxColour wxColour::CreateByName(const wxString& name)
|
|||||||
wxColour col;
|
wxColour col;
|
||||||
|
|
||||||
GdkColor colGDK;
|
GdkColor colGDK;
|
||||||
if ( gdk_color_parse( wxGTK_CONV( name ), &colGDK ) )
|
if ( gdk_color_parse( wxGTK_CONV_SYS( name ), &colGDK ) )
|
||||||
{
|
{
|
||||||
wxColourRefData *refData = new wxColourRefData;
|
wxColourRefData *refData = new wxColourRefData;
|
||||||
refData->m_color = colGDK;
|
refData->m_color = colGDK;
|
||||||
|
@@ -116,7 +116,7 @@ private:
|
|||||||
m_weight;
|
m_weight;
|
||||||
bool m_underlined;
|
bool m_underlined;
|
||||||
wxString m_faceName;
|
wxString m_faceName;
|
||||||
wxFontEncoding m_encoding; // Unused under GTK 2.0
|
wxFontEncoding m_encoding;
|
||||||
bool m_noAA; // No anti-aliasing
|
bool m_noAA; // No anti-aliasing
|
||||||
|
|
||||||
// The native font info, basicly an XFLD under GTK 1.2 and
|
// The native font info, basicly an XFLD under GTK 1.2 and
|
||||||
@@ -163,7 +163,8 @@ void wxFontRefData::Init(int pointSize,
|
|||||||
// And set its values
|
// And set its values
|
||||||
if (!m_faceName.empty())
|
if (!m_faceName.empty())
|
||||||
{
|
{
|
||||||
pango_font_description_set_family( m_nativeFontInfo.description, wxGTK_CONV(m_faceName) );
|
pango_font_description_set_family( m_nativeFontInfo.description,
|
||||||
|
wxGTK_CONV_SYS(m_faceName) );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -228,8 +229,8 @@ void wxFontRefData::InitFromNative()
|
|||||||
// Pango description are never underlined (?)
|
// Pango description are never underlined (?)
|
||||||
m_underlined = FALSE;
|
m_underlined = FALSE;
|
||||||
|
|
||||||
// Cannot we choose that
|
// always with GTK+ 2
|
||||||
m_encoding = wxFONTENCODING_SYSTEM;
|
m_encoding = wxFONTENCODING_UTF8;
|
||||||
}
|
}
|
||||||
|
|
||||||
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
wxFontRefData::wxFontRefData( const wxFontRefData& data )
|
||||||
@@ -485,15 +486,14 @@ bool wxFont::GetUnderlined() const
|
|||||||
|
|
||||||
wxFontEncoding wxFont::GetEncoding() const
|
wxFontEncoding wxFont::GetEncoding() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( Ok(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
|
wxCHECK_MSG( Ok(), wxFONTENCODING_SYSTEM, wxT("invalid font") );
|
||||||
|
|
||||||
// m_encoding is unused in wxGTK2, return encoding that the user set.
|
|
||||||
return M_FONTDATA->m_encoding;
|
return M_FONTDATA->m_encoding;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool wxFont::GetNoAntiAliasing() const
|
bool wxFont::GetNoAntiAliasing() const
|
||||||
{
|
{
|
||||||
wxCHECK_MSG( Ok(), wxFONTENCODING_DEFAULT, wxT("invalid font") );
|
wxCHECK_MSG( Ok(), false, wxT("invalid font") );
|
||||||
|
|
||||||
return M_FONTDATA->m_noAA;
|
return M_FONTDATA->m_noAA;
|
||||||
}
|
}
|
||||||
|
@@ -747,7 +747,7 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
oldLabel.Replace(wxT("_"), wxT(""));
|
oldLabel.Replace(wxT("_"), wxT(""));
|
||||||
wxString label1 = wxStripMenuCodes(str);
|
wxString label1 = wxStripMenuCodes(str);
|
||||||
wxString oldhotkey = GetHotKey(); // Store the old hotkey in Ctrl-foo format
|
wxString oldhotkey = GetHotKey(); // Store the old hotkey in Ctrl-foo format
|
||||||
wxCharBuffer oldbuf = wxGTK_CONV( GetGtkHotKey(*this) ); // and as <control>foo
|
wxCharBuffer oldbuf = wxGTK_CONV_SYS( GetGtkHotKey(*this) ); // and as <control>foo
|
||||||
|
|
||||||
DoSetText(str);
|
DoSetText(str);
|
||||||
|
|
||||||
@@ -763,7 +763,7 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
else
|
else
|
||||||
label = GTK_LABEL( GTK_BIN(m_menuItem)->child );
|
label = GTK_LABEL( GTK_BIN(m_menuItem)->child );
|
||||||
|
|
||||||
gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV(m_text) );
|
gtk_label_set_text_with_mnemonic( GTK_LABEL(label), wxGTK_CONV_SYS(m_text) );
|
||||||
}
|
}
|
||||||
|
|
||||||
guint accel_key;
|
guint accel_key;
|
||||||
@@ -777,7 +777,7 @@ void wxMenuItem::SetText( const wxString& str )
|
|||||||
accel_mods );
|
accel_mods );
|
||||||
}
|
}
|
||||||
|
|
||||||
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*this) );
|
wxCharBuffer buf = wxGTK_CONV_SYS( GetGtkHotKey(*this) );
|
||||||
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
if (accel_key != 0)
|
if (accel_key != 0)
|
||||||
{
|
{
|
||||||
@@ -954,7 +954,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
text = mitem->GetText();
|
text = mitem->GetText();
|
||||||
const wxBitmap *bitmap = &mitem->GetBitmap();
|
const wxBitmap *bitmap = &mitem->GetBitmap();
|
||||||
|
|
||||||
menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
|
menuItem = gtk_image_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
|
||||||
|
|
||||||
GtkWidget *image;
|
GtkWidget *image;
|
||||||
if (bitmap->HasPixbuf())
|
if (bitmap->HasPixbuf())
|
||||||
@@ -985,7 +985,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
{
|
{
|
||||||
case wxITEM_CHECK:
|
case wxITEM_CHECK:
|
||||||
{
|
{
|
||||||
menuItem = gtk_check_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
|
menuItem = gtk_check_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
|
||||||
m_prevRadio = NULL;
|
m_prevRadio = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -996,12 +996,14 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
if ( m_prevRadio == NULL )
|
if ( m_prevRadio == NULL )
|
||||||
{
|
{
|
||||||
// start of a new radio group
|
// start of a new radio group
|
||||||
m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) );
|
m_prevRadio = menuItem =
|
||||||
|
gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV_SYS( text ) );
|
||||||
}
|
}
|
||||||
else // continue the radio group
|
else // continue the radio group
|
||||||
{
|
{
|
||||||
group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (m_prevRadio));
|
group = gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (m_prevRadio));
|
||||||
m_prevRadio = menuItem = gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV( text ) );
|
m_prevRadio = menuItem =
|
||||||
|
gtk_radio_menu_item_new_with_mnemonic( group, wxGTK_CONV_SYS( text ) );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1012,7 +1014,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
case wxITEM_NORMAL:
|
case wxITEM_NORMAL:
|
||||||
{
|
{
|
||||||
menuItem = gtk_menu_item_new_with_mnemonic( wxGTK_CONV( text ) );
|
menuItem = gtk_menu_item_new_with_mnemonic( wxGTK_CONV_SYS( text ) );
|
||||||
m_prevRadio = NULL;
|
m_prevRadio = NULL;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -1022,7 +1024,7 @@ bool wxMenu::GtkAppend(wxMenuItem *mitem, int pos)
|
|||||||
|
|
||||||
guint accel_key;
|
guint accel_key;
|
||||||
GdkModifierType accel_mods;
|
GdkModifierType accel_mods;
|
||||||
wxCharBuffer buf = wxGTK_CONV( GetGtkHotKey(*mitem) );
|
wxCharBuffer buf = wxGTK_CONV_SYS( GetGtkHotKey(*mitem) );
|
||||||
|
|
||||||
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetGtkHotKey(*mitem).c_str() );
|
// wxPrintf( wxT("item: %s hotkey %s\n"), mitem->GetText().c_str(), GetGtkHotKey(*mitem).c_str() );
|
||||||
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
gtk_accelerator_parse( (const char*) buf, &accel_key, &accel_mods);
|
||||||
|
@@ -180,6 +180,25 @@ wxWindow* wxFindWindowAtPoint(const wxPoint& pt)
|
|||||||
return wxGenericFindWindowAtPoint(pt);
|
return wxGenericFindWindowAtPoint(pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if !wxUSE_UNICODE
|
||||||
|
|
||||||
|
wxCharBuffer wxConvertToGTK(const wxString& s, wxFontEncoding enc)
|
||||||
|
{
|
||||||
|
if ( enc == wxFONTENCODING_UTF8 )
|
||||||
|
{
|
||||||
|
// no need for conversion at all
|
||||||
|
return wxCharBuffer(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
const wxWCharBuffer wbuf = wxCSConv(enc).cMB2WC(s);
|
||||||
|
wxCharBuffer buf;
|
||||||
|
if ( wbuf )
|
||||||
|
buf = wxConvUTF8.cWC2MB(wbuf);
|
||||||
|
|
||||||
|
return buf;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // !wxUSE_UNICODE
|
||||||
|
|
||||||
// ----------------------------------------------------------------------------
|
// ----------------------------------------------------------------------------
|
||||||
// subprocess routines
|
// subprocess routines
|
||||||
|
@@ -256,7 +256,7 @@ void wxNativeFontInfo::SetUnderlined(bool WXUNUSED(underlined))
|
|||||||
|
|
||||||
void wxNativeFontInfo::SetFaceName(const wxString& facename)
|
void wxNativeFontInfo::SetFaceName(const wxString& facename)
|
||||||
{
|
{
|
||||||
pango_font_description_set_family( description, wxGTK_CONV(facename) );
|
pango_font_description_set_family(description, wxGTK_CONV_SYS(facename));
|
||||||
}
|
}
|
||||||
|
|
||||||
void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))
|
void wxNativeFontInfo::SetFamily(wxFontFamily WXUNUSED(family))
|
||||||
@@ -276,7 +276,7 @@ bool wxNativeFontInfo::FromString(const wxString& s)
|
|||||||
if (description)
|
if (description)
|
||||||
pango_font_description_free( description );
|
pango_font_description_free( description );
|
||||||
|
|
||||||
description = pango_font_description_from_string( wxGTK_CONV( s ) );
|
description = pango_font_description_from_string( wxGTK_CONV_SYS( s ) );
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user