On 18 August 2010 15:57, Stefan Kost <enso...@hora-obscura.de> wrote: > hi, > > On 17.08.2010 12:01, James Morris wrote: >> Hi, >> >> I see that some GDK drawing functions and graphics contexts have been >> deprecated in favour of using Cairo. >> >> Yesterday I spent a few hours *removing* Cairo code from my fledgling >> GTK application and replacing it with gdk_draw_rectangle, >> gdk_gc_set_rgb_fg_color, and gdk_gc_set_function. I did this for >> performance reasons[1] >> >> I am wondering if my approach to drawing is wrong however and if a >> better approach might yield less CPU usage? >> >> It begins with a 33ms timeout. The timeout callback calls >> gtk_widget_queue_draw on the window and the drawing area. >> > > Would it be possible to isolate this into a standalone demo. Or could > you point us to the actual code?
Hi Stefan, The actual code is here: http://github.com/jwm-art-net/BoxySeq/blob/97f6d674a2a182a143ef82b03bde11689fedcf18/gui_grid.c I'm probably not going to work on it for a while. Probably going to make the back-end into a library first and then investigate the possibility of using FLTK. Cheers, James. > Stefan > >> (Imagine rectangles appearing each time a note is played in a piece of >> music and disappearing when that note ends.) >> >> In the expose event callback a linked-list of rectangles is >> maintained. Rectangles are added to the list and removed from the list >> as notes start and end (The application is an experimental MIDI >> sequencer/arpeggiator operating in real time). >> >> Each and every time the expose event callback is called (every 33ms) >> the background and the entire list of rectangles is drawn as well as >> various maintenance functions performed on the list. >> >> The documentation of gdk_cairo_create seems to suggest this is the >> only way of doing it when it says: >> >> "Note that due to double-buffering, Cairo contexts created in a GTK+ >> expose event handler cannot be cached and reused between different >> expose events." >> >> Is it possible to do this any other way? >> Cheers, >> James. >> >> [1]My machine is a 64bit 3.0ghz dual core desktop. Using GDK for >> drawing, the CPU usage is at worst 5% on both cores. Using Cairo on >> the other hand, the CPU usage can reach as much as 20% on both cores. >> >> The project is here: http://github.com/jwm-art-net/BoxySeq >> Cairo routines is here: >> http://github.com/jwm-art-net/BoxySeq/tree/97f6d674a2a182a143ef82b03bde11689fedcf18 >> GDK routines is here: >> http://github.com/jwm-art-net/BoxySeq/tree/29f412b41b2371ec136aa86da50d858f5892bfa0 >> _______________________________________________ >> gtk-app-devel-list mailing list >> gtk-app-devel-list@gnome.org >> http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list >> > > _______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list