* clutter/cogl/cogl.h.in: renaming of API's in cogl to make the

primitives and path API a bit smaller and more resembling cairo.
* clutter/cogl/gl/cogl-primitives.c:
* clutter/cogl/gles/cogl-primitives.c:
* clutter/cogl/gles/cogl.c:
* clutter/clutter-actor.c:
* clutter/clutter-rectangle.c:
* tests/test-cogl-offscreen.c:
* tests/test-cogl-primitives.c:
* tests/test-cogl-tex-convert.c:
* tests/test-cogl-tex-foreign.c:
* tests/test-cogl-tex-getset.c:
* tests/test-cogl-tex-tile.c: updated according to changes in cogl.
This commit is contained in:
Øyvind Kolås 2008-04-29 15:41:34 +00:00
parent c90df4d4a0
commit 83e2861614
13 changed files with 335 additions and 572 deletions

View File

@ -1,3 +1,20 @@
2008-04-29 Øyvind Kolås <pippin@o-hand.com>
* clutter/cogl/cogl.h.in: renaming of API's in cogl to make the
primitives and path API a bit smaller and more resembling cairo.
* clutter/cogl/gl/cogl-primitives.c:
* clutter/cogl/gles/cogl-primitives.c:
* clutter/cogl/gles/cogl.c:
* clutter/clutter-actor.c:
* clutter/clutter-rectangle.c:
* tests/test-cogl-offscreen.c:
* tests/test-cogl-primitives.c:
* tests/test-cogl-tex-convert.c:
* tests/test-cogl-tex-foreign.c:
* tests/test-cogl-tex-getset.c:
* tests/test-cogl-tex-tile.c: updated according to changes in cogl.
2008-04-29 Robert Bragg <bob@o-hand.com> 2008-04-29 Robert Bragg <bob@o-hand.com>
* clutter/x11/clutter-x11-texture-pixmap.c: * clutter/x11/clutter-x11-texture-pixmap.c:

View File

@ -488,10 +488,9 @@ clutter_actor_real_pick (ClutterActor *self,
if (clutter_actor_should_pick_paint (self)) if (clutter_actor_should_pick_paint (self))
{ {
cogl_color (color); cogl_color (color);
cogl_fast_fill_rectangle (0, cogl_rectangle (0, 0,
0, clutter_actor_get_width(self),
clutter_actor_get_width(self), clutter_actor_get_height(self));
clutter_actor_get_height(self));
} }
} }

View File

@ -101,22 +101,22 @@ clutter_rectangle_paint (ClutterActor *self)
cogl_color (&tmp_col); cogl_color (&tmp_col);
/* this sucks, but it's the only way to make a border */ /* this sucks, but it's the only way to make a border */
cogl_fast_fill_rectangle (priv->border_width, 0, cogl_rectangle (priv->border_width, 0,
geom.width - priv->border_width, geom.width - priv->border_width,
priv->border_width); priv->border_width);
cogl_fast_fill_rectangle (geom.width - priv->border_width, cogl_rectangle (geom.width - priv->border_width,
priv->border_width, priv->border_width,
priv->border_width, priv->border_width,
geom.height - priv->border_width); geom.height - priv->border_width);
cogl_fast_fill_rectangle (0, geom.height - priv->border_width, cogl_rectangle (0, geom.height - priv->border_width,
geom.width - priv->border_width, geom.width - priv->border_width,
priv->border_width); priv->border_width);
cogl_fast_fill_rectangle (0, 0, cogl_rectangle (0, 0,
priv->border_width, priv->border_width,
geom.height - priv->border_width); geom.height - priv->border_width);
tmp_col.red = priv->color.red; tmp_col.red = priv->color.red;
tmp_col.green = priv->color.green; tmp_col.green = priv->color.green;
@ -124,10 +124,10 @@ clutter_rectangle_paint (ClutterActor *self)
cogl_color (&tmp_col); cogl_color (&tmp_col);
cogl_fast_fill_rectangle (priv->border_width, cogl_rectangle (priv->border_width,
priv->border_width, priv->border_width,
geom.width - priv->border_width * 2, geom.width - priv->border_width * 2,
geom.height - priv->border_width * 2); geom.height - priv->border_width * 2);
} }
else else
{ {
@ -138,7 +138,7 @@ clutter_rectangle_paint (ClutterActor *self)
cogl_color (&tmp_col); cogl_color (&tmp_col);
cogl_fast_fill_rectangle (0, 0, geom.width, geom.height); cogl_rectangle (0, 0, geom.width, geom.height);
} }
cogl_pop_matrix(); cogl_pop_matrix();

View File

