Autore Topic: [c] Cairo o Freetype?  (Letto 6065 volte)

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
[c] Cairo o Freetype?
« il: 04 Ottobre 2011, 11:38:43 »
Sempre per il mio progettino di videoscrittura, partito con sdl_ttf, devo prendere una decisione: cairo o freetype?
Cairo ha il grande vantaggio di essere portabile, esiste su aros e morphos e ha anche funzioni di disegno incorporate per i font.
Freetype è sicuramente più veloce ma dovrei poi implementare funzioni di disegno diverse per sistemi diversi. Io programmo sotto windows e poi compilo sotto aros (laddove necessario).
Con sdl il grande vantaggio era che quel che funzionava sotto windows funzionava uguale sotto aros senza modifiche.
Sorge inoltre un altro problema: abbandono sdl perchè non si può interfacciarlo con i gadget di mui senza stravolgere sdl stesso o ricorrere a dei trick strani e mui vuole che la finestra sia creata con mui.
Freetype chiaramente ha il vantaggio che la finestra se la crea mui e nessuno gli rompe le scatole.
Cairo invece? Ho letto stamane un tutorial. Si parlava di "superfici" e la cosa mi ha disturbato non poco. Non è che finisce che mi va a creare lui le finestre e quindi non mi interfaccio con mui?
Grazie!!

edit:
ma cairo che fa????? gli unici esempi che trovo sono appoggiati a gtk:|:|:| sotto windows di fatto che si fa? mi rimpiazza semplicemente le gdi?
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #1 il: 04 Ottobre 2011, 13:10:38 »
ok. capito come funziona sotto windows.
la portabilità sta nel fatto che "sono le api di disegno che lo sono"
la finestra me la creo come il sistema operativo vuole e (esempio in windows) mi limito a passargli i puntatori necessari per le superfici della finestra nella chiamata a on paint.
la velocità sembra discreta. un ciclo di pittura di 800*600 rettangoli a schermo mi è sembrato decentemente veloce. Alla fine io devo disegnare caratteri e ridisegnare continuamente le zone variate. Non arriverò mai a dover disegnare in blocco 480000 caratteri. se prendo uno schermo 1280*1024 usando come esempio un piccolo carattere box di 100 pixel (10*10) otterrei circa 13.000 caratteri. Su un 1600*1200 arriverei a 19200 caratteri.
Diciamo che le prestazioni sono buone.
Per ora vince cairo 1 a 0...
Il passo successivo sarà di vedere sotto aros come si comporta. A questo punto mi dovrò creare la mia brava finestra e vedere come interfacciarlo con cairo. Leggevo che sotto morphos è stato usato per webkit (quindi owb??)... sperem...

aggiungo a titolo di esempio il codice per la realizzazione di un rettangolo


#include <windows.h>
#include <cairo.h>
#include <cairo-win32.h>
#include<stdlib.h>


/*  Declare Windows procedure  */
LRESULT CALLBACK WindowProcedure (HWND, UINT, WPARAM, LPARAM);

/*  Make the class name into a global variable  */
char szClassName[ ] = "CodeBlocksWindowsApp";

