X-Git-Url: https://vcs.maemo.org/git/?a=blobdiff_plain;f=src%2Fhildon-vvolumebar.c;h=f5bb86acdb4f0b49caae3c516166df40b9dfb3ba;hb=7cc18180942701cf067dbfe71991afe9315c7485;hp=17fde149edfa44759b1f9964c075e70dd1530aca;hpb=f6302d17784a0020efc9faef31b8d8c773b1ba44;p=hildon diff --git a/src/hildon-vvolumebar.c b/src/hildon-vvolumebar.c index 17fde14..f5bb86a 100644 --- a/src/hildon-vvolumebar.c +++ b/src/hildon-vvolumebar.c @@ -1,5 +1,5 @@ /* - * This file is part of hildon-libs + * This file is a part of hildon * * Copyright (C) 2005, 2006 Nokia Corporation, all rights reserved. * @@ -22,105 +22,146 @@ * */ -/* +/** * SECTION:hildon-vvolumebar - * @short_description: A widget that displays a vertical volume bar + * @short_description: A widget that displays a vertical volume bar. * @see_also: #HildonVolumebar, #HildonHVolumebar * * #HildonVVolumebar is a subclass of #HildonVolumebar. It displays a * vertical volume bar that allows increasing or decreasing volume * within a predefined range, and muting when users click the mute icon. + * + * Here is an example that creates a vertical volume bar and connects + * both its signals. + * + * HildonVVolumebar example + * + * GtkWidget *volbar = hildon_vvolumebar_new (); + * g_signal_connect (G_OBJECT (volbar), "mute_toggled", G_CALLBACK (mute_toggle), NULL); + * g_signal_connect (G_OBJECT (volbar), "level_changed", G_CALLBACK (level_change), NULL); + * + * */ -#ifdef HAVE_CONFIG_H -#include +#ifdef HAVE_CONFIG_H +#include #endif -#include -#include "hildon-vvolumebar.h" -#include "hildon-volumebar-range.h" -#include "hildon-volumebar-private.h" +#include "hildon-vvolumebar.h" +#include +#include "hildon-volumebar-range.h" +#include "hildon-volumebar-private.h" /* Volume bar */ -#define DEFAULT_BAR_WIDTH 58 -#define MINIMUM_BAR_HEIGHT 165 +#define DEFAULT_BAR_WIDTH 58 + +#define MINIMUM_BAR_HEIGHT 165 + /* Toggle button */ -#define DEFAULT_VERTICAL_TBUTTON_WIDTH 26 -#define DEFAULT_VERTICAL_TBUTTON_HEIGHT 26 -#define DEFAULT_ENDING_SIZE 20 + +#define DEFAULT_VERTICAL_TBUTTON_WIDTH 26 + +#define DEFAULT_VERTICAL_TBUTTON_HEIGHT 26 + +#define DEFAULT_ENDING_SIZE 20 + /* Gap to leave for mute button */ -#define HORIZONTAL_MUTE_GAP 16 -#define VERTICAL_MUTE_GAP 6 - -static HildonVolumebarClass *parent_class; -static void hildon_vvolumebar_class_init(HildonVVolumebarClass * klass); -static void hildon_vvolumebar_init(HildonVVolumebar * vvolumebar); -static gboolean hildon_vvolumebar_expose(GtkWidget * widget, - GdkEventExpose * event); -static void hildon_vvolumebar_size_request(GtkWidget * widget, - GtkRequisition * requisition); -static void hildon_vvolumebar_size_allocate(GtkWidget * widget, - GtkAllocation * allocation); - -GType hildon_vvolumebar_get_type(void) + +#define HORIZONTAL_MUTE_GAP 16 + +#define VERTICAL_MUTE_GAP 6 + +static HildonVolumebarClass* parent_class; + +static void +hildon_vvolumebar_class_init (HildonVVolumebarClass * klass); + +static void +hildon_vvolumebar_init (HildonVVolumebar * vvolumebar); + +static gboolean +hildon_vvolumebar_expose (GtkWidget * widget, + GdkEventExpose * event); + +static void +hildon_vvolumebar_size_request (GtkWidget * widget, + GtkRequisition * requisition); + +static void +hildon_vvolumebar_size_allocate (GtkWidget * widget, + GtkAllocation * allocation); + +/** + * hildon_vvolumebar_get_type: + * + * Initializes and returns the type of a hildon vvolumebar. + * + * @Returns: GType of #HildonVVolumebar + */ +GType G_GNUC_CONST +hildon_vvolumebar_get_type (void) { static GType type = 0; if (!type) { static const GTypeInfo info = { - sizeof(HildonVVolumebarClass), + sizeof (HildonVVolumebarClass), NULL, /* base_init */ NULL, /* base_finalize */ (GClassInitFunc) hildon_vvolumebar_class_init, /* class_init */ NULL, /* class_finalize */ NULL, /* class_data */ - sizeof(HildonVVolumebar), + sizeof (HildonVVolumebar), 0, (GInstanceInitFunc) hildon_vvolumebar_init, }; type = - g_type_register_static(HILDON_TYPE_VOLUMEBAR, - "HildonVVolumebar", &info, 0); + g_type_register_static (HILDON_TYPE_VOLUMEBAR, + "HildonVVolumebar", &info, 0); } return type; } -static void hildon_vvolumebar_class_init(HildonVVolumebarClass * klass) +static void +hildon_vvolumebar_class_init (HildonVVolumebarClass *klass) { GtkWidgetClass *volumebar_class = GTK_WIDGET_CLASS(klass); parent_class = g_type_class_peek_parent(klass); - volumebar_class->size_request = hildon_vvolumebar_size_request; - volumebar_class->size_allocate = hildon_vvolumebar_size_allocate; - volumebar_class->expose_event = hildon_vvolumebar_expose; + volumebar_class->size_request = hildon_vvolumebar_size_request; + volumebar_class->size_allocate = hildon_vvolumebar_size_allocate; + volumebar_class->expose_event = hildon_vvolumebar_expose; } -static void hildon_vvolumebar_init(HildonVVolumebar * vvolumebar) +static void +hildon_vvolumebar_init (HildonVVolumebar *vvolumebar) { HildonVolumebarPrivate *priv; - priv = HILDON_VOLUMEBAR_GET_PRIVATE(vvolumebar); + priv = HILDON_VOLUMEBAR_GET_PRIVATE (vvolumebar); + g_assert (priv); - priv->volumebar = - HILDON_VOLUMEBAR_RANGE(hildon_volumebar_range_new - (GTK_ORIENTATION_VERTICAL)); + priv->volumebar = HILDON_VOLUMEBAR_RANGE (hildon_volumebar_range_new + (GTK_ORIENTATION_VERTICAL)); - GTK_WIDGET_UNSET_FLAGS(GTK_WIDGET(vvolumebar), GTK_CAN_FOCUS); + GTK_WIDGET_UNSET_FLAGS (GTK_WIDGET (vvolumebar), GTK_CAN_FOCUS); - gtk_widget_set_parent(GTK_WIDGET(priv->tbutton), GTK_WIDGET(vvolumebar)); - gtk_widget_set_parent(GTK_WIDGET(priv->volumebar), GTK_WIDGET(vvolumebar)); + gtk_widget_set_parent (GTK_WIDGET (priv->tbutton), GTK_WIDGET (vvolumebar)); + gtk_widget_set_parent (GTK_WIDGET (priv->volumebar), GTK_WIDGET (vvolumebar)); - gtk_scale_set_draw_value(GTK_SCALE(priv->volumebar), FALSE); + gtk_scale_set_draw_value (GTK_SCALE (priv->volumebar), FALSE); /* Signals */ g_signal_connect_swapped(G_OBJECT(priv->volumebar), "value-changed", - G_CALLBACK(hildon_volumebar_level_change), - vvolumebar); + G_CALLBACK(hildon_volumebar_level_change), + vvolumebar); + g_signal_connect_swapped(priv->tbutton, "toggled", - G_CALLBACK(_hildon_volumebar_mute_toggled), vvolumebar); + G_CALLBACK(hildon_volumebar_mute_toggled), vvolumebar); - gtk_widget_show(GTK_WIDGET(priv->volumebar)); + /* FIXME Not sure why this is here */ + gtk_widget_show (GTK_WIDGET (priv->volumebar)); } /** @@ -130,104 +171,103 @@ static void hildon_vvolumebar_init(HildonVVolumebar * vvolumebar) * * Returns: a new #HildonVVolumebar */ -GtkWidget *hildon_vvolumebar_new(void) +GtkWidget* +hildon_vvolumebar_new (void) { - return GTK_WIDGET(g_object_new(HILDON_TYPE_VVOLUMEBAR, NULL)); + return GTK_WIDGET (g_object_new(HILDON_TYPE_VVOLUMEBAR, NULL)); } -static gboolean hildon_vvolumebar_expose(GtkWidget * widget, - GdkEventExpose * event) +static gboolean +hildon_vvolumebar_expose (GtkWidget *widget, + GdkEventExpose *event) { - HildonVolumebarPrivate *priv; - g_assert(HILDON_IS_VVOLUMEBAR(widget)); + HildonVolumebarPrivate *priv; priv = HILDON_VOLUMEBAR_GET_PRIVATE(HILDON_VOLUMEBAR(widget)); - - if (GTK_WIDGET_DRAWABLE(widget)) { + g_assert (priv); + + if (GTK_WIDGET_DRAWABLE (widget)) { /* Paint background */ - gtk_paint_box(widget->style, widget->window, - GTK_WIDGET_STATE(priv->volumebar), GTK_SHADOW_OUT, - NULL, widget, "background", - widget->allocation.x, - widget->allocation.y, - widget->allocation.width, - widget->allocation.height); - - /* The contents of the widget can paint themselves */ - (*GTK_WIDGET_CLASS(parent_class)->expose_event) (widget, event); + gtk_paint_box (widget->style, widget->window, + GTK_WIDGET_STATE (priv->volumebar), GTK_SHADOW_OUT, + NULL, widget, "background", + widget->allocation.x, + widget->allocation.y, + widget->allocation.width, + widget->allocation.height); + + /* The contents of the widget can paint themselves */ + (*GTK_WIDGET_CLASS (parent_class)->expose_event) (widget, event); } return FALSE; } static void -hildon_vvolumebar_size_request(GtkWidget * widget, - GtkRequisition * requisition) +hildon_vvolumebar_size_request (GtkWidget *widget, + GtkRequisition *requisition) { - g_assert(HILDON_IS_VVOLUMEBAR(widget)); - requisition->height = MINIMUM_BAR_HEIGHT; requisition->width = DEFAULT_BAR_WIDTH; } static void -hildon_vvolumebar_size_allocate(GtkWidget * widget, - GtkAllocation * allocation) +hildon_vvolumebar_size_allocate (GtkWidget *widget, + GtkAllocation *allocation) { HildonVolumebarPrivate *priv; GtkAllocation range_allocation, button_allocation; - g_assert(HILDON_IS_VVOLUMEBAR(widget)); - priv = HILDON_VOLUMEBAR_GET_PRIVATE(widget); + g_assert (priv); /* Center the widget horizontally */ if (allocation->width > DEFAULT_BAR_WIDTH) { allocation->x += - (allocation->width - DEFAULT_BAR_WIDTH) / 2; + (allocation->width - DEFAULT_BAR_WIDTH) / 2; allocation->width = DEFAULT_BAR_WIDTH; } - GTK_WIDGET_CLASS(parent_class)->size_allocate(widget, allocation); + GTK_WIDGET_CLASS (parent_class)->size_allocate (widget, allocation); - if (priv->volumebar && GTK_WIDGET_VISIBLE(priv->volumebar)) { + if (priv->volumebar && GTK_WIDGET_VISIBLE (priv->volumebar)) { /* Allocate space for the slider */ range_allocation.x = allocation->x; range_allocation.y = allocation->y + DEFAULT_ENDING_SIZE; range_allocation.width = DEFAULT_BAR_WIDTH; - - if (priv->tbutton && GTK_WIDGET_VISIBLE(priv->tbutton)) + + if (priv->tbutton && GTK_WIDGET_VISIBLE (priv->tbutton)) { - /* Leave room for the mute button */ - range_allocation.height = MAX(0, - allocation->height - - 2 * DEFAULT_ENDING_SIZE - - DEFAULT_VERTICAL_TBUTTON_HEIGHT - - VERTICAL_MUTE_GAP); + /* Leave room for the mute button */ + range_allocation.height = MAX (0, + allocation->height + - 2 * DEFAULT_ENDING_SIZE + - DEFAULT_VERTICAL_TBUTTON_HEIGHT + - VERTICAL_MUTE_GAP); } - + else { - range_allocation.height = MAX(0, - allocation->height - - 2 * DEFAULT_ENDING_SIZE); + range_allocation.height = MAX (0, + allocation->height + - 2 * DEFAULT_ENDING_SIZE); } - - gtk_widget_size_allocate(GTK_WIDGET(priv->volumebar), - &range_allocation); + + gtk_widget_size_allocate (GTK_WIDGET (priv->volumebar), + &range_allocation); } - - if (priv->tbutton && GTK_WIDGET_VISIBLE(priv->tbutton)) { + + if (priv->tbutton && GTK_WIDGET_VISIBLE (priv->tbutton)) { /* Allocate space for the mute button */ button_allocation.x = allocation->x + HORIZONTAL_MUTE_GAP; button_allocation.y = allocation->y + allocation->height - - VERTICAL_MUTE_GAP - 2 * DEFAULT_ENDING_SIZE; + VERTICAL_MUTE_GAP - 2 * DEFAULT_ENDING_SIZE; button_allocation.width = DEFAULT_VERTICAL_TBUTTON_WIDTH; button_allocation.height = DEFAULT_VERTICAL_TBUTTON_HEIGHT; - gtk_widget_size_allocate(GTK_WIDGET(priv->tbutton), - &button_allocation); + gtk_widget_size_allocate (GTK_WIDGET (priv->tbutton), + &button_allocation); } }