Author Topic: [64k/Linux] – Gestion des fonts  (Read 3790 times)

0 Members and 1 Guest are viewing this topic.

Offline phaazon

[64k/Linux] – Gestion des fonts
« on: 23 April 2013 à 15:53:47 »
Salut à tous,

Je suis en train d’écrire les dernières lignes qui devront – god je l’espère ! – me permettre de release ma première 64k à l’Outline, dans un peu plus de deux semaines.

Je suis en train de m’attaquer aux fonts, et je dois avouer que je suis un peu dans les choux. Il y a apparemment plusieurs façon de faire (Xlib, SDL_ttf – pas adapté du tout à la 64k je présume, etc.). Je pense m’atteler à une technique que l’on m’a conseillé sur IRC : les bitmaps.

J’ai bien saisi l’idée : on fait passer le font que l’on veut dans un tool qui extrait une bitmap, lequel doit-être converti en un header C/C++. Le hic c’est que je ne connais aucun outil permettant de faire ça… Je pourrais développer le mien, mais s’il en existe déjà un, je suis preneur :D

Comment gérez-vous les fonts pour les 64k linux vous ?

Merci d’avance.

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : [64k/Linux] – Gestion des fonts
« Reply #1 on: 23 April 2013 à 16:50:31 »
Moi à ta place je ferais du vectoriel : tu fais le design de ta fonte dans un outil genre blender, tu exportes ça avec un script python, ce qui te permet d'appliquer toutes les techniques "compression-friendly", comme la quantization des coordonnées sur 8 bits, le fait de stocker que des deltas, les coordonnées X toutes ensembles, puis les coordonnées Y, puis les coordonnées Z... du coup ça prend rien comme taille, tu n'es pas lié à l'utilisation d'une lib externe, c'est portable, tu augmentes les facteurs de compressabilité... Et tu as des vrais fontes en 3D que tu peux convertir en mesh si tu as le code pour extruder des surfaces ;)
Certes c'est un petit peu plus de boulot, mais c'est ce que je ferai sans hésiter.

Offline phaazon

Re : [64k/Linux] – Gestion des fonts
« Reply #2 on: 23 April 2013 à 18:39:22 »
L’idée est intéressante oui, mais je n’ai plus le temps. Là j’ai fait un truc cet après midi. Je parcours un bitmap sous gimp, et je compresse ça sur genre 5 octets. Pour une 64k ça devrait faire l’affaire (surtout que je suis large). Après la 64k j’écrirai un soft qui fait ça à ma place

Offline Hellflip

  • Base
    • View Profile
  • Ancienneté: 1990
  • Groupe: X-men
  • Rôle: Coder
  • Ville: Ile de France Paris
Re : [64k/Linux] – Gestion des fonts
« Reply #3 on: 23 April 2013 à 20:10:38 »
Avec une font bitmap dans ton exe, tu va exploser la taille de ton exe à mon avis, a moins d'avoir des fonts 8x8 et de les zoomer, ca donnerai un effet oldschool d'un autre côté.

Check le framework 64k de IQ/RGBA
http://www.iquilezles.org/www/material/framework64k/framework64k.htm .
La routine est dans src\sys\_linux\msys_fontOS.cpp : ca utilise les fonts XWindows, c'est 50 lignes de code


Offline phaazon

Re : [64k/Linux] – Gestion des fonts
« Reply #4 on: 23 April 2013 à 21:04:47 »
Merci Hellflip !

Pour l’instant j’ai des fonts 8x6, je cherche en effet à avoir un effet oldschool (vite fait, en fait :D). En gros, chaque lettre est donc codée sur 8*6 bits, soit 48 bits, ce qui fait 6 octets. Sachant que je n’utiliserai pas toutes les lettres de l’alphabet et juste quelques chiffres et un caractère spécial, je tombe à disons 20 caractères différents, donc 120 octets. Ce n’est pas tant que ça pour une 64k, surtout qu’il me reste BEAUCOUP de place :D

Je vais aller lire ton lien, merci !

Offline maracuja

  • Base
    • View Profile