int WINAPI WinMain (HINSTANCE hThisInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszArgument,
                     int nCmdShow)
{
    HWND hwnd;               /* This is the handle for our window */
    MSG messages;            /* Here messages to the application are saved */
    WNDCLASSEX wincl;        /* Data structure for the windowclass */





    /* The Window structure */
    wincl.hInstance = hThisInstance;
    wincl.lpszClassName = szClassName;
    wincl.lpfnWndProc = WindowProcedure;      /* This function is called by windows */
    wincl.style = CS_DBLCLKS;                 /* Catch double-clicks */
    wincl.cbSize = sizeof (WNDCLASSEX);

    /* Use default icon and mouse-pointer */
    wincl.hIcon = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hIconSm = LoadIcon (NULL, IDI_APPLICATION);
    wincl.hCursor = LoadCursor (NULL, IDC_ARROW);
    wincl.lpszMenuName = NULL;                 /* No menu */
    wincl.cbClsExtra = 0;                      /* No extra bytes after the window class */
    wincl.cbWndExtra = 0;                      /* structure or the window instance */
    /* Use Windows's default colour as the background of the window */
    wincl.hbrBackground = (HBRUSH) COLOR_BACKGROUND;

    /* Register the window class, and if it fails quit the program */
    if (!RegisterClassEx (&wincl))
        return 0;

    /* The class is registered, let's create the program*/
    hwnd = CreateWindowEx (
           0,                   /* Extended possibilites for variation */
           szClassName,         /* Classname */
           "Code::Blocks Template Windows App",       /* Title Text */
           WS_OVERLAPPEDWINDOW, /* default window */
           CW_USEDEFAULT,       /* Windows decides the position */
           CW_USEDEFAULT,       /* where the window ends up on the screen */
           544,                 /* The programs width */
           375,                 /* and height in pixels */
           HWND_DESKTOP,        /* The window is a child-window to desktop */
           NULL,                /* No menu */
           hThisInstance,       /* Program Instance handler */
           NULL                 /* No Window Creation data */
           );

    /* Make the window visible on the screen */
    ShowWindow (hwnd, nCmdShow);

    /* Run the message loop. It will run until GetMessage() returns 0 */
    while (GetMessage (&messages, NULL, 0, 0))
    {
        /* Translate virtual-key messages into character messages */
        TranslateMessage(&messages);
        /* Send message to WindowProcedure */
        DispatchMessage(&messages);
    }

    /* The program return-value is 0 - The value that PostQuitMessage() gave */
    return messages.wParam;
}


/*  This function is called by the Windows function DispatchMessage()  */

LRESULT CALLBACK WindowProcedure (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    HDC hDC;
    PAINTSTRUCT Ps;
    switch (message)                  /* handle the messages */
    {
        case WM_DESTROY:
            PostQuitMessage (0);       /* send a WM_QUIT to the message queue */
            break;
        case WM_PAINT:
        int i,j;
        hDC = BeginPaint(hwnd, &Ps);


// TODO: Add any drawing code here...
        cairo_surface_t *surface;
        cairo_t *cr;

//FUNZIONE WINDOWS PER RESTITUIRE IL PUNTATORE DEL CONTESTO FINESTRA WIN32 PER CREARE
//CONTESTO (LA SUPERFICIE) SULLA QUALE CAIRO DISEGNA
        surface = cairo_win32_surface_create(hDC);


        cr = cairo_create(surface);

       cairo_set_source_rgb (cr, 0, 0, 0);
       cairo_rectangle (cr, 20+i,20+j,120+i,80+j);
       cairo_fill (cr);
   







        cairo_destroy(cr);
break;


        default:                      /* for messages that we don't deal with */
            return DefWindowProc (hwnd, message, wParam, lParam);
    }

    return 0;
}
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #2 il: 04 Ottobre 2011, 14:12:16 »
uhuhhuhhhuhhhuhhhuh (risata scomposta)
che bella cosa i file header. io mi dimentico sempre della loro esistenza...
in cairo-aros.h
cairo_public cairo_surface_t *
cairo_aros_surface_create (struct RastPort *rastport, int xoff, int yoff, int width, int height);

nella versione per morphos c'è anche un esempio.
stasera mi sa che mi diverto un poco...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: [c] Cairo o Freetype?
« Risposta #3 il: 04 Ottobre 2011, 21:12:01 »
rebraist 6 troppo forte  :D
ti fai le domande e ti rispondi da solo!
 :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #4 il: 04 Ottobre 2011, 21:26:25 »
@allanon
macchè!! abbandonare sdl è un trauma. significa che dovrò crearmi delle routine di input fatte per bene. e mentalmente ancora non ho idea di cosa fare... a proposito (a chi piace python) pare che sia il linguaggio principe per cairo. molti esempi sono per pygame e python...
E ora che ci penso (da bravo ansioso) cairo, immagino, non gestisce manco il kerning e altre proprietà dei ttf... Morirò... Sento che morirò... :violin:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline Allanon

  • Administrator
  • Synthetic Voodoo
  • *****
  • Post: 3498
  • Karma: +17/-4
    • Mostra profilo
    • http://www.a-mc.biz
Re: [c] Cairo o Freetype?
« Risposta #5 il: 04 Ottobre 2011, 21:54:06 »
nooooo... non morirai... non morirai.... ma....
imprecherai! imprecheraiiiiii!!!
 :lol:
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline TheKaneB

  • Human Debugger
  • *****
  • Post: 5292
  • Karma: +20/-23
    • Mostra profilo
    • http://www.antoniobarba.org
