Sign in to follow this  

[C] - Unicode in GTK.

This topic is 3729 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

In Visual C 2005 EE, To Compiler: /Od /I "C:\GTK\include\atk-1.0" /I "C:\GTK\include\pango-1.0" /I "C:\GTK\lib\glib-2.0\include" /I "C:\GTK\include\glib-2.0" /I "C:\GTK\include\cairo" /I "C:\GTK\include\gtk-2.0" /I "C:\GTK\lib\gtk-2.0\include" /I "C:\GTK\include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_UNICODE" /D "UNICODE" /Gm /EHsc /RTC1 /MDd /Fo"Debug\\" /Fd"Debug\vc80.pdb" /W3 /nologo /c /Wp64 /ZI /TC /errorReport:prompt To Linker: /OUT:"C:\Pete's\Projects\Ryerson\COE518\testgtk\Debug\testgtk.exe" /INCREMENTAL /NOLOGO /LIBPATH:"C:\GTK\lib" /MANIFEST /MANIFESTFILE:"Debug\testgtk.exe.intermediate.manifest" /DEBUG /PDB:"c:\pete's\projects\ryerson\coe518\testgtk\debug\testgtk.pdb" /SUBSYSTEM:CONSOLE /MACHINE:X86 /ERRORREPORT:PROMPT glib-2.0.lib gobject-2.0.lib gthread-2.0.lib gdk-win32-2.0.lib gdk_pixbuf-2.0.lib gtk-win32-2.0.lib atk-1.0.lib pango-1.0.lib kernel32.lib Source Code:
#include <gtk/gtk.h>

/*
 * Terminate the main loop.
 */
static void on_destroy (GtkWidget * widget, gpointer data)
{
    gtk_main_quit ();
}

int main (int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *label;

    gtk_init (&argc, &argv);

    /* create the main, top level, window */
    window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

    /* give the window a 20px wide border */
    gtk_container_set_border_width (GTK_CONTAINER (window), 20);

    /* give it the title */
	gtk_window_set_title (GTK_WINDOW (window), "GTK Title");

    /* open it a bit wider so that both the label and title show up */
    gtk_window_set_default_size (GTK_WINDOW (window), 200, 50);


    /* Connect the destroy event of the window with our on_destroy function
     * When the window is about to be destroyed we get a notificaiton and
     * stop the main GTK loop
     */
    g_signal_connect (G_OBJECT (window), "destroy",
                      G_CALLBACK (on_destroy), NULL);

    /* Create the "Hello, World" label  */
    label = gtk_label_new ((const gchar *)L"\u7279");

    /* and insert it into the main window  */
    gtk_container_add (GTK_CONTAINER (window), label);

    /* make sure that everything, window and label, are visible */
    gtk_widget_show_all (window);

    /* start the main loop */
    gtk_main ();

    return 0;
}

Output: (should render a label with a CJK glyph in the middle, but instead it renders a "yr" string) An image of the window. Notes: pango.alises is found in "etc/pango" from where the DLLs required for GTK are being called (in this case, it's in "debug/" of the project folder. pango.alises contains "mingliu", a font that can render these CJK glyphs. I've tried multibyte encoding, and every iteration of using it and L"..." "..." along with breaking \uXXYY into \xXX\xYY.

Share this post


Link to post
Share on other sites
GTK+ uses UTF-8 for Unicode, while L"..." string literals are wide strings -- usually UTF-16-encoded Unicode on MSVC.

Either use simple "ýáí"-style string literals in your source and fiddle with your compiler flags and source file encoding so that it works right, or just save the strings in an external file and control the encoding yourself.

Share this post


Link to post
Share on other sites

This topic is 3729 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this