Home · Compatibility Lists · Support Forums · FAQ · News Archive · Articles · Submit News/Upcoming News
Linux Compatible
advertisement


Forum overview » Tips & Configuration Tweaks » How-To: Modifying UI font of gtk1 and gtk2 application (1/1)

Reply New Poll

How-To: Modifying UI font of gtk1 and gtk2 application
Author Message
zero0w
Member


Posts: 53
Joined: 2002-08-21
Member No.: 12518
Icon 2004-06-08 11:19:12

Note: This How-To is separated into several posts for clarity and easier reading.

Upgrading to Mandrake Linux 10, I have found that the UI (User interface) font of gtk1.x look rather ugly. Upon searching the web and a little experimenting by myself, I have discovered the trick to modify the UI font for gtk1 and gtk2 applications as well:

Here are my suggestions, as performed under Mandrake 10:

1) Install Microsoft web font thru corefonts package (Optional):
http://corefonts.sourceforge.net/

Mandrake Source RPM build:
http://ben.reser.org/corefonts/

Cabextract 1.0
http://www.kyz.uklinux.net/cabextract.php

2) You have to know what locale environment you are in:
To find out, in terminal you can enter:

$ locale

In English Unicode environment, it is likely en_US.UTF-8,
or in my case en_HK.UTF-8 (English for Hong Kong).

3) The trick to look up the UI font setting is in the directory /etc/gtk and /etc/gtk-2.0, for gtk1 and gtk2 applications respectively:

3.1) For gtk1 application
Eg: Mozilla X11, XMMS, Gimp-1.2.x

Now, the locale environment information you have found in step 2 became useful:

For example, if your locale is zh_TW.big5 (Taiwan Chinese, Big5 Encoding),
then you should look up the file /etc/gtk/gtkrc.zh_TW.big5

In the directory /etc/gtk

There's no such file as gtkrc.en_US.utf-8, so I would guess this means the locale setting will fall back to gtkrc.utf-8, and it does!

Examining /etc/gtk/gtkrc.utf-8 under Mandrake 10 shows this:

"style "gtk-default" {
fontset = "-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default""


The string -*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1 is the old style for X11 server to display font information, before XFT/fontconfig was born last year. Whereas [color=red],\[/color] is the separator for adding another font.

Hence, if you want to use another UI font in gtk1 apps, you have to look up the name of that font in the old X11 style, which is recorded in the font metafile such as fonts.alias, fonts.dir or fonts.scale. They should be placed in the same directory where the fonts reside, inside the following path:

/usr/X11R6/lib/X11/fonts/
/usr/share/fonts/
/usr/share/fonts/ttf

For example, if I want to use Microsoft Arial font as the UI font for gtk1 apps, with the corefont package (see step 1) installed in this path:

/usr/X11R6/lib/X11/fonts/msttcorefonts/

Then I can look up the old style X11 font information from:

/usr/X11R6/lib/X11/fonts/msttcorefonts/fonts.dir
/usr/X11R6/lib/X11/fonts/msttcorefonts/fonts.scale

Upon examining the file fonts.dir, I have located the font information for Microsoft Arial in X11 style as:

"arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1
arial.ttf -monotype-Arial-medium-r-normal--0-0-0-0-p-0-dosencoding-cp850
.
.
."


Where -is10646-1 and -dosencoding-cp850 are encoding schemes, the font name is basically the same.

Hence the font name for Microsoft Arial (with Unicode encoding) in old X11 style is as this:

-monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1

Hence you can modify the file /etc/gtk/gtkrc.utf-8 by adding this font name, followed by the separator ,\

"style "gtk-default" {
fontset = "-monotype-Arial-medium-r-normal--0-0-0-0-p-0-iso10646-1,\
-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default""


Save the file.
Finished!

Now launch a gtk1 application in en_US.UTF-8 locale and your UI font will look great again.

Post #139605
Edit Quote Print Solution Plonk Delete
zero0w
Member


Posts: 53
Joined: 2002-08-21
Member No.: 12518
Icon 2004-06-08 11:21:00

If you are still with me, here is more detail on UI font modification in gtk1 apps:

3.2) UI font setting in gtk1 apps - ignoring locale

But wait, you don't want to bother about your locale environment, just keep all the gtk1 apps look right no matter what locale (language, encoding) setting I am using!

