' void cairo_text_extents(cairo_t *cr,Const char * utf8,cairo_text_extents_t * extents);
' Gets the extents for a string of text.
Private Extern cairo_text_extents(cr As Pointer, utf8_string As String, extents As Pointer)
E non so come "tradurla" in quanto cairo_text_extents_t in realtà è una struttura.
P.S. Generare un file immagine da una DrawingArea utilizzante la libreria "libX11:6.3.0"Il file della libreria condivisa da cercare è: libX11.so.6.3.0
non poteva funzionare nel mio caso perché tale libreria nel mio /usr/lib/ non cè !
f = Float@(variabile_puntatore + (sizeof(gb.Pointer) * 4))
A proposito della libreria cercavo appunto le librerie con l'estensione ".so"Ricorda che in Gambas nella dichiarazione delle librerie condivise esterne la parte relativa all'estensione ".so." è sostituita con il simbolo dei due punti " : "
Ma quella e molte altre non le ho trovate.???
Library "libcairomm-1.0"
' void cairo_text_extents(cairo_t *cr,Const char * utf8,cairo_text_extents_t * extents);
' Gets the extents for a string of text.
Private Extern cairo_text_extents(cr As Pointer, utf8_string As String, extents As Pointer)
Public Struct cairo_text_extents_t
x_bearing As Float
y_bearing As Float
width As Float
height As Float
x_advance As Float
y_advance As Float
End Struct
Public Sub disegna_fattura(cairo As Pointer)
Dim my_text_extent As Cairo_text_extents_t
' Dim my_text_extent As New Cairo_text_extent_t
Dim ptn As Pointer
Dim my_width As Float
cairo_set_source_rgb(cairo, 0.0, 0.0, 0.0)
cairo_select_font_face(cairo, "Droid Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD)
cairo_set_font_size(cairo, 18.0)
cairo_text_extents(cairo, "Nome Qualsiasi", VarPtr(ptn))
my_text_extent = ptn
my_width = my_text_extent.width
cairo_move_to(cairo, (114 - (my_width / 2)), 40)
cairo_show_text(cairo, "Nome Qualsiasi")
End
Dim my_text_extent As New Cairo_text_extent_tVorrei capire bene, ...cioè, se tu passi alla funzione esterna, in questo modo:
all'esecuzione ...
Mi da errore di segmentazione (11) ???
Sia che usi la chiave New alla struttura di base cairo_text_extent_t , sia senza.
Dim my_text_extent As New Cairo_text_extents_t
......
......
cairo_text_extents(cairo, "Nome Qualsiasi", my_text_extent)
Private Extern cairo_text_extents(cr As Pointer, utf8_string As String, extents As Cairo_text_extents_t)
si inchioda alla chiamata della struttura esterna : cairo_text_extents(cairo, "Nome Qualsiasi", VarPtr(ptn))Prova con al funzione "Alloc( )":
Dim my_text_extent As New Cairo_text_extents_t
Dim ptn As Pointer
......
......
ptn = Alloc(Object.SizeOf(my_text_extent), 1)
......
......
cairo_text_extents(cairo, "Nome Qualsiasi", ptn)
Free(ptn)
Library "libcairomm-1.0:1.4.0"
Public Struct cairo_text_extents_t
x_bearing As Float
y_bearing As Float
width As Float
height As Float
x_advance As Float
y_advance As Float
End Struct
Private Const CAIRO_FORMAT_ARGB32 As Integer = 0
Private Enum CAIRO_FONT_SLANT_NORMAL = 0, CAIRO_FONT_SLANT_ITALIC, CAIRO_FONT_SLANT_OBLIQUE
Private Enum CAIRO_FONT_WEIGHT_NORMAL = 0, CAIRO_FONT_WEIGHT_BOLD
' cairo_surface_t * cairo_image_surface_create(cairo_format_t formatI, int width, int height)
' Creates an image surface of the specified format and dimensions.
Private Extern cairo_image_surface_create(formatI As Integer, width As Integer, height As Integer) As Pointer
' void cairo_set_source_rgb (cairo_t *cr, double red, double green, double blue)
' Sets the source pattern within cr to an opaque color.
Private Extern cairo_set_source_rgb(cr As Pointer, red As Float, green As Float, blue As Float)
' void cairo_select_font_face (cairo_t *cr, const char *family, cairo_font_slant_t slant, cairo_font_weight_t weight)
' Selects a family and style of font from a simplified description as a family name, slant and weight.
Private Extern cairo_select_font_face(cr As Pointer, family As String, slant As Integer, weight As Integer)
' void cairo_set_font_size (cairo_t *cr, double size)
' Sets the current font matrix to a scale by a factor of size.
Private Extern cairo_set_font_size(cr As Pointer, size As Float)
' void cairo_text_extents(cairo_t *cr,Const char * utf8,cairo_text_extents_t * extents);
' Gets the extents for a string of text.
Private Extern cairo_text_extents(cr As Pointer, utf8_string As String, extents As Cairo_text_extents_t)
Public Sub Main()
Dim cairo As Pointer
Dim my_text_extent As New Cairo_text_extents_t
cairo = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 400, 200)
If cairo = 0 Then Error.Raise("Impossibile creare la superficie per l'immagine !")
cairo_set_source_rgb(cairo, 0.0, 0.0, 0.0)
cairo_select_font_face(cairo, "Liberation Sans", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_BOLD)
cairo_set_font_size(cairo, 18.0)
cairo_text_extents(cairo, "testo quasiasi", my_text_extent)
End
Se un programma non funziona o funziona male, il problema è fra la sedia e la tastiera ....:rotfl:
ma con l'ultima modifica (tuo post successivo) mi da lo stesso errore.
Public Sub scrivi_intestazioni(cairo As Pointer)
Dim my_text_extent As New Cairo_text_extents_t
Dim ptn As Pointer
Dim my_width As Float
ptn = Alloc(Object.SizeOf(my_text_extent), 1)
cairo_set_source_rgb(cairo, 0.0, 0.0, 0.0)
cairo_select_font_face(cairo, "Liberation Serif", CAIRO_FONT_SLANT_NORMAL, CAIRO_FONT_WEIGHT_NORMAL)
cairo_set_font_size(cairo, 16)
cairo_move_to(cairo, 250, 108)
cairo_show_text(cairo, "FATTURA N°")
cairo_set_font_size(cairo, 9.0)
cairo_text_extents(cairo, "Tipo prestazione", ptn)
my_text_extent = ptn
my_width = my_text_extent.width
cairo_move_to(cairo, (169 - (my_width / 2)), 295)
cairo_show_text(cairo, "Tipo prestazione")
cairo_text_extents(cairo, "Ore / Prestaz.", ptn)
my_text_extent = ptn
my_width = my_text_extent.width
cairo_move_to(cairo, (368 - (my_width / 2)), 295)
cairo_show_text(cairo, "Ore / Prestaz.")
cairo_text_extents(cairo, "Onorario €", ptn)
my_text_extent = ptn
my_width = my_text_extent.width
cairo_move_to(cairo, (448 - (my_width / 2)), 295)
cairo_show_text(cairo, "Onorario €")
cairo_text_extents(cairo, "Importo €", ptn)
my_text_extent = ptn
my_width = my_text_extent.width
cairo_move_to(cairo, (536 - (my_width / 2)), 295)
cairo_show_text(cairo, "Importo €")
Free(ptn)
End
Public Sub test_pdf()
Dim surface, pattern, pagina_1, pagina_2 As Pointer
Dim x, y As Byte
surface = cairo_pdf_surface_create("/home/franco/Scrivania/test.6_Cairo.pdf", 595.3, 841.9)
'cairo = cairo_create(surface)
pagina_1 = cairo_create(surface)
pagina_2 = cairo_create(surface)
prima_pagina = True
'' Disegna la prima pagina (Originale)
disegna_modello(pagina_1)
scrive_logo(pagina_1)
scrivi_data(pagina_1)
scrivi_intestazioni(pagina_1)
scrivi_ultime(pagina_1)
cairo_show_page(pagina_1)
prima_pagina = False
'' Disegna la seconda pagina (Copia)
disegna_modello(pagina_2)
scrive_logo(pagina_2)
scrivi_data(pagina_2)
scrivi_intestazioni(pagina_2)
scrivi_ultime(pagina_2)
cairo_show_page(pagina_2)
''Finito !
cairo_destroy(pagina_1)
cairo_destroy(pagina_2)
cairo_surface_destroy(surface)
Message.Info("Creazione completata")
End
Non capisco perché non utilizzi direttamente il membro della Struttura. :-\Codice: [Seleziona]my_width = my_text_extent.width
A proposito, "my_text_extent.width" contiene un valore superiore a zero ?Codice: [Seleziona]my_width = my_text_extent.width
Vorrei chiederti (se posso) una volta che ho finito, vorresti testarlo ?Dovrai allegare il sorgente in questa discussione.
Una cosa è certa, senza il tuo aiuto credo che avrei rinunciato.Comunque sia, utilizzando le funzioni esterne hai compiuto il primo passo in un mondo più ampio.
/* XPM */
static const char * arrow_left_xpm[] = {
"16 16 3 1",
" c None",
". c #000000",
"+ c #FFFFFF",
" ",
" ",
" .. ",
" .... ",
" ...... ",
" ........ ",
" .......... ",
" ........... ",
" +.......... ",
" ++........ ",
" ++...... ",
" ++.... ",
" ++.. ",
" ++ ",
" ",
" "};
GdkPixbuf *image_2;
image_2 = gdk_pixbuf_new_from_xpm_data((const char **)arrow_left_xpm);
gdk_cairo_set_source_pixbuf(cr1, image_2, 430, 8);
cairo_rectangle(cr1,430, 8, 134, 89);
cairo_fill(cr1);
ecc. ecc.
Cioè se io scrivo nell'editor un file tipo:C'è un semplicissimo esempio pratico nella nostra Wiki:Codice: [Seleziona]e volessi visualizzarlo come immagine esiste una cosa come questa ?/* XPM */