@ -892,9 +892,9 @@ void cogl_texture_rectangle (CoglHandle handle,
* to CGL_NEAREST. * to CGL_NEAREST.
*/ */
void cogl_texture_polygon (CoglHandle handle, void cogl_texture_polygon (CoglHandle handle,
guint n_vertices, guint n_vertices,
CoglTextureVertex *vertices, CoglTextureVertex *vertices,
gboolean use_color); gboolean use_color);
/* Primitives API */ /* Primitives API */
@ -933,7 +933,7 @@ void cogl_color (const ClutterColor *color);
/** /**
* cogl_fast_fill_rectangle: * cogl_rectangle:
* @x: X coordinate of the top-left corner * @x: X coordinate of the top-left corner
* @y: Y coordinate of the top-left corner * @y: Y coordinate of the top-left corner
* @width: Width of the rectangle * @width: Width of the rectangle
@ -942,13 +942,13 @@ void cogl_color (const ClutterColor *color);
* Fills a rectangle at the given coordinates with the current * Fills a rectangle at the given coordinates with the current
* drawing color in a highly optimizied fashion. * drawing color in a highly optimizied fashion.
**/ **/
void cogl_fast_fill_rectangle (gint x, void cogl_rectangle (gint x,
gint y, gint y,
guint width, guint width,
guint height); guint height);
/** /**
* cogl_fast_fill_rectanglex: * cogl_rectanglex:
* @x: X coordinate of the top-left corner * @x: X coordinate of the top-left corner
* @y: Y coordinate of the top-left corner * @y: Y coordinate of the top-left corner
* @width: Width of the rectangle * @width: Width of the rectangle
@ -956,13 +956,13 @@ void cogl_fast_fill_rectangle (gint x,
* *
* A fixed-point version of cogl_fast_fill_rectangle. * A fixed-point version of cogl_fast_fill_rectangle.
**/ **/
void cogl_fast_fill_rectanglex (ClutterFixed x, void cogl_rectanglex (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height); ClutterFixed height);
#if 0
/** /**
* cogl_fast_fill_trapezoid: * cogl_trapezoid:
* @y1: Y coordinate of the top two vertices. * @y1: Y coordinate of the top two vertices.
* @x11: X coordinate of the top-left vertex. * @x11: X coordinate of the top-left vertex.
* @x21: X coordinate of the top-right vertex. * @x21: X coordinate of the top-right vertex.
@ -973,15 +973,15 @@ void cogl_fast_fill_rectanglex (ClutterFixed x,
* Fills a trapezoid at the given coordinates with the current * Fills a trapezoid at the given coordinates with the current
* drawing color in a highly optimized fashion. * drawing color in a highly optimized fashion.
**/ **/
void cogl_fast_fill_trapezoid (gint y1, void cogl_trapezoid (gint y1,
gint x11, gint x11,
gint x21, gint x21,
gint y2, gint y2,
gint x12, gint x12,
gint x22); gint x22);
/** /**
* cogl_fast_fill_trapezoidx: * cogl_trapezoidx:
* @y1: Y coordinate of the top two vertices. * @y1: Y coordinate of the top two vertices.
* @x11: X coordinate of the top-left vertex. * @x11: X coordinate of the top-left vertex.
* @x21: X coordinate of the top-right vertex. * @x21: X coordinate of the top-right vertex.
@ -989,30 +989,31 @@ void cogl_fast_fill_trapezoid (gint y1,
* @x12: X coordinate of the bottom-left vertex. * @x12: X coordinate of the bottom-left vertex.
* @x22: X coordinate of the bottom-right vertex. * @x22: X coordinate of the bottom-right vertex.
* *
* A fixed-point version of cogl_fast_fill_trapezoid. * A fixed-point version of cogl_trapezoid.
**/ **/
void cogl_fast_fill_trapezoidx (ClutterFixed y1, void cogl_trapezoidx (ClutterFixed y1,
ClutterFixed x11, ClutterFixed x11,
ClutterFixed x21, ClutterFixed x21,
ClutterFixed y2, ClutterFixed y2,
ClutterFixed x12, ClutterFixed x12,
ClutterFixed x22); ClutterFixed x22);
#endif
/** /**
* cogl_fill: * cogl_path_fill:
* *
* Fills the constructed shape using the current drawing color. * Fills the constructed shape using the current drawing color.
**/ **/
void cogl_fill (void); void cogl_path_fill (void);
/** /**
* cogl_stroke: * cogl_path_stroke:
* *
* Strokes the constructed shape using the current drawing color * Strokes the constructed shape using the current drawing color
* and a width of 1 pixel (regardless of the current transformation * and a width of 1 pixel (regardless of the current transformation
* matrix). * matrix).
**/ **/
void cogl_stroke (void); void cogl_path_stroke (void);
/** /**
@ -1023,12 +1024,12 @@ void cogl_stroke (void);
* Clears the previously constructed shape and begins a new path * Clears the previously constructed shape and begins a new path
* contour by moving the pen to the given coordinates. * contour by moving the pen to the given coordinates.
**/ **/
void cogl_path_move_to (ClutterFixed x, void cogl_path_move_to (ClutterFixed x,
ClutterFixed y); ClutterFixed y);
/** /**
* cogl_path_move_to_rel: * cogl_path_rel_move_to:
* @x: X offset from the current pen location to move the pen to. * @x: X offset from the current pen location to move the pen to.
* @y: Y offset from the current pen location to move the pen to. * @y: Y offset from the current pen location to move the pen to.
* *
@ -1036,8 +1037,8 @@ void cogl_path_move_to (ClutterFixed x,
* contour by moving the pen to the given coordinates relative * contour by moving the pen to the given coordinates relative
* to the current pen location. * to the current pen location.
**/ **/
void cogl_path_move_to_rel (ClutterFixed x, void cogl_path_rel_move_to (ClutterFixed x,
ClutterFixed y); ClutterFixed y);
/** /**
* cogl_path_line_to: * cogl_path_line_to:
@ -1047,57 +1048,19 @@ void cogl_path_move_to_rel (ClutterFixed x,
* Adds a straight line segment to the current path that ends at the * Adds a straight line segment to the current path that ends at the
* given coordinates. * given coordinates.
**/ **/
void cogl_path_line_to (ClutterFixed x, void cogl_path_line_to (ClutterFixed x,
ClutterFixed y); ClutterFixed y);
/** /**
* cogl_path_line_to_rel: * cogl_path_rel_line_to:
* @x: X offset from the current pen location of the end line vertex * @x: X offset from the current pen location of the end line vertex
* @y: Y offset from the current pen location of the end line vertex * @y: Y offset from the current pen location of the end line vertex
* *
* Adds a straight line segment to the current path that ends at the * Adds a straight line segment to the current path that ends at the
* given coordinates relative to the current pen location. * given coordinates relative to the current pen location.
**/ **/
void cogl_path_line_to_rel (ClutterFixed x, void cogl_path_rel_line_to (ClutterFixed x,
ClutterFixed y); ClutterFixed y);
/**
* cogl_path_h_line_to:
* @x: X coordinate of the end line vertex
*
* Adds a straight horizontal line segment to the current path that
* ends at the given X coordinate and current pen Y coordinate.
**/
void cogl_path_h_line_to (ClutterFixed x);
/**
* cogl_path_v_line_to:
* @y: Y coordinate of the end line vertex
*
* Adds a stright vertical line segment to the current path that ends
* at the current pen X coordinate and the given Y coordinate.
**/
void cogl_path_v_line_to (ClutterFixed y);
/**
* cogl_path_h_line_to_rel:
* @x: X offset from the current pen location of the end line vertex
*
* Adds a straight horizontal line segment to the current path that
* ends at the given X coordinate relative to the current pen location
* and current pen Y coordinate.
**/
void cogl_path_h_line_to_rel (ClutterFixed x);
/**
* cogl_path_v_line_to_rel:
* @y: Y offset from the current pen location of the end line vertex
*
* Adds a stright vertical line segment to the current path that ends
* at the current pen X coordinate and the given Y coordinate relative
* to the current pen location.
**/
void cogl_path_v_line_to_rel (ClutterFixed y);
/** /**
@ -1108,7 +1071,6 @@ void cogl_path_v_line_to_rel (ClutterFixed y);
* @radius_y: Y radious of the elliptical arc * @radius_y: Y radious of the elliptical arc
* @angle_1: Angle in the unit-circle at which the arc begin * @angle_1: Angle in the unit-circle at which the arc begin
* @angle_2: Angle in the unit-circle at which the arc ends * @angle_2: Angle in the unit-circle at which the arc ends
* @angle_step: Angle increment resolution for subdivision
* *
* Adds an elliptical arc segment to the current path. A straight line * Adds an elliptical arc segment to the current path. A straight line
* segment will link the current pen location with the first vertex * segment will link the current pen location with the first vertex
@ -1119,69 +1081,12 @@ void cogl_path_arc (ClutterFixed center_x,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_1, ClutterAngle angle_1,
ClutterAngle angle_2, ClutterAngle angle_2);
ClutterAngle angle_step);
/**
* cogl_path_arc_rel:
* @center_x: X offset from the current pen location of the elliptical
* arc center
* @center_y: Y offset from the current pen location of the elliptical
* arc center
* @radius_x: X radius of the elliptical arc
* @radius_y: Y radious of the elliptical arc
* @angle_1: Angle in the unit-circle at which the arc begin
* @angle_2: Angle in the unit-circle at which the arc ends
* @angle_step: Angle increment resolution for subdivision
*
* Adds an elliptical arc segment to the current path. A straight line
* segment will link the current pen location with the first vertex
* of the arc.
**/
void cogl_path_arc_rel (ClutterFixed center_x,
ClutterFixed center_y,
ClutterFixed radius_x,
ClutterFixed radius_y,
ClutterAngle angle_1,
ClutterAngle angle_2,
ClutterAngle angle_step);
/**
* cogl_path_bezier2_to:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
*
* Adds a quadratic bezier curve segment to the current path with the given
* second and third control points and using current pen location as the
* first control point.
**/
void cogl_path_bezier2_to (ClutterFixed x1,
ClutterFixed y1,
ClutterFixed x2,
ClutterFixed y2);
/** /**
* cogl_path_bezier2_to_rel: * cogl_path_curve_to:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
*
* Adds a quadratic bezier curve segment to the current path with the given
* second and third control points and using current pen location as the
* first control point. The given coordinates are relative to the current
* pen location.
**/
void cogl_path_bezier2_to_rel (ClutterFixed x1,
ClutterFixed y1,
ClutterFixed x2,
ClutterFixed y2);
/**
* cogl_path_bezier3_to:
* @x1: X coordinate of the second bezier control point * @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point * @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point * @x2: X coordinate of the third bezier control point
@ -1193,7 +1098,7 @@ void cogl_path_bezier2_to_rel (ClutterFixed x1,
* second, third and fourth control points and using current pen location * second, third and fourth control points and using current pen location
* as the first control point. * as the first control point.
**/ **/
void cogl_path_bezier3_to (ClutterFixed x1, void cogl_path_curve_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
@ -1201,7 +1106,7 @@ void cogl_path_bezier3_to (ClutterFixed x1,
ClutterFixed y3); ClutterFixed y3);
/** /**
* cogl_path_bezier3_to_rel: * cogl_path_rel_curve_to:
* @x1: X coordinate of the second bezier control point * @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point * @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point * @x2: X coordinate of the third bezier control point
@ -1214,7 +1119,7 @@ void cogl_path_bezier3_to (ClutterFixed x1,
* as the first control point. The given coordinates are relative to the * as the first control point. The given coordinates are relative to the
* current pen location. * current pen location.
*/ */
void cogl_path_bezier3_to_rel (ClutterFixed x1, void cogl_path_rel_curve_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
@ -1230,7 +1135,7 @@ void cogl_path_bezier3_to_rel (ClutterFixed x1,
void cogl_path_close (void); void cogl_path_close (void);
/** /**
* cogl_line: * cogl_path_line:
* @x1: X coordinate of the start line vertex * @x1: X coordinate of the start line vertex
* @y1: Y coordinate of the start line vertex * @y1: Y coordinate of the start line vertex
* @x2: X coordinate of the end line vertex * @x2: X coordinate of the end line vertex
@ -1239,13 +1144,13 @@ void cogl_path_close (void);
* Clears the previously constructed shape and constructs a straight * Clears the previously constructed shape and constructs a straight
* line shape start and ending at the given coordinates. * line shape start and ending at the given coordinates.
**/ **/
void cogl_line (ClutterFixed x1, void cogl_path_line (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2); ClutterFixed y2);
/** /**
* cogl_polyline: * cogl_path_polyline:
* @coords: A pointer to the first element of an array of fixed-point * @coords: A pointer to the first element of an array of fixed-point
* values that specify the vertex coordinates. * values that specify the vertex coordinates.
* @num_points: The total number of vertices. * @num_points: The total number of vertices.
@ -1261,12 +1166,12 @@ void cogl_line (ClutterFixed x1,
* fashion for the rest of the vertices. (num_points - 1) segments will * fashion for the rest of the vertices. (num_points - 1) segments will
* be constructed. * be constructed.
**/ **/
void cogl_polyline (ClutterFixed *coords, void cogl_path_polyline (ClutterFixed *coords,
gint num_points); gint num_points);
/** /**
* cogl_polygon: * cogl_path_polygon:
* @coords: A pointer to the first element of an array of fixed-point * @coords: A pointer to the first element of an array of fixed-point
* values that specify the vertex coordinates. * values that specify the vertex coordinates.
* @num_points: The total number of vertices. * @num_points: The total number of vertices.
@ -1279,12 +1184,12 @@ void cogl_polyline (ClutterFixed *coords,
* represents the Y coordinate of the first vertex, continuing in the same * represents the Y coordinate of the first vertex, continuing in the same
* fashion for the rest of the vertices. * fashion for the rest of the vertices.
**/ **/
void cogl_polygon (ClutterFixed *coords, void cogl_path_polygon (ClutterFixed *coords,
gint num_points); gint num_points);
/** /**
* cogl_rectangle: * cogl_path_rectangle:
* @x: X coordinate of the top-left corner. * @x: X coordinate of the top-left corner.
* @y: Y coordinate of the top-left corner. * @y: Y coordinate of the top-left corner.
* @width: Rectangle width. * @width: Rectangle width.
@ -1293,35 +1198,13 @@ void cogl_polygon (ClutterFixed *coords,
* Clears the previously constructed shape and constructs a rectangular * Clears the previously constructed shape and constructs a rectangular
* shape at the given coordinates. * shape at the given coordinates.
**/ **/
void cogl_rectangle (ClutterFixed x, void cogl_path_rectangle (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height); ClutterFixed height);
/** /**
* cogl_arc: * cogl_path_ellipse:
* @center_x: X coordinate of the elliptical arc center
* @center_y: Y coordinate of the elliptical arc center
* @radius_x: X radius of the elliptical arc
* @radius_y: Y radious of the elliptical arc
* @angle_1: Angle in the unit-circle at which the arc begin
* @angle_2: Angle in the unit-circle at which the arc ends
* @angle_step: Angle increment resolution for subdivision
*
* Clears the previously constructed shape and constructs and elliptical arc
* shape.
**/
void cogl_arc (ClutterFixed center_x,
ClutterFixed center_y,
ClutterFixed radius_x,
ClutterFixed radius_y,
ClutterAngle angle_1,
ClutterAngle angle_2,
ClutterAngle angle_step);
/**
* cogl_ellipse:
* @center_x: X coordinate of the ellipse center * @center_x: X coordinate of the ellipse center
* @center_y: Y coordinate of the ellipse center * @center_y: Y coordinate of the ellipse center
* @radius_x: X radius of the ellipse * @radius_x: X radius of the ellipse
@ -1331,15 +1214,14 @@ void cogl_arc (ClutterFixed center_x,
* Clears the previously constructed shape and constructs an ellipse * Clears the previously constructed shape and constructs an ellipse
* shape. * shape.
**/ **/
void cogl_ellipse (ClutterFixed center_x, void cogl_path_ellipse (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_step); ClutterAngle angle_step);
/** /**
* cogl_round_rectangle: * cogl_path_round_rectangle:
* @x: X coordinate of the top-left corner * @x: X coordinate of the top-left corner
* @y: Y coordinate of the top-left corner * @y: Y coordinate of the top-left corner
* @width: Width of the rectangle * @width: Width of the rectangle
@ -1351,7 +1233,7 @@ void cogl_ellipse (ClutterFixed center_x,
* Clears the previously constructed shape and constructs a rectangular * Clears the previously constructed shape and constructs a rectangular
* shape with rounded corners. * shape with rounded corners.
**/ **/
void cogl_round_rectangle (ClutterFixed x, void cogl_path_round_rectangle (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height, ClutterFixed height,
@ -1539,7 +1421,7 @@ void cogl_offscreen_unref (CoglHandle handle);
* *
*/ */
void cogl_offscreen_blit (CoglHandle src_buffer, void cogl_offscreen_blit (CoglHandle src_buffer,
CoglHandle dst_buffer); CoglHandle dst_buffer);
/** /**
* cogl_offscreen_blit_region: * cogl_offscreen_blit_region:

View File

@ -37,10 +37,10 @@
#define _COGL_MAX_BEZ_RECURSE_DEPTH 16 #define _COGL_MAX_BEZ_RECURSE_DEPTH 16
void void
cogl_fast_fill_rectangle (gint x, cogl_rectangle (gint x,
gint y, gint y,
guint width, guint width,
guint height) guint height)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -52,10 +52,10 @@ cogl_fast_fill_rectangle (gint x,
void void
cogl_fast_fill_rectanglex (ClutterFixed x, cogl_rectanglex (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height) ClutterFixed height)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -68,13 +68,14 @@ cogl_fast_fill_rectanglex (ClutterFixed x,
CLUTTER_FIXED_TO_FLOAT (y + height)) ); CLUTTER_FIXED_TO_FLOAT (y + height)) );
} }
#if 0
void void
cogl_fast_fill_trapezoid (gint y1, cogl_trapezoid (gint y1,
gint x11, gint x11,
gint x21, gint x21,
gint y2, gint y2,
gint x12, gint x12,
gint x22) gint x22)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -90,12 +91,12 @@ cogl_fast_fill_trapezoid (gint y1,
} }
void void
cogl_fast_fill_trapezoidx (ClutterFixed y1, cogl_trapezoidx (ClutterFixed y1,
ClutterFixed x11, ClutterFixed x11,
ClutterFixed x21, ClutterFixed x21,
ClutterFixed y2, ClutterFixed y2,
ClutterFixed x12, ClutterFixed x12,
ClutterFixed x22) ClutterFixed x22)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -114,6 +115,7 @@ cogl_fast_fill_trapezoidx (ClutterFixed y1,
CLUTTER_FIXED_TO_FLOAT (y2)) ); CLUTTER_FIXED_TO_FLOAT (y2)) );
GE( glEnd () ); GE( glEnd () );
} }
#endif
static void static void
_cogl_path_clear_nodes () _cogl_path_clear_nodes ()
@ -197,8 +199,7 @@ _cogl_path_fill_nodes ()
GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ); GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) );
cogl_enable (COGL_ENABLE_VERTEX_ARRAY cogl_enable (COGL_ENABLE_VERTEX_ARRAY
| (ctx->color_alpha < 255 | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0));
? COGL_ENABLE_BLEND : 0));
GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) ); GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) );
GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) ); GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) );
@ -212,7 +213,7 @@ _cogl_path_fill_nodes ()
bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x); bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x);
bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y); bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y);
cogl_fast_fill_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); cogl_rectangle (bounds_x, bounds_y, bounds_w, bounds_h);
GE( glDisable (GL_STENCIL_TEST) ); GE( glDisable (GL_STENCIL_TEST) );
} }
@ -242,7 +243,7 @@ cogl_stroke ()
void void
cogl_path_move_to (ClutterFixed x, cogl_path_move_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -258,18 +259,18 @@ cogl_path_move_to (ClutterFixed x,
} }
void void
cogl_path_move_to_rel (ClutterFixed x, cogl_path_rel_move_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_move_to (ctx->path_pen.x + x, cogl_path_move_to (ctx->path_pen.x + x,
ctx->path_pen.y + y); ctx->path_pen.y + y);
} }
void void
cogl_path_line_to (ClutterFixed x, cogl_path_line_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -280,52 +281,15 @@ cogl_path_line_to (ClutterFixed x,
} }
void void
cogl_path_line_to_rel (ClutterFixed x, cogl_path_rel_line_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x + x, cogl_path_line_to (ctx->path_pen.x + x,
ctx->path_pen.y + y); ctx->path_pen.y + y);
} }
void
cogl_path_h_line_to (ClutterFixed x)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (x,
ctx->path_pen.y);
}
void
cogl_path_v_line_to (ClutterFixed y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x,
y);
}
void
cogl_path_h_line_to_rel (ClutterFixed x)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x + x,
ctx->path_pen.y);
}
void
cogl_path_v_line_to_rel (ClutterFixed y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x,
ctx->path_pen.y + y);
}
void void
cogl_path_close () cogl_path_close ()
{ {
@ -367,10 +331,10 @@ cogl_polygon (ClutterFixed *coords,
} }
void void
cogl_rectangle (ClutterFixed x, cogl_path_rectangle (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height) ClutterFixed height)
{ {
cogl_path_move_to (x, y); cogl_path_move_to (x, y);
cogl_path_line_to (x + width, y); cogl_path_line_to (x + width, y);
@ -430,13 +394,13 @@ _cogl_arc (ClutterFixed center_x,
void void
cogl_path_arc (ClutterFixed center_x, cogl_path_arc (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_1, ClutterAngle angle_1,
ClutterAngle angle_2, ClutterAngle angle_2)
ClutterAngle angle_step)
{ {
ClutterAngle angle_step = 10;
_cogl_arc (center_x, center_y, _cogl_arc (center_x, center_y,
radius_x, radius_y, radius_x, radius_y,
angle_1, angle_2, angle_1, angle_2,
@ -462,16 +426,15 @@ cogl_path_arc_rel (ClutterFixed center_x,
angle_step, 0 /* no move */); angle_step, 0 /* no move */);
} }
void void
cogl_arc (ClutterFixed center_x, cogl_arc (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_1, ClutterAngle angle_1,
ClutterAngle angle_2, ClutterAngle angle_2)
ClutterAngle angle_step)
{ {
ClutterAngle angle_step = 10;
_cogl_arc (center_x, center_y, _cogl_arc (center_x, center_y,
radius_x, radius_y, radius_x, radius_y,
angle_1, angle_2, angle_1, angle_2,
@ -482,9 +445,9 @@ void
cogl_ellipse (ClutterFixed center_x, cogl_ellipse (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y)
ClutterAngle angle_step)
{ {
ClutterAngle angle_step = 10;
/* FIXME: if shows to be slow might be optimized /* FIXME: if shows to be slow might be optimized
* by mirroring just a quarter of it */ * by mirroring just a quarter of it */
@ -505,6 +468,7 @@ cogl_round_rectangle (ClutterFixed x,
ClutterFixed radius, ClutterFixed radius,
ClutterAngle arc_step) ClutterAngle arc_step)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
ClutterFixed inner_width = width - (radius << 1); ClutterFixed inner_width = width - (radius << 1);
ClutterFixed inner_height = height - (radius << 1); ClutterFixed inner_height = height - (radius << 1);
@ -515,21 +479,25 @@ cogl_round_rectangle (ClutterFixed x,
CLUTTER_ANGLE_FROM_DEG (270), CLUTTER_ANGLE_FROM_DEG (270),
arc_step); arc_step);
cogl_path_h_line_to_rel (inner_width); cogl_path_line_to (ctx->path_pen.x + inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, radius, cogl_path_arc_rel (0, radius,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (-90), CLUTTER_ANGLE_FROM_DEG (-90),
CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (0),
arc_step); arc_step);
cogl_path_v_line_to_rel (inner_height); cogl_path_line_to (ctx->path_pen.x,
ctx->path_pen.y + inner_height);
cogl_path_arc_rel (-radius, 0, cogl_path_arc_rel (-radius, 0,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (0),
CLUTTER_ANGLE_FROM_DEG (90), CLUTTER_ANGLE_FROM_DEG (90),
arc_step); arc_step);
cogl_path_h_line_to_rel (-inner_width); cogl_path_line_to (ctx->path_pen.x - inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, -radius, cogl_path_arc_rel (0, -radius,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (90), CLUTTER_ANGLE_FROM_DEG (90),
@ -539,6 +507,7 @@ cogl_round_rectangle (ClutterFixed x,
cogl_path_close (); cogl_path_close ();
} }
#if 0
static void static void
_cogl_path_bezier2_sub (CoglBezQuad *quad) _cogl_path_bezier2_sub (CoglBezQuad *quad)
{ {
@ -604,6 +573,7 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
qright->p3 = q->p3; qright->p3 = q->p3;
} }
} }
#endif
static void static void
_cogl_path_bezier3_sub (CoglBezCubic *cubic) _cogl_path_bezier3_sub (CoglBezCubic *cubic)
@ -696,6 +666,7 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
} }
} }
#if 0
void void
cogl_path_bezier2_to (ClutterFixed x1, cogl_path_bezier2_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
@ -720,15 +691,15 @@ cogl_path_bezier2_to (ClutterFixed x1,
_cogl_path_add_node (quad.p3.x, quad.p3.y); _cogl_path_add_node (quad.p3.x, quad.p3.y);
ctx->path_pen = quad.p3; ctx->path_pen = quad.p3;
} }
#endif
void void
cogl_path_bezier3_to (ClutterFixed x1, cogl_path_curve_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
ClutterFixed x3, ClutterFixed x3,
ClutterFixed y3) ClutterFixed y3)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -752,21 +723,7 @@ cogl_path_bezier3_to (ClutterFixed x1,
} }
void void
cogl_path_bezier2_to_rel (ClutterFixed x1, cogl_rel_curve_to (ClutterFixed x1,
ClutterFixed y1,
ClutterFixed x2,
ClutterFixed y2)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_bezier2_to (ctx->path_pen.x + x1,
ctx->path_pen.y + y2,
ctx->path_pen.x + x2,
ctx->path_pen.y + y2);
}
void
cogl_path_bezier3_to_rel (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
@ -775,10 +732,10 @@ cogl_path_bezier3_to_rel (ClutterFixed x1,
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_bezier3_to (ctx->path_pen.x + x1, cogl_path_curve_to (ctx->path_pen.x + x1,
ctx->path_pen.y + y2, ctx->path_pen.y + y2,
ctx->path_pen.x + x2, ctx->path_pen.x + x2,
ctx->path_pen.y + y2, ctx->path_pen.y + y2,
ctx->path_pen.x + x3, ctx->path_pen.x + x3,
ctx->path_pen.y + y3); ctx->path_pen.y + y3);
} }