Sure, you can do this, just make this as a per-user account setting by:

$ cp /etc/gtk/gtkrc.utf-8 ~/.gtkrc

Or you can choose to copy another file in /etc/gtk/ if you knew about your locale environment (such as gtkrc.zh_TW.utf8 which corresponds to the locale zh_TW.utf-8.)

Then modify the file ~/.gtkrc will achieve the same result.

Pay attention to the encoding scheme -iso10646-1, which is for Unicode (utf-8).

However, if you really don't want to bother, you can just put -*-* in place of -iso10461-1, which means use whatever encoding is available from that font. However, you may see square box or garbage in the UI if you use a wrong encoding; or the font does not contain glyphs/characters required in that language.

Of course you can set ~/.gtkrc to use several fonts in a particular locale language. As an example, in a Traditional Chinese environment, you can use Microsoft Arial for English letters and numbers, and then Taipei_Ming for Traditional Chinese, by using the separator ,\ to add more font as you wish.

3.3) Using Adobe Helvetica 12pt

If you don't have or don't want to use Microsoft font, then the Adobe bitmap font Helvetica 12pt (bitmap font has fixed size) is also a good replacement. On Mandrake 10, information on Helvetica 12pt can be retrieved from this file: /usr/X11R6/lib/X11/fonts/75dpi/fonts.dir

"helvR12-ISO8859-1.pcf.gz -adobe-helvetica-medium-r-normal--12-120-75-75-p-67-iso8859-1"


Hence the old style X11 font name string for Helvetica 12pt is:

-adobe-helvetica-medium-o-normal--12-120-75-75-p-67-iso8859-1

Or simplify it as

-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*
(which ignores encoding and all other information, only the font size -12- matters here)

Hence you can modify the file ~/.gtkrc as:

"style "gtk-default" {
fontset = "-adobe-helvetica-medium-r-normal--12-*-*-*-*-*-*-*,\
-*-Nimbus Sans L-medium-r-normal--14-*-*-*-p-*-iso10646-1,\
-*-clearlyu-medium-r-normal--17-*-*-*-p-*-iso10646-1,\
-*-r-*-iso10646-1,*"
}
class "GtkWidget" style "gtk-default""


Finish!
[Edited by zero0w on 2004-06-08 13:03:20]

Post #139606
Edit Quote Print Solution Plonk Delete
zero0w
Member


Posts: 53
Joined: 2002-08-21
Member No.: 12518
Icon 2004-06-08 11:22:09

Ok, so much time is wasted on changing UI font for gtk1 apps, now we are moving to gtk2 apps for good.

Example: Gimp 2.0, XSane, Azureus GTK-2+ client, and many more

Since GTK-2.x+ applications has switched to Fontconfig and Pango in processing font encoding and locale information, we no longer need to look up the old style X11 font name string, which probably caused brain damage to a lot of people trying to figure it out in the old days.

Changing UI font for GTK-2.x+ application is very easy, just create or modify this file in the home directory of your user account:

$ vi ~/.gtkrc-2.0

Then add this line:

"gtk-font-name="Sans 12""


where

Sans is the name of the font you want to use,
12 is the font size

For example, I have chosen Luxi Sans as my UI font for GTK2+XFT Firefox:

"gtk-font-name="LuxiSans 12""


Notice the space is omitted between "Luxi Sans", sometimes it is the case, sometimes it is not. Try to experiment and find out.

Ok, I think there's enough for now, any questions?

Post #139607
Edit Quote Print Solution Plonk Delete
zero0w
Member


Posts: 53
Joined: 2002-08-21
Member No.: 12518
Icon 2004-12-27 12:58:10

Bump.

Post #153190
Edit Quote Print Solution Plonk Delete

Reply New Poll

Forum overview » Tips & Configuration Tweaks » How-To: Modifying UI font of gtk1 and gtk2 application

Legend
View   View profile
Solved   Mark this post as solution (topic starter only)
Quote   Reply with quote to post
Edit   Edit post
Delete   Delete post (admin only)

Moderator: Open / Close / Bump / Delete / Move / Merge

All products mentioned are registered trademarks or trademarks of their respective owners.
© 2002-2009 Esselbach Internet Solutions - All Rights Reserved. Terms and privacy policy
Website powered by Esselbach Storyteller CMS System