Re : [64k/Linux] – Gestion des fonts
« Reply #5 on: 23 April 2013 à 21:11:55 »
Si je puis me permettre si tu utilises les fontes systèmes, fait gaffe au workaround suivant :
Si tu ne fixes pas bien tes fontes avec createfonta ou createfontw avec un windows configuré pour avoir des fontes sur 120dpi au lieu de 70dpi comme la majeur partie des systèmes tu vas avoir un rendu chelou. Une solution c’est de définir ta fontes avec une valeur negative, ex si tu veux une fontes de 9pt alors tu devras utiliser -9 et ensuite, tu dois envoyer le message WM_SETFONT avec le handle retourné de createfont(a/w) sur ta dialogbox ou window.
« Last Edit: 23 April 2013 à 21:14:06 by maracuja »

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : [64k/Linux] – Gestion des fonts
« Reply #6 on: 23 April 2013 à 21:14:07 »
@maracuja : c'est pour du linusque :P

Offline maracuja

  • Base
    • View Profile
Re : [64k/Linux] – Gestion des fonts
« Reply #7 on: 23 April 2013 à 21:14:33 »
oups, honte à moi. :p

Offline flure

  • Base
    • Pouet.net
    • View Profile
  • Ancienneté: 1998
  • Groupe: PoPsY TeAm
  • Rôle: Codeur Linux
  • Ville: Lyon
Re : [64k/Linux] – Gestion des fonts
« Reply #8 on: 23 April 2013 à 21:17:40 »
Et n'oublie pas de te flageller avec des orties sur la place publique, nu, avec pour seul vêtement une pancarte invitant la populace à te jeter des pierres :D

Offline maracuja

  • Base
    • View Profile
Re : [64k/Linux] – Gestion des fonts
« Reply #9 on: 23 April 2013 à 21:19:45 »
Haha, ils vont tous devenir aveugles en me voyant avec mon corps d’athlète. :D
« Last Edit: 23 April 2013 à 21:23:11 by maracuja »

Offline phaazon

Re : [64k/Linux] – Gestion des fonts
« Reply #10 on: 23 April 2013 à 22:04:34 »
Bon je pense faire comme Hellflip me l’a dit, j’avais lu ça entre midi et deux, mais ça ne me disait rien parce que je ne maîtrise pas les fonts qui sont sur la machine de compo. Il y a un « standard » des fonts dispo sous linux ?

yrizoud

  • Guest
Re : [64k/Linux] – Gestion des fonts
« Reply #11 on: 25 April 2013 à 15:56:14 »
Je m'excuse par avance si c'est évident, mais une vieille astuce pour inclure des bitmap (monochromes) de largeur 8bit, 16bit etc. dans un programme C, c'est d'utiliser des macros du style de celles-ci:
http://embeddedgurus.com/barr-code/2009/09/binary-literals-in-c/
Après dans son source on saisit les tableaux de constantes :
static byte letter_a[5] = {
B8(00100000),
B8(01010000),
B8(10001000),
B8(11111000),
B8(10001000)}; // caractere A en 5x5, occupe 5 octets

La c'est un "A". Quand il n'y a que 26+10 caractères pas trop gros on peut les taper à la main, au-dela il vaut mieux écrire un outil qui lit une image et écrit le source C.

Offline phaazon

Re : [64k/Linux] – Gestion des fonts
« Reply #12 on: 04 May 2013 à 17:13:56 »
Je vais faire ça je pense, ça ne rendra peut-être pas aussi bien que ce que je voulais mais au moins j’aurais un truc. Là je commence un peu à paniquer parce que je n’ai toujours pas de gestion des fonts, j’ai essayé la solution d’Hellflip mais le framework de Paradise est un peu louche, il y a des fuites de mémoires et compagnie, et son utilisation n’est pas intuitive.

Une idée de comment afficher du texte avec la Xlib ? J’ai surtout des problèmes avec la notion de GC (Graphic Context) et Window. Est-ce qu’il faut un GC et une Window pour chaque « zone de texte » ? Bref, je me lance dans le truc à la main parce que je panique :D

Offline maracuja

  • Base
    • View Profile
Re : [64k/Linux] – Gestion des fonts
« Reply #13 on: 04 May 2013 à 22:13:15 »
Ne panique pas ! surtout pas ! :) Allez j’ai confiance en toi ! :)

Offline phaazon

Re : [64k/Linux] – Gestion des fonts
« Reply #14 on: 05 May 2013 à 14:58:36 »
Ouais laissez tomber Xlib, je suis parti sur mes bitmaps là, j’ai des matrices partout sur mon bureau :D

Merci maracuja  :)