View File

@ -37,10 +37,10 @@
#define _COGL_MAX_BEZ_RECURSE_DEPTH 16 #define _COGL_MAX_BEZ_RECURSE_DEPTH 16
void void
cogl_fast_fill_rectangle (gint x, cogl_rectangle (gint x,
gint y, gint y,
guint width, guint width,
guint height) guint height)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -54,20 +54,19 @@ cogl_fast_fill_rectangle (gint x,
(GLshort) x, (GLshort) (y + height), (GLshort) x, (GLshort) (y + height),
(GLshort) (x + width), (GLshort) (y + height) (GLshort) (x + width), (GLshort) (y + height)
}; };
cogl_enable (COGL_ENABLE_VERTEX_ARRAY cogl_enable (COGL_ENABLE_VERTEX_ARRAY
| (ctx->color_alpha < 255 | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0));
? COGL_ENABLE_BLEND : 0)); GE ( glVertexPointer (2, GL_SHORT, 0, rect_verts ) );
GE ( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) );
GE( glVertexPointer (2, GL_SHORT, 0, rect_verts) );
GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) );
} }
void void
cogl_fast_fill_rectanglex (ClutterFixed x, cogl_rectanglex (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height) ClutterFixed height)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -77,64 +76,64 @@ cogl_fast_fill_rectanglex (ClutterFixed x,
x, y + height, x, y + height,
x + width, y + height x + width, y + height
}; };
cogl_enable (COGL_ENABLE_VERTEX_ARRAY cogl_enable (COGL_ENABLE_VERTEX_ARRAY
| (ctx->color_alpha < 255 | (ctx->color_alpha < 255
? COGL_ENABLE_BLEND : 0)); ? COGL_ENABLE_BLEND : 0));
GE( glVertexPointer (2, GL_FIXED, 0, rect_verts) ); GE( glVertexPointer (2, GL_FIXED, 0, rect_verts) );
GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) );
} }
#if 0
void void
cogl_fast_fill_trapezoid (gint y1, cogl_trapezoid (gint y1,
gint x11, gint x11,
gint x21, gint x21,
gint y2, gint y2,
gint x12, gint x12,
gint x22) gint x22)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
GLshort trap_verts[8] = { cogl_enable (ctx->color_alpha < 255
(GLshort) x11, (GLshort) y1, ? COGL_ENABLE_BLEND : 0);
(GLshort) x21, (GLshort) y1,
(GLshort) x12, (GLshort) y2,
(GLshort) x22, (GLshort) y2
};
cogl_enable (COGL_ENABLE_VERTEX_ARRAY GE( glBegin (GL_QUADS) );
| (ctx->color_alpha < 255 GE( glVertex2i (x11, y1) );
? COGL_ENABLE_BLEND : 0)); GE( glVertex2i (x21, y1) );
GE( glVertex2i (x22, y2) );
GE( glVertexPointer (2, GL_SHORT, 0, trap_verts) ); GE( glVertex2i (x12, y2) );
GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); GE( glEnd () );
} }
void void
cogl_fast_fill_trapezoidx (ClutterFixed y1, cogl_trapezoidx (ClutterFixed y1,
ClutterFixed x11, ClutterFixed x11,
ClutterFixed x21, ClutterFixed x21,
ClutterFixed y2, ClutterFixed y2,
ClutterFixed x12, ClutterFixed x12,
ClutterFixed x22) ClutterFixed x22)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
GLfixed trap_verts[8] = { cogl_enable (ctx->color_alpha < 255
x11, y1, ? COGL_ENABLE_BLEND : 0);
x21, y1,
x12, y2,
x22, y2
};
cogl_enable (COGL_ENABLE_VERTEX_ARRAY GE( glBegin (GL_QUADS) );
| (ctx->color_alpha < 255
? COGL_ENABLE_BLEND : 0));
GE( glVertexPointer (2, GL_FIXED, 0, trap_verts) ); GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x11),
GE( glDrawArrays (GL_TRIANGLE_STRIP, 0, 4) ); CLUTTER_FIXED_TO_FLOAT (y1)) );
GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x21),
CLUTTER_FIXED_TO_FLOAT (y1)) );
GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x22),
CLUTTER_FIXED_TO_FLOAT (y2)) );
GE( glVertex2f (CLUTTER_FIXED_TO_FLOAT (x12),
CLUTTER_FIXED_TO_FLOAT (y2)) );
GE( glEnd () );
} }
#endif
static void static void
_cogl_path_clear_nodes () _cogl_path_clear_nodes ()
@ -142,7 +141,7 @@ _cogl_path_clear_nodes ()
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
if (ctx->path_nodes) if (ctx->path_nodes)
g_free (ctx->path_nodes); g_free(ctx->path_nodes);
ctx->path_nodes = (CoglFixedVec2*) g_malloc (2 * sizeof(CoglFixedVec2)); ctx->path_nodes = (CoglFixedVec2*) g_malloc (2 * sizeof(CoglFixedVec2));
ctx->path_nodes_size = 0; ctx->path_nodes_size = 0;
@ -169,8 +168,8 @@ _cogl_path_add_node (ClutterFixed x,
ctx->path_nodes_cap *= 2; ctx->path_nodes_cap *= 2;
} }
ctx->path_nodes [ctx->path_nodes_size] .x = x; ctx->path_nodes [ctx->path_nodes_size] .x = CLUTTER_FIXED_TO_FLOAT (x);
ctx->path_nodes [ctx->path_nodes_size] .y = y; ctx->path_nodes [ctx->path_nodes_size] .y = CLUTTER_FIXED_TO_FLOAT (y);
ctx->path_nodes_size++; ctx->path_nodes_size++;
if (ctx->path_nodes_size == 1) if (ctx->path_nodes_size == 1)
@ -196,7 +195,7 @@ _cogl_path_stroke_nodes ()
| (ctx->color_alpha < 255 | (ctx->color_alpha < 255
? COGL_ENABLE_BLEND : 0)); ? COGL_ENABLE_BLEND : 0));
GE( glVertexPointer (2, GL_FIXED, 0, ctx->path_nodes) ); GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) );
GE( glDrawArrays (GL_LINE_STRIP, 0, ctx->path_nodes_size) ); GE( glDrawArrays (GL_LINE_STRIP, 0, ctx->path_nodes_size) );
} }
@ -211,17 +210,16 @@ _cogl_path_fill_nodes ()
guint bounds_h; guint bounds_h;
GE( glClear (GL_STENCIL_BUFFER_BIT) ); GE( glClear (GL_STENCIL_BUFFER_BIT) );
GE( glEnable (GL_STENCIL_TEST) ); GE( glEnable (GL_STENCIL_TEST) );
GE( glStencilFunc (GL_ALWAYS, 0x0, 0x0) ); GE( glStencilFunc (GL_ALWAYS, 0x0, 0x0) );
GE( glStencilOp (GL_INVERT, GL_INVERT, GL_INVERT) ); GE( glStencilOp (GL_INVERT, GL_INVERT, GL_INVERT) );
GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) ); GE( glColorMask (GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE) );
cogl_enable (COGL_ENABLE_VERTEX_ARRAY cogl_enable (COGL_ENABLE_VERTEX_ARRAY
| (ctx->color_alpha < 255 | (ctx->color_alpha < 255 ? COGL_ENABLE_BLEND : 0));
? COGL_ENABLE_BLEND : 0));
GE( glVertexPointer (2, GL_FIXED, 0, ctx->path_nodes) ); GE( glVertexPointer (2, GL_FLOAT, 0, ctx->path_nodes) );
GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) ); GE( glDrawArrays (GL_TRIANGLE_FAN, 0, ctx->path_nodes_size) );
GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) ); GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) );
@ -233,7 +231,7 @@ _cogl_path_fill_nodes ()
bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x); bounds_w = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.x - ctx->path_nodes_min.x);
bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y); bounds_h = CLUTTER_FIXED_CEIL (ctx->path_nodes_max.y - ctx->path_nodes_min.y);
cogl_fast_fill_rectangle (bounds_x, bounds_y, bounds_w, bounds_h); cogl_rectangle (bounds_x, bounds_y, bounds_w, bounds_h);
GE( glDisable (GL_STENCIL_TEST) ); GE( glDisable (GL_STENCIL_TEST) );
} }
@ -247,6 +245,7 @@ cogl_fill ()
return; return;
_cogl_path_fill_nodes(); _cogl_path_fill_nodes();
} }
void void
@ -262,8 +261,8 @@ cogl_stroke ()
void void
cogl_path_move_to (ClutterFixed x, cogl_path_move_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
/* FIXME: handle multiple contours maybe? */ /* FIXME: handle multiple contours maybe? */
@ -278,18 +277,18 @@ cogl_path_move_to (ClutterFixed x,
} }
void void
cogl_path_move_to_rel (ClutterFixed x, cogl_path_rel_move_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_move_to (ctx->path_pen.x + x, cogl_path_move_to (ctx->path_pen.x + x,
ctx->path_pen.y + y); ctx->path_pen.y + y);
} }
void void
cogl_path_line_to (ClutterFixed x, cogl_path_line_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -300,49 +299,13 @@ cogl_path_line_to (ClutterFixed x,
} }
void void
cogl_path_line_to_rel (ClutterFixed x, cogl_path_rel_line_to (ClutterFixed x,
ClutterFixed y) ClutterFixed y)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x + x, cogl_path_line_to (ctx->path_pen.x + x,
ctx->path_pen.y + y); ctx->path_pen.y + y);
}
void
cogl_path_h_line_to (ClutterFixed x)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (x,
ctx->path_pen.y);
}
void
cogl_path_v_line_to (ClutterFixed y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x,
y);
}
void
cogl_path_h_line_to_rel (ClutterFixed x)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x + x,
ctx->path_pen.y);
}
void
cogl_path_v_line_to_rel (ClutterFixed y)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_line_to (ctx->path_pen.x,
ctx->path_pen.y + y);
} }
void void
@ -354,6 +317,7 @@ cogl_path_close ()
ctx->path_pen = ctx->path_start; ctx->path_pen = ctx->path_start;
} }
void void
cogl_line (ClutterFixed x1, cogl_line (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
@ -370,10 +334,10 @@ cogl_polyline (ClutterFixed *coords,
{ {
gint c = 0; gint c = 0;
cogl_path_move_to(coords[0], coords[1]); cogl_path_move_to (coords[0], coords[1]);
for (c = 1; c < num_points; ++c) for (c = 1; c < num_points; ++c)
cogl_path_line_to(coords[2*c], coords[2*c+1]); cogl_path_line_to (coords[2*c], coords[2*c+1]);
} }
void void
@ -385,10 +349,10 @@ cogl_polygon (ClutterFixed *coords,
} }
void void
cogl_rectangle (ClutterFixed x, cogl_path_rectangle (ClutterFixed x,
ClutterFixed y, ClutterFixed y,
ClutterFixed width, ClutterFixed width,
ClutterFixed height) ClutterFixed height)
{ {
cogl_path_move_to (x, y); cogl_path_move_to (x, y);
cogl_path_line_to (x + width, y); cogl_path_line_to (x + width, y);
@ -448,19 +412,20 @@ _cogl_arc (ClutterFixed center_x,
void void
cogl_path_arc (ClutterFixed center_x, cogl_path_arc (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_1, ClutterAngle angle_1,
ClutterAngle angle_2, ClutterAngle angle_2)
ClutterAngle angle_step) {
{ ClutterAngle angle_step = 10;
_cogl_arc (center_x, center_y, _cogl_arc (center_x, center_y,
radius_x, radius_y, radius_x, radius_y,
angle_1, angle_2, angle_1, angle_2,
angle_step, 0 /* no move */); angle_step, 0 /* no move */);
} }
void void
cogl_path_arc_rel (ClutterFixed center_x, cogl_path_arc_rel (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
@ -485,9 +450,9 @@ cogl_arc (ClutterFixed center_x,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y,
ClutterAngle angle_1, ClutterAngle angle_1,
ClutterAngle angle_2, ClutterAngle angle_2)
ClutterAngle angle_step)
{ {
ClutterAngle angle_step = 10;
_cogl_arc (center_x, center_y, _cogl_arc (center_x, center_y,
radius_x, radius_y, radius_x, radius_y,
angle_1, angle_2, angle_1, angle_2,
@ -498,9 +463,9 @@ void
cogl_ellipse (ClutterFixed center_x, cogl_ellipse (ClutterFixed center_x,
ClutterFixed center_y, ClutterFixed center_y,
ClutterFixed radius_x, ClutterFixed radius_x,
ClutterFixed radius_y, ClutterFixed radius_y)
ClutterAngle angle_step)
{ {
ClutterAngle angle_step = 10;
/* FIXME: if shows to be slow might be optimized /* FIXME: if shows to be slow might be optimized
* by mirroring just a quarter of it */ * by mirroring just a quarter of it */
@ -521,6 +486,7 @@ cogl_round_rectangle (ClutterFixed x,
ClutterFixed radius, ClutterFixed radius,
ClutterAngle arc_step) ClutterAngle arc_step)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
ClutterFixed inner_width = width - (radius << 1); ClutterFixed inner_width = width - (radius << 1);
ClutterFixed inner_height = height - (radius << 1); ClutterFixed inner_height = height - (radius << 1);
@ -531,21 +497,25 @@ cogl_round_rectangle (ClutterFixed x,
CLUTTER_ANGLE_FROM_DEG (270), CLUTTER_ANGLE_FROM_DEG (270),
arc_step); arc_step);
cogl_path_h_line_to_rel (inner_width); cogl_path_line_to (ctx->path_pen.x + inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, radius, cogl_path_arc_rel (0, radius,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (-90), CLUTTER_ANGLE_FROM_DEG (-90),
CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (0),
arc_step); arc_step);
cogl_path_v_line_to_rel (inner_height); cogl_path_line_to (ctx->path_pen.x,
ctx->path_pen.y + inner_height);
cogl_path_arc_rel (-radius, 0, cogl_path_arc_rel (-radius, 0,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (0), CLUTTER_ANGLE_FROM_DEG (0),
CLUTTER_ANGLE_FROM_DEG (90), CLUTTER_ANGLE_FROM_DEG (90),
arc_step); arc_step);
cogl_path_h_line_to_rel (-inner_width); cogl_path_line_to (ctx->path_pen.x - inner_width,
ctx->path_pen.y);
cogl_path_arc_rel (0, -radius, cogl_path_arc_rel (0, -radius,
radius, radius, radius, radius,
CLUTTER_ANGLE_FROM_DEG (90), CLUTTER_ANGLE_FROM_DEG (90),
@ -555,6 +525,7 @@ cogl_round_rectangle (ClutterFixed x,
cogl_path_close (); cogl_path_close ();
} }
#if 0
static void static void
_cogl_path_bezier2_sub (CoglBezQuad *quad) _cogl_path_bezier2_sub (CoglBezQuad *quad)
{ {
@ -620,6 +591,7 @@ _cogl_path_bezier2_sub (CoglBezQuad *quad)
qright->p3 = q->p3; qright->p3 = q->p3;
} }
} }
#endif
static void static void
_cogl_path_bezier3_sub (CoglBezCubic *cubic) _cogl_path_bezier3_sub (CoglBezCubic *cubic)
@ -712,17 +684,7 @@ _cogl_path_bezier3_sub (CoglBezCubic *cubic)
} }
} }
/** #if 0
* cogl_path_bezier2_to:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
*
* Adds a quadratic bezier curve segment to the current path with the given
* second and third control points and using current pen location as the
* first control point.
**/
void void
cogl_path_bezier2_to (ClutterFixed x1, cogl_path_bezier2_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
@ -747,27 +709,15 @@ cogl_path_bezier2_to (ClutterFixed x1,
_cogl_path_add_node (quad.p3.x, quad.p3.y); _cogl_path_add_node (quad.p3.x, quad.p3.y);
ctx->path_pen = quad.p3; ctx->path_pen = quad.p3;
} }
#endif
/**
* cogl_path_bezier3_to:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
* @x3: X coordinate of the fourth bezier control point
* @y3: Y coordinate of the fourth bezier control point
*
* Adds a cubic bezier curve segment to the current path with the given
* second, third and fourth control points and using current pen location
* as the first control point.
**/
void void
cogl_path_bezier3_to (ClutterFixed x1, cogl_path_curve_to (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
ClutterFixed x3, ClutterFixed x3,
ClutterFixed y3) ClutterFixed y3)
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
@ -790,48 +740,8 @@ cogl_path_bezier3_to (ClutterFixed x1,
ctx->path_pen = cubic.p4; ctx->path_pen = cubic.p4;
} }
/**
* cogl_path_bezier2_to_rel:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
*
* Adds a quadratic bezier curve segment to the current path with the given
* second and third control points and using current pen location as the
* first control point. The given coordinates are relative to the current
* pen location.
**/
void void
cogl_path_bezier2_to_rel (ClutterFixed x1, cogl_rel_curve_to (ClutterFixed x1,
ClutterFixed y1,
ClutterFixed x2,
ClutterFixed y2)
{
_COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_bezier2_to (ctx->path_pen.x + x1,
ctx->path_pen.y + y2,
ctx->path_pen.x + x2,
ctx->path_pen.y + y2);
}
/**
* cogl_path_bezier3_to_rel:
* @x1: X coordinate of the second bezier control point
* @y1: Y coordinate of the second bezier control point
* @x2: X coordinate of the third bezier control point
* @y2: Y coordinate of the third bezier control point
* @x3: X coordinate of the fourth bezier control point
* @y3: Y coordinate of the fourth bezier control point
*
* Adds a cubic bezier curve segment to the current path with the given
* second, third and fourth control points and using current pen location
* as the first control point. The given coordinates are relative to the
* current pen location.
**/
void
cogl_path_bezier3_to_rel (ClutterFixed x1,
ClutterFixed y1, ClutterFixed y1,
ClutterFixed x2, ClutterFixed x2,
ClutterFixed y2, ClutterFixed y2,
@ -840,10 +750,10 @@ cogl_path_bezier3_to_rel (ClutterFixed x1,
{ {
_COGL_GET_CONTEXT (ctx, NO_RETVAL); _COGL_GET_CONTEXT (ctx, NO_RETVAL);
cogl_path_bezier3_to (ctx->path_pen.x + x1, cogl_path_curve_to (ctx->path_pen.x + x1,
ctx->path_pen.y + y2, ctx->path_pen.y + y2,
ctx->path_pen.x + x2, ctx->path_pen.x + x2,
ctx->path_pen.y + y2, ctx->path_pen.y + y2,
ctx->path_pen.x + x3, ctx->path_pen.x + x3,
ctx->path_pen.y + y3); ctx->path_pen.y + y3);
} }

View File

@ -332,7 +332,7 @@ cogl_clip_set (ClutterFixed x_offset,
GE( glColor4x (CFX_ONE, CFX_ONE, CFX_ONE, CFX_ONE ) ); GE( glColor4x (CFX_ONE, CFX_ONE, CFX_ONE, CFX_ONE ) );
cogl_fast_fill_rectanglex (x_offset, y_offset, width, height); cogl_rectanglex (x_offset, y_offset, width, height);
GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) ); GE( glStencilFunc (GL_EQUAL, 0x1, 0x1) );
GE( glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP) ); GE( glStencilOp (GL_KEEP, GL_KEEP, GL_KEEP) );

View File

@ -97,7 +97,7 @@ test_coglbox_paint(ClutterActor *self)
priv = TEST_COGLBOX_GET_PRIVATE (self); priv = TEST_COGLBOX_GET_PRIVATE (self);
cogl_color (&cback); cogl_color (&cback);
cogl_fast_fill_rectangle (0,0,400,400); cogl_rectangle (0,0,400,400);
cogl_color (&cfullopaque); cogl_color (&cfullopaque);
cogl_texture_rectangle (priv->texhand_id, cogl_texture_rectangle (priv->texhand_id,
@ -111,10 +111,10 @@ test_coglbox_paint(ClutterActor *self)
cogl_draw_buffer (COGL_OFFSCREEN_BUFFER, priv->offscreen_id); cogl_draw_buffer (COGL_OFFSCREEN_BUFFER, priv->offscreen_id);
cogl_color (&cred); cogl_color (&cred);
cogl_fast_fill_rectangle (20,20,100,100); cogl_rectangle (20,20,100,100);
cogl_color (&cgreen); cogl_color (&cgreen);
cogl_fast_fill_rectangle (80,80,100,100); cogl_rectangle (80,80,100,100);
cogl_draw_buffer (COGL_WINDOW_BUFFER, 0); cogl_draw_buffer (COGL_WINDOW_BUFFER, 0);

View File

@ -80,29 +80,29 @@ static void
test_paint_line () test_paint_line ()
{ {
cogl_line (CLUTTER_INT_TO_FIXED (-50), cogl_line (CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (-25), CLUTTER_INT_TO_FIXED (-25),
CLUTTER_INT_TO_FIXED (50), CLUTTER_INT_TO_FIXED (50),
CLUTTER_INT_TO_FIXED (25)); CLUTTER_INT_TO_FIXED (25));
} }
static void static void
test_paint_rect () test_paint_rect ()
{ {
cogl_rectangle (CLUTTER_INT_TO_FIXED (-50), cogl_path_rectangle (CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (-25), CLUTTER_INT_TO_FIXED (-25),
CLUTTER_INT_TO_FIXED (100), CLUTTER_INT_TO_FIXED (100),
CLUTTER_INT_TO_FIXED (50)); CLUTTER_INT_TO_FIXED (50));
} }
static void static void
test_paint_rndrect() test_paint_rndrect()
{ {
cogl_round_rectangle (CLUTTER_INT_TO_FIXED (-50), cogl_round_rectangle (CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (-25), CLUTTER_INT_TO_FIXED (-25),
CLUTTER_INT_TO_FIXED (100), CLUTTER_INT_TO_FIXED (100),
CLUTTER_INT_TO_FIXED (50), CLUTTER_INT_TO_FIXED (50),
CLUTTER_INT_TO_FIXED (10), CLUTTER_INT_TO_FIXED (10),
5); 5);
} }
static void static void
@ -139,52 +139,58 @@ test_paint_polyg ()
cogl_polygon (poly_coords, 4); cogl_polygon (poly_coords, 4);
} }
static void
test_paint_arc ()
{
cogl_arc (0,0,
CLUTTER_INT_TO_FIXED (60),
CLUTTER_INT_TO_FIXED (40),
CLUTTER_ANGLE_FROM_DEG (-45),
CLUTTER_ANGLE_FROM_DEG (+45),
10);
}
static void static void
test_paint_elp () test_paint_elp ()
{ {
cogl_ellipse (0, 0, cogl_ellipse (0, 0,
CLUTTER_INT_TO_FIXED (60), CLUTTER_INT_TO_FIXED (60),
CLUTTER_INT_TO_FIXED (40), CLUTTER_INT_TO_FIXED (40),
10); 10);
} }
static void static void
test_paint_bezier2 () test_paint_bezier2 ()
{ {
cogl_path_move_to (CLUTTER_INT_TO_FIXED (-50), cogl_path_move_to (CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (+25)); CLUTTER_INT_TO_FIXED (+25));
cogl_path_bezier2_to (CLUTTER_INT_TO_FIXED (0), /* a bezier2 is just the same as a bezier3 with both the two first
CLUTTER_INT_TO_FIXED (-25), * coordinate pairs being equal
CLUTTER_INT_TO_FIXED (+50), */
CLUTTER_INT_TO_FIXED (+25)); cogl_path_curve_to (CLUTTER_INT_TO_FIXED (0),
CLUTTER_INT_TO_FIXED (-25),
CLUTTER_INT_TO_FIXED (0),
CLUTTER_INT_TO_FIXED (-25),
CLUTTER_INT_TO_FIXED (+50),
CLUTTER_INT_TO_FIXED (+25));
} }
static void static void
test_paint_bezier3 () test_paint_bezier3 ()
{ {
cogl_path_move_to (CLUTTER_INT_TO_FIXED (-50), cogl_path_move_to (CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (+50)); CLUTTER_INT_TO_FIXED (+50));
cogl_path_bezier3_to (CLUTTER_INT_TO_FIXED (+100), cogl_path_curve_to (CLUTTER_INT_TO_FIXED (+100),
CLUTTER_INT_TO_FIXED (-50), CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (-100), CLUTTER_INT_TO_FIXED (-100),
CLUTTER_INT_TO_FIXED (-50), CLUTTER_INT_TO_FIXED (-50),
CLUTTER_INT_TO_FIXED (+50), CLUTTER_INT_TO_FIXED (+50),
CLUTTER_INT_TO_FIXED (+50)); CLUTTER_INT_TO_FIXED (+50));
} }
static PaintFunc paint_func []=
{
test_paint_line,
test_paint_rect,
test_paint_rndrect,
test_paint_polyl,
test_paint_polyg,
test_paint_elp,
test_paint_bezier2,
test_paint_bezier3
};
static void static void
test_coglbox_paint(ClutterActor *self) test_coglbox_paint(ClutterActor *self)
{ {
@ -196,20 +202,12 @@ test_coglbox_paint(ClutterActor *self)
static GTimer *timer = NULL; static GTimer *timer = NULL;
static gint paint_index = 0; static gint paint_index = 0;
const gint NUM_PAINT_FUNCS = 9; gint NUM_PAINT_FUNCS;
PaintFunc paint_func [NUM_PAINT_FUNCS];
NUM_PAINT_FUNCS = G_N_ELEMENTS (paint_func);
priv = TEST_COGLBOX_GET_PRIVATE (self); priv = TEST_COGLBOX_GET_PRIVATE (self);
paint_func[0] = test_paint_line;
paint_func[1] = test_paint_rect;
paint_func[2] = test_paint_rndrect;
paint_func[3] = test_paint_polyl;
paint_func[4] = test_paint_polyg;
paint_func[5] = test_paint_arc;
paint_func[6] = test_paint_elp;
paint_func[7] = test_paint_bezier2;
paint_func[8] = test_paint_bezier3;
if (!timer) if (!timer)
{ {

View File

@ -92,7 +92,7 @@ test_coglbox_paint(ClutterActor *self)
priv = TEST_COGLBOX_GET_PRIVATE (self); priv = TEST_COGLBOX_GET_PRIVATE (self);
cogl_color (&cback); cogl_color (&cback);
cogl_fast_fill_rectangle (0,0,400,400); cogl_rectangle (0,0,400,400);
cogl_color (&cwhite); cogl_color (&cwhite);

View File

@ -92,7 +92,7 @@ test_coglbox_paint(ClutterActor *self)
priv = TEST_COGLBOX_GET_PRIVATE (self); priv = TEST_COGLBOX_GET_PRIVATE (self);
cogl_color (&cback); cogl_color (&cback);
cogl_fast_fill_rectangle (0,0,400,400); cogl_rectangle (0,0,400,400);
cogl_color (&cwhite); cogl_color (&cwhite);

View File

@ -91,7 +91,7 @@ test_coglbox_paint(ClutterActor *self)
priv = TEST_COGLBOX_GET_PRIVATE (self); priv = TEST_COGLBOX_GET_PRIVATE (self);
cogl_color (&cback); cogl_color (&cback);
cogl_fast_fill_rectangle (0,0,400,400); cogl_rectangle (0,0,400,400);
cogl_color (&cwhite); cogl_color (&cwhite);

View File

@ -117,7 +117,7 @@ test_coglbox_paint(ClutterActor *self)
cogl_push_matrix (); cogl_push_matrix ();
cogl_color (&cback); cogl_color (&cback);
cogl_fast_fill_rectangle (0,0,400,400); cogl_rectangle (0,0,400,400);
cogl_color (&cwhite); cogl_color (&cwhite);
cogl_translate (100,100,0); cogl_translate (100,100,0);