Автор Гілка: Шрифти (іксові, не freetype) та ion3  (Прочитано 1988 раз)

Михайло Даниленко

  • Гість
Ion3 на відміну від ion2 нормально сприймає кирилицю у заголовках вікон та меню, отож я перейшов на нього (поточна деб'янівська збірка ion3 сильно недороблена у порівнянні зі збіркою ion2, тому довелося добряче покопатися у конфігах).

У темі оформлення я попрописував шрифт '-misc-fixed-medium-r-*-*-13-*-*-*-*-60-iso10646-*'

Ось як він виглядає у xfontsel:

і у xterm -font ...:

Але ось як виглядає меню ion:


[isbear:~] uname -a
Linux lair 2.6.24-1-686 #1 SMP Sat Apr 19 00:37:55 UTC 2008 i686 GNU/Linux


[isbear:~] aptitude search fonts | /bin/grep '^i'
i A gsfonts                         - Fonts for the Ghostscript interpreter(s)  
i A gsfonts-x11                     - Make Ghostscript fonts available to X11  
i A toilet-fonts                    - collection of TOIlet fonts                
i A xfonts-75dpi                    - 75 dpi fonts for X                        
i A xfonts-75dpi-transcoded         - 75 dpi fonts for X (transcoded from ISO 10
i A xfonts-base                     - standard fonts for X                      
i   xfonts-cyrillic                 - Cyrillic fonts for X                      
i   xfonts-efont-unicode            - /efont/ Unicode fonts for X which cover va
i   xfonts-efont-unicode-ib         - /efont/ Unicode fonts for X (italic and bo
i A xfonts-encodings                - Encodings for X.Org fonts                
i A xfonts-utils                    - X Window System font utility programs    


Власне, я з шрифтами досі не стикався близько, тому не розумію, що, власне, відбувається...

P.S. Хоча завдяки проблемам із налаштуванням ion я за останні три дні багато чого дізнався цікавого у цій царині. Viva problems!
P.P.S. З релігійних міркувань ion не використовує згладжування й не користується freetype1/2.

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #1 : 2008-05-09 17:47:18 »
Тьфу, версію ядра навів (хоча воно тут ні до чого - думав там є щось про реліз деб'яна), а це забув:
[isbear:~] cat /etc/debian_version
lenny/sid
[isbear:~] Xorg -version

This is a pre-release version of the X server from The X.Org Foundation.
It is not supported in any way.
Bugs may be filed in the bugzilla at http://bugs.freedesktop.org/.
Select the "xorg" product for bugs you find in this release.
Before reporting bugs in pre-release versions please check the
latest version in the X.Org Foundation git repository.
See http://wiki.x.org/wiki/GitPage for git access instructions.

X.Org X Server 1.4.0.90
Release Date: 5 September 2007
X Protocol Version 11, Revision 0
Build Operating System: Linux Debian (xorg-server 2:1.4.1~git20080131-4)
Current Operating System: Linux lair 2.6.24-1-686 #1 SMP Sat Apr 19 00:37:55 UTC 2008 i686
Build Date: 29 April 2008  08:24:00PM
 
        Before reporting problems, check http://wiki.x.org
        to make sure that you have the latest version.
Module Loader present

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #2 : 2008-05-09 17:58:26 »
Угу, fontconfig він теж не використовує з релігійних причин, але xfontsel теж їх не використовує...

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #3 : 2008-07-15 03:50:54 »
Так, вдалося репродукувати проблему:


(зідрано із basicwin (десь знайшов в неті), додано роботу через fontset)
#include <stdio.h>
#include <locale.h>
#include <stdio.h>
#include <stdlib.h>

#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/Xos.h>

int main ( int argc, char **argv )
{
        int screen;
        Display *display;
        Window win;
        GC gc;
        XEvent report;
        XFontSet fs;
        XSizeHints size_hints;
        unsigned int width, height, display_width, display_height;
        int x = 0, y = 0;
        unsigned int border_width = 4;
        char *display_name = NULL;
        char *fontname = "-misc-fixed-medium-r-*-*-15-*-*-*-*-*-iso10646-1";
        char *string1  = "Hello! Я віконце, а ти хто? イースビル?";
        char **missing;
        int missingnum;
        char *def_str = "-";
        unsigned long valuemask = 0;
        XGCValues values;



        if ( ! setlocale ( LC_ALL, "uk_UA.UTF-8" ) ) {
                fprintf ( stderr, "Setlocale failed\n" );
        }

        if ( XSupportsLocale () != True ) {
                fprintf ( stderr, "Locale is not supported\n" );
        }

        if ( ! XSetLocaleModifiers ( "" ) ) {
                fprintf ( stderr, "Set Modifiers failed" );
        }

        if ( ( display = XOpenDisplay ( display_name ) ) == NULL ) {
                fprintf ( stderr, "X Open Display Failed (%s)\n", XDisplayName ( display_name ) );
                exit ( -1 );
        }

        screen         = DefaultScreen ( display );
        display_width  = DisplayWidth  ( display, screen );
        display_height = DisplayHeight ( display, screen );
        width          = display_width  / 3;
        height         = display_height / 4;

        win = XCreateSimpleWindow ( display, RootWindow ( display, screen ), x, y, width, height, border_width,
                                    BlackPixel ( display, screen ), WhitePixel ( display, screen ) );
        size_hints.flags      = PPosition | PSize | PMinSize;
        size_hints.x          = x;
        size_hints.y          = y;
        size_hints.width      = width;
        size_hints.height     = height;
        size_hints.min_width  = 350;
        size_hints.min_height = 250;

        XSetStandardProperties ( display, win, "Test", NULL, (Pixmap) NULL, argv, argc, &size_hints );
        XSelectInput           ( display, win, ExposureMask | KeyPressMask | ButtonPressMask | StructureNotifyMask );
        fs = XCreateFontSet    ( display, fontname, &missing, &missingnum, &def_str );
        if ( ! fs ) {
                fprintf ( stderr, "Create Font Set failed\n" );
                exit ( 1 );
        } else if ( missingnum ) {
                char **a = missing;
                fprintf ( stderr, "Missing Font Set strings:\n" );
                while ( missingnum-- ) {
                        fprintf ( stderr, "'%s'\n", *a++ );
                }
                XFreeStringList ( missing );
        }
        gc = XCreateGC ( display, win, valuemask, &values );
        XSetForeground ( display, gc, BlackPixel ( display, screen ) );
        XMapWindow     ( display, win );

        while ( 1 ) {
                XNextEvent ( display, &report );
                switch ( report.type ) {
                case Expose:
                        while ( XCheckTypedEvent ( display, Expose, &report ) );
                        XmbDrawString ( display, win, fs, gc, 100, 20, string1, strlen(string1) );
                        break;

                case ConfigureNotify:
                        width  = report.xconfigure.width;
                        height = report.xconfigure.height;
                        break;

                case ButtonPress:
                case KeyPress:
                        XFreeFontSet  ( display, fs );
                        XFreeGC       ( display, gc );
                        XCloseDisplay ( display );
                        exit ( 1 );
                        break;

                default:
                        break;
                }
        }
}

Іще одне питання - є у мене конвертований із консольного фонт у форматі bdf. (параметр ENCODING виставлено у юнікодівський номер символа у десятковій формі, назви символів взято із Adobe Glyph List For New Fonts).
Xterm та xfontsel його сприймають нормально.
Через неюнікодівські функції ця програма теж нормально виводила англійську частину тексту.
А через юнікодівські - все, що мені вдалося від неї добитися - це українська літера "і", одна на весь рядок.
Що не так із шрифтом? Чи що не так із програмою?

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #4 : 2008-07-15 08:43:17 »
О, знайшов. Треба через XDrawString16 робити. Тільки рядок доведеться конвертувати у юнікод. Залишилося іон пропатчити.
P.S. До біса ж там цих функцій друку... а різниця яка - незрозуміло.

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #5 : 2008-07-15 12:42:33 »
Є. Тільки іще з mod_query розібратися треба буде - неправильно довжину рахує.

Михайло Даниленко

  • Гість
Re: Шрифти (іксові, не freetype) та ion3
« Відповідей #6 : 2008-07-15 13:27:32 »
Є. То було typo.