void ags_vindicator_draw(AgsVIndicator *indicator) { GtkWidget *widget; GtkAdjustment *adjustment; cairo_t *cr; gdouble value; guint width, height; guint segment_width, segment_height; guint padding; guint i; widget = GTK_WIDGET(indicator); adjustment = AGS_INDICATOR(indicator)->adjustment; // g_message("draw %f\0", adjustment->value); cr = gdk_cairo_create(widget->window); if(cr == NULL){ return; } width = 16; height = 100; segment_width = 16; segment_height = 7; padding = 3; cairo_push_group(cr); for(i = 0; i < height / (segment_height + padding); i++){ if(adjustment->value > 0.0 && (1 / adjustment->value * i < (height / (segment_height + padding)))){ /* active */ cairo_set_source_rgba(cr, 0.9, 0.7, 0.2, 1.0); }else{ /* normal */ cairo_set_source_rgba(cr, 0.0, 0.0, 0.4, 1.0); } cairo_rectangle(cr, 0, height - i * (segment_height + padding) - segment_height, segment_width, segment_height); cairo_fill(cr); cairo_set_source_rgba(cr, 0.0, 0.0, 1.0, 0.3); cairo_rectangle(cr, 0, height - i * (segment_height + padding) - segment_height, segment_width, segment_height); cairo_stroke(cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_destroy(cr); }
void ags_indicator_realize(GtkWidget *widget) { AgsIndicator *indicator; GdkWindowAttr attributes; gint attributes_mask; gint buttons_width; gint border_left, border_top; g_return_if_fail (widget != NULL); g_return_if_fail (AGS_IS_INDICATOR (widget)); indicator = AGS_INDICATOR(widget); gtk_widget_set_realized (widget, TRUE); /* */ attributes.window_type = GDK_WINDOW_CHILD; attributes.x = widget->allocation.x; attributes.y = widget->allocation.y; attributes.width = widget->allocation.width; attributes.height = widget->allocation.height; attributes_mask = GDK_WA_X | GDK_WA_Y | GDK_WA_VISUAL | GDK_WA_COLORMAP; attributes.window_type = GDK_WINDOW_CHILD; attributes.wclass = GDK_INPUT_OUTPUT; attributes.visual = gtk_widget_get_visual (widget); attributes.colormap = gtk_widget_get_colormap (widget); attributes.event_mask = gtk_widget_get_events (widget); attributes.event_mask |= (GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_BUTTON1_MOTION_MASK | GDK_BUTTON3_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_POINTER_MOTION_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK); widget->window = gdk_window_new (gtk_widget_get_parent_window (widget), &attributes, attributes_mask); gdk_window_set_user_data (widget->window, indicator); widget->style = gtk_style_attach (widget->style, widget->window); gtk_style_set_background (widget->style, widget->window, GTK_STATE_NORMAL); gtk_widget_queue_resize (widget); }
void ags_indicator_get_property(GObject *gobject, guint prop_id, GValue *value, GParamSpec *param_spec) { AgsIndicator *indicator; indicator = AGS_INDICATOR(gobject); switch(prop_id){ case PROP_ADJUSTMENT: g_value_set_object(value, indicator->adjustment); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } }
void ags_indicator_set_property(GObject *gobject, guint prop_id, const GValue *value, GParamSpec *param_spec) { AgsIndicator *indicator; indicator = AGS_INDICATOR(gobject); switch(prop_id){ case PROP_ADJUSTMENT: { GtkAdjustment *adjustment; adjustment = (GtkAdjustment *) g_value_get_object(value); if(indicator->adjustment == adjustment) return; if(indicator->adjustment != NULL){ g_object_unref(G_OBJECT(indicator->adjustment)); } if(adjustment != NULL){ g_object_ref(G_OBJECT(adjustment)); } indicator->adjustment = (GObject *) adjustment; } break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(gobject, prop_id, param_spec); break; } }
void ags_hindicator_draw(AgsHIndicator *indicator) { GtkWidget *widget; GtkAdjustment *adjustment; GtkStyle *indicator_style; cairo_t *cr; gdouble value; guint width, height; guint segment_width, segment_height; guint padding; guint i; static const gdouble white_gc = 65535.0; widget = GTK_WIDGET(indicator); indicator_style = gtk_widget_get_style(widget); adjustment = AGS_INDICATOR(indicator)->adjustment; if(adjustment == NULL){ return; } // g_message("draw %f\0", adjustment->value); cr = gdk_cairo_create(widget->window); if(cr == NULL){ return; } width = 100; height = 16; segment_width = 7; segment_height = height; padding = 3; cairo_surface_flush(cairo_get_target(cr)); cairo_push_group(cr); for(i = 0; i < width / (segment_width + padding); i++){ if(adjustment->value > 0.0 && (1.0 / adjustment->value * i < (width / (segment_width + padding)))){ /* active */ cairo_set_source_rgb(cr, indicator_style->light[0].red / white_gc, indicator_style->light[0].green / white_gc, indicator_style->light[0].blue / white_gc); }else{ /* normal */ cairo_set_source_rgb(cr, indicator_style->dark[0].red / white_gc, indicator_style->dark[0].green / white_gc, indicator_style->dark[0].blue / white_gc); } cairo_rectangle(cr, width - i * (segment_width + padding) - segment_width, 0, segment_width, segment_height); cairo_fill(cr); /* outline */ cairo_set_source_rgb(cr, indicator_style->fg[0].red / white_gc, indicator_style->fg[0].green / white_gc, indicator_style->fg[0].blue / white_gc); cairo_rectangle(cr, width - i * (segment_width + padding) - segment_width, 0, segment_width, segment_height); cairo_stroke(cr); } cairo_pop_group_to_source(cr); cairo_paint(cr); cairo_surface_mark_dirty(cairo_get_target(cr)); cairo_destroy(cr); }