From c8e2aaf6999da491d6ea8dab2bc99752fa94b6d4 Mon Sep 17 00:00:00 2001 From: Ludovic Pouzenc Date: Sun, 17 Jun 2012 16:18:53 +0000 Subject: Ajout d'une fonction pour linéariser un peu la réponse du projecteur (illuminate.c) Ajout d'une moyenne sur 8 valeurs pour la luminosité (mais on garde la valeur instantanée pour altérer la couleur) Correction du vumeter qui s'initialisais à 1px par 1px au lancement de l'appli. Avec le lud-msi, le projo à Ju et les sons enregistrés par Laurent, ça pète pas mal :P MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: file:///var/svn/2012-violon-leds/trunk@24 6be1fa4d-33ac-4c33-becc-79fcb3794bb6 --- src/gtkvumeter.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'src/gtkvumeter.c') diff --git a/src/gtkvumeter.c b/src/gtkvumeter.c index d57cc62..34a2038 100644 --- a/src/gtkvumeter.c +++ b/src/gtkvumeter.c @@ -1,3 +1,11 @@ +/* + Adapted From GtkVuMeter by Todd Goyen + Copyright 2003 Todd Goyen + wettoad@knighthoodofbuh.or + + Improved rendering performance (no individual drawline calls) + +*/ #include #include "gtkvumeter.h" @@ -18,10 +26,12 @@ static void free_drawbuf(guchar *pixels, gpointer data); static void gtk_vu_meter_size_request (GtkWidget *widget, GtkRequisition *requisition); static void gtk_vu_meter_size_allocate (GtkWidget *widget, GtkAllocation *allocation); static gint gtk_vu_meter_sound_level_to_draw_level (GtkVuMeter *vumeter); +static void gtk_vu_meter_realize (GtkWidget *widget); static void gtk_vu_meter_class_init (GtkVuMeterClass *class) { GtkWidgetClass *widget_class; widget_class = GTK_WIDGET_CLASS (class); + widget_class->realize = gtk_vu_meter_realize; widget_class->expose_event = gtk_vu_meter_expose; widget_class->size_request = gtk_vu_meter_size_request; widget_class->size_allocate = gtk_vu_meter_size_allocate; @@ -33,6 +43,38 @@ static void gtk_vu_meter_init (GtkVuMeter *vumeter) { gtk_vu_meter_setup_colors(vumeter); } +static void gtk_vu_meter_realize (GtkWidget *widget) +{ + GtkVuMeter *vumeter; + GdkWindowAttr attributes; + gint attributes_mask; + + g_return_if_fail (widget != NULL); + g_return_if_fail (GTK_IS_VU_METER (widget)); + + GTK_WIDGET_SET_FLAGS (widget, GTK_REALIZED); + vumeter = GTK_VU_METER (widget); + + attributes.x = widget->allocation.x; + attributes.y = widget->allocation.y; + attributes.width = widget->allocation.width; + attributes.height = widget->allocation.height; + attributes.wclass = GDK_INPUT_OUTPUT; + attributes.window_type = GDK_WINDOW_CHILD; + attributes.event_mask = gtk_widget_get_events (widget) | GDK_EXPOSURE_MASK; + attributes.visual = gtk_widget_get_visual (widget); + attributes.colormap = gtk_widget_get_colormap (widget); + attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; + widget->window = gdk_window_new (widget->parent->window, &attributes, attributes_mask); + + widget->style = gtk_style_attach (widget->style, widget->window); + + gdk_window_set_user_data (widget->window, widget); + gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); + + gtk_vu_meter_setup_colors (vumeter); +} + void gtk_vu_meter_set_gradient (GtkVuMeter *vumeter, gint f_gradient_key_count, GdkColor *f_gradient_keys, gint b_gradient_key_count, GdkColor *b_gradient_keys) { //XXX : memdup is a bad idea ? GdkColor *fgk = g_memdup(f_gradient_keys, f_gradient_key_count*sizeof(GdkColor)); -- cgit v1.2.3