Example #1
0
static void
gtk_level_bar_draw_fill_continuous (GtkLevelBar *self,
                                    cairo_t     *cr)
{
  gboolean inverted;

  inverted = gtk_level_bar_get_real_inverted (self);

  /* render the empty (unfilled) part */
  gtk_css_gadget_draw (self->priv->block_gadget[inverted ? 0 : 1], cr);

  /* now render the filled part on top of it */
  gtk_css_gadget_draw (self->priv->block_gadget[inverted ? 1 : 0], cr);
}
Example #2
0
static void
gtk_level_bar_snapshot_fill_continuous (GtkLevelBar *self,
                                        GtkSnapshot *snapshot)
{
  gboolean inverted;

  inverted = gtk_level_bar_get_real_inverted (self);

  /* render the empty (unfilled) part */
  gtk_css_gadget_snapshot (self->priv->block_gadget[inverted ? 0 : 1], snapshot);

  /* now render the filled part on top of it */
  gtk_css_gadget_snapshot (self->priv->block_gadget[inverted ? 1 : 0], snapshot);
}
Example #3
0
static void
gtk_level_bar_allocate_trough_continuous (GtkLevelBar *self,
                                          const GtkAllocation *allocation,
                                          int baseline,
                                          GtkAllocation *out_clip)
{
  GtkAllocation block_area, clip;
  gdouble fill_percentage;
  gboolean inverted;

  inverted = gtk_level_bar_get_real_inverted (self);

  /* allocate the empty (unfilled) part */
  block_area = *allocation;
  gtk_css_gadget_allocate (self->priv->block_gadget[inverted ? 0 : 1],
                           &block_area,
                           baseline,
                           out_clip);

  /* now allocate the filled part */
  block_area = *allocation;
  fill_percentage = (self->priv->cur_value - self->priv->min_value) /
    (self->priv->max_value - self->priv->min_value);

  if (self->priv->orientation == GTK_ORIENTATION_HORIZONTAL)
    {
      block_area.width = (gint) floor (block_area.width * fill_percentage);

      if (inverted)
        block_area.x += allocation->width - block_area.width;
    }
  else
    {
      block_area.height = (gint) floor (block_area.height * fill_percentage);

      if (inverted)
        block_area.y += allocation->height - block_area.height;
    }

  gtk_css_gadget_allocate (self->priv->block_gadget[inverted ? 1 : 0],
                           &block_area,
                           baseline,
                           &clip);
  gdk_rectangle_intersect (out_clip, &clip, out_clip);
}