static void mex_content_box_paint (ClutterActor *actor) { MexContentBoxPrivate *priv = MEX_CONTENT_BOX (actor)->priv; gboolean clipped = FALSE; CLUTTER_ACTOR_CLASS (mex_content_box_parent_class)->paint (actor); if (G_UNLIKELY (priv->clip_to_allocation)) { ClutterActorBox box; clutter_actor_get_allocation_box (actor, &box); cogl_clip_push_rectangle (0, 0, box.x2 - box.x1, box.y2 - box.y1); clipped = TRUE; } clutter_actor_paint (priv->tile); if (G_UNLIKELY (priv->extras_visible)) { ClutterActorBox box; clutter_actor_paint (priv->action_list); clutter_actor_paint (priv->info_panel); /* separator */ cogl_set_source_color4ub (255, 255, 255, 51); clutter_actor_get_allocation_box (priv->info_panel, &box); cogl_path_line (box.x1, box.y1, box.x2, box.y1); cogl_path_stroke (); } if (G_UNLIKELY (clipped)) cogl_clip_pop (); }
static VALUE rb_cogl_path_stroke (VALUE self) { cogl_path_stroke (); return Qnil; }
static void draw_shapes (gint x, gint y) { path_shapes (x, y, 300, 100); cogl_set_source_color4ub (0x00, 0x00, 0xff, 0xff); cogl_path_fill_preserve (); cogl_set_source_color4ub (0xff, 0x00, 0x00, 0xff); cogl_path_stroke (); }
static void test_coglbox_paint(ClutterActor *self) { TestCoglboxPrivate *priv; ClutterColor cfill; ClutterColor cstroke; static GTimer *timer = NULL; static gint paint_index = 0; gint NUM_PAINT_FUNCS; NUM_PAINT_FUNCS = G_N_ELEMENTS (paint_func); priv = TEST_COGLBOX_GET_PRIVATE (self); if (!timer) { timer = g_timer_new (); g_timer_start (timer); } if (g_timer_elapsed (timer, NULL) >= 1) { paint_index += 1; paint_index = paint_index % NUM_PAINT_FUNCS; g_timer_start (timer); } cfill.red = 0; cfill.green = 160; cfill.blue = 0; cfill.alpha = 255; cstroke.red = 200; cstroke.green = 0; cstroke.blue = 0; cstroke.alpha = 255; cogl_push_matrix (); paint_func[paint_index] (); cogl_translate (100,100,0); cogl_color (&cstroke); cogl_path_stroke (); cogl_translate (150,0,0); cogl_color (&cfill); cogl_path_fill (); cogl_pop_matrix(); }
void cs_selected_paint (void) { ClutterVertex verts[4]; /* draw outlines for actors */ GHashTableIter iter; gpointer key, value; { { if (cs->fake_stage) { cogl_set_source_color4ub (0, 255, 0, 255); cs_draw_actor_outline (cs->fake_stage, NULL); } } } cogl_set_source_color4ub (255, 0, 0, 128); cs_selected_foreach (G_CALLBACK (cs_draw_actor_outline), NULL); g_hash_table_iter_init (&iter, selection); while (g_hash_table_iter_next (&iter, &key, &value)) { clutter_actor_get_abs_allocation_vertices (key, verts); cogl_set_source_color4ub (0, 0, 25, 50); { { gfloat coords[]={ verts[0].x, verts[0].y, verts[1].x, verts[1].y, verts[3].x, verts[3].y, verts[2].x, verts[2].y, verts[0].x, verts[0].y }; cogl_path_polyline (coords, 5); cogl_set_source_color4ub (0, 0, 255, 128); cogl_path_stroke (); } } } }
static void on_paint (ClutterActor *actor, CallbackData *data) { int i; ClutterGeometry stage_size; gint hand_width, hand_height; GSList *node; clutter_actor_get_allocation_geometry (data->stage, &stage_size); hand_width = cogl_texture_get_width (data->hand); hand_height = cogl_texture_get_height (data->hand); /* Setup the clipping */ for (node = data->clips; node; node = node->next) { Clip *clip = (Clip *) node->data; if (clip->type == CLIP_RECTANGLE) cogl_clip_push_rectangle (clip->x1, clip->y1, clip->x2, clip->y2); else if (clip->type == CLIP_ROTATED_RECTANGLE) { float size = MIN (ABS (clip->x2 - clip->x1), ABS (clip->y2 - clip->y1)); int cx = (clip->x1 + clip->x2) / 2; int cy = (clip->y1 + clip->y2) / 2; size = sqrtf ((size / 2) * (size / 2) * 2); cogl_push_matrix (); /* Rotate 45° about the centre point */ cogl_translate (cx, cy, 0.0f); cogl_rotate (45.0f, 0.0f, 0.0f, 1.0f); cogl_clip_push_rectangle (-size / 2, -size / 2, size / 2, size / 2); cogl_pop_matrix (); } else { make_clip_path (clip); cogl_clip_push_from_path (); } } /* Draw a rectangle filling the entire stage */ cogl_set_source_color4ub (0x80, 0x80, 0xff, 0xff); cogl_rectangle (0, 0, stage_size.width, stage_size.height); draw_shapes (10, 10); /* Draw the hand at different rotations */ for (i = -2; i <= 2; i++) { cogl_push_matrix (); cogl_translate (stage_size.width / 2 + stage_size.width / 6 * i, stage_size.height / 2, 0); cogl_rotate (i * 40, 0, 1, 0); cogl_set_source_color4ub (0xff, 0xff, 0xff, 0xff); cogl_set_source_texture (data->hand); cogl_rectangle_with_texture_coords ((-hand_width / 2), (-hand_height / 2), (hand_width / 2), (hand_height / 2), 0, 0, 1, 1); cogl_pop_matrix (); } draw_shapes (stage_size.width - 310, stage_size.height - 110); /* Remove all of the clipping */ g_slist_foreach (data->clips, (GFunc) cogl_clip_pop, NULL); /* Draw the bounding box for each of the clips */ for (node = data->clips; node; node = node->next) { Clip *clip = (Clip *) node->data; make_clip_path (clip); cogl_set_source_color4ub (0x00, 0x00, 0xff, 0xff); cogl_path_stroke (); } /* Draw the bounding box for the pending new clip */ if (data->current_clip.type != CLIP_NONE) { make_clip_path (&data->current_clip); cogl_set_source_color4ub (0xff, 0x00, 0x00, 0xff); cogl_path_stroke (); } }