Re: [c] Cairo o Freetype?
« Risposta #6 il: 05 Ottobre 2011, 08:52:53 »
Le bestemmie in Klingon non saranno più un problema per te ;-)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #7 il: 05 Ottobre 2011, 13:29:35 »
Citazione da: "rebraist"
@allanon
macchè!! abbandonare sdl è un trauma. significa che dovrò crearmi delle routine di input fatte per bene. e mentalmente ancora non ho idea di cosa fare... a proposito (a chi piace python) pare che sia il linguaggio principe per cairo. molti esempi sono per pygame e python...
E ora che ci penso (da bravo ansioso) cairo, immagino, non gestisce manco il kerning e altre proprietà dei ttf... Morirò... Sento che morirò... :violin:
Considera che PyGame = SDL, ma molto più semplice da utilizzare.

Visto che hai usato già le SDL, magari con Python ti troverai meglio.

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #8 il: 06 Ottobre 2011, 13:38:26 »
@cdimauro: c per sempre. non fosse altro che non amo gli interpretati dai tempi del basic del c64.

cmq ho scelto: cairo. l'unica rottura di palle è creare routine di input specifiche per il singolo sistema...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #9 il: 06 Ottobre 2011, 13:43:11 »
Il C proprio non lo sopporto, ma sono costretto a lavorarci parecchio.

Comunque guarda C# non è interpretato: è compilato. Versione JIT, oppure puoi compilare l'intera applicazione alla prima esecuzione. 8-)

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #10 il: 06 Ottobre 2011, 19:49:12 »
:D:D
@cdimauro: no no mi riferivo a python!!! c# non è male. tornando in metro la sera mi leggo qualche libro e la lettura è scorrevole. la sintassi è molto simile al c, scevra di alcune bruttezze del c++, e contemporaneamente ha l'immediatezza di vbasic.
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline cdimauro

  • Human Debugger
  • *****
  • Post: 4291
  • Karma: +7/-95
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #11 il: 06 Ottobre 2011, 19:53:22 »
ARGH!!! Un colpo al cuore! :cry:

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #12 il: 08 Ottobre 2011, 00:04:02 »
mi dispiace per il paragone con il vbasic ma ha tutte le funzioni che aveva il vecchio vb e oltre...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline rebraist

  • Nerd
  • *****
  • Post: 946
  • Karma: +13/-1
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #13 il: 15 Ottobre 2011, 22:27:37 »
ok. riuscito a usare cairo con mui. solo che cairo di suo ha una libreria rendering testo penosa. quindi uso cairo per il rendering del carattere che preparo con freetype (cairo lo permette). tutto ok sotto windows. sotto aros scopro che cairo è stato compilato senza supporto freetype. Tremo: so già cosa mi aspetta. Una libreria intera da ricompilare... se tutto va bene. Già che ci siamo non so usare il make. E se mi va male dovrò portare qualche altra libreria di supporto. Mi consolo pensando che pixman già è stata portata. Ora mi aspetta il make...
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
Amigaos spacca.
Aros rulla.
Morphos corre di brutto.
Sinceramente, non vorrei che mio figlio facesse amicizia con uno di questi tre tipacci.
Dottore:lei é uno di quelli che si potrebbero definire nerd...
Io: dottò, lo so di mio. Sono pure iscritto a 'n'forum...
Dottore: su internet?
Io: no a rete 4

Offline divina

  • Synthetic Voodoo
  • *****
  • Post: 2051
  • Karma: +1/-7
    • Mostra profilo
Re: [c] Cairo o Freetype?
« Risposta #14 il: 15 Ottobre 2011, 22:30:34 »
@rebraist
:) mi fai venire sempre più voglia :)
« Ultima modifica: 01 Gennaio 1970, 02:00:00 da Guest »
MorphOS 3.9-PowerMac G5 && PowerMac G4 FW800 && PowerBook G4 && Pegasos2 G4 //AmigaOS4.x //IcAROS x86 //- A4k 060- MacIntel/powerpc - x86/x64/powerpc servers -

Tags: