I followed your advice and found that "Cairo" is a vector graphics library.
I think the vector drawing action will cost more cpu, gpu or ram then
gdk_draw_* API.
But my target device is an embeded system with ARM9 cpu, and have not gpu.
So I think the gdk_draw_* API is better of me and my device.
Am I right?

And I found that the Cairo library had not be integrated into the GTK+ 2.12.
I have to compile and intstall it into my embeded filesystem manually.
Am I right?


On 8/12/08, Emmanuele Bassi <[EMAIL PROTECTED]> wrote:
>
> On Tue, 2008-08-12 at 22:24 +0800, Wu Yin wrote:
> > So your mean is all the drawing action must be done through the
> > "expose-event", isn't it ?
>
> yes.
>
> > And what is the "Cairo API"? Is it the GTK+'s official api in the
> > <gtk/gtk.h>?
>
> you should read:
>
> http://cairographics.org
> http://library.gnome.org/devel/gdk/unstable/gdk-Cairo-Interaction.html
>
> "Cairo is a graphics library that supports vector graphics and image
>   compositing that can be used with GDK. Since 2.8, GTK+ does most of
>   its drawing using Cairo."
>
> ciao,
> Emmanuele.
>
> > On Tue, Aug 12, 2008 at 6:48 PM, Emmanuele Bassi <[EMAIL PROTECTED]>
> > wrote:
> >         On Tue, 2008-08-12 at 18:24 +0800, Wu Yin wrote:
> >         > Thanks very much. But I have Another question:
> >         > I want to draw line on my own initiative, don't use
> >         "expose-event" and callback function.
> >
> >
> >         why not? that's how you do what you want to do.
> >
> >         > Like the following code, but the code can't do what I want.
> >
> >
> >         because it's not how you do what you want to do.
> >
> >         > Please tell me how to do this?
> >         >
> >         >
> >         > Code:
> >         >
> >
> +-------------------------------------------------------------------------------------
> >         > |     int main(int argc, char *argv[])
> >         > |     {
> >         > |             GtkWidget *w;
> >         > |
> >         > |             gtk_init(&argc, &argv);
> >         > |
> >         > |             w = gtk_window_new(GTK_WINDOW_TOPLEVEL);
> >         > |             g_signal_connect(GTK_OBJECT(w), "destroy",
> >         G_CALLBACK(gtk_main_quit), NULL);
> >
> >
> >         don't cast to GTK_OBJECT: it's a useless type check, and
> >         g_signal_connect() takes a gpointer as the first argument.
> >
> >         > |             gtk_widget_realize(w);
> >         > |             gdk_draw_line(w->window,
> >         w->style->fg_gc[GTK_WIDGET_STATE(w)],
> >         > |                             0, 0, 120, 120);
> >
> >
> >         don't use gdk_draw_* API: it's long deprecated (gtk+ 2.8
> >         deprecated that
> >         family of functions).
> >
> >         connect to the ::expose-event signal, get the cairo context
> >         from the
> >         GdkWindow and use the Cairo API to draw:
> >
> >          static gboolean
> >          my_expose_event (GtkWidget *widget, GdkEvent *event, gpointer
> >         data)
> >          {
> >            cairo_t *cr = gdk_cairo_create (GDK_DRAWABLE
> >         (widget->window));
> >            GdkColor color;
> >
> >            color = w->style->fg[GTK_WIDGET_STATE (widget)]
> >
> >            cairo_move_to (cr, 0, 0);
> >            cairo_line_to (cr, 120, 120);
> >            gdk_cairo_set_source_color (cr, &color);
> >
> >            cairo_stroke (cr);
> >
> >            cairo_destroy (cr);
> >
> >            return FALSE;
> >          }
> >
> >         [WARNING: untested code, written from memory - use the Cairo
> >         API
> >         reference to check the functions]
> >
> >
> >         ciao,
> >          Emmanuele.
> >
> >         --
> >         Emmanuele Bassi,
> >         W: http://www.emmanuelebassi.net
> >         B: http://log.emmanuelebassi.net
> >
> >         _______________________________________________
> >         gtk-list mailing list
> >         [email protected]
> >         http://mail.gnome.org/mailman/listinfo/gtk-list
> >
> >
> >
> > _______________________________________________
> > gtk-list mailing list
> > [email protected]
> > http://mail.gnome.org/mailman/listinfo/gtk-list
> --
> Emmanuele Bassi,
> W: http://www.emmanuelebassi.net
> B: http://log.emmanuelebassi.net
>
> _______________________________________________
> gtk-list mailing list
> [email protected]
> http://mail.gnome.org/mailman/listinfo/gtk-list
>



-- 
----------------------------------------------
┏━━━━━━━━━━━━━━━━━━━━━━━━┓
┃菩提本无树,明镜亦非台。本来无一物,何处惹尘埃。┃
┗━━━━━━━━━━━━━━━━━━━━━━━━┛
_______________________________________________
gtk-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/gtk-list

Reply via email to