diff options
author | Søren Sandmann <ssp@redhat.com> | 2013-01-09 21:27:45 -0500 |
---|---|---|
committer | Søren Sandmann <ssp@redhat.com> | 2013-01-09 21:27:45 -0500 |
commit | 71ce9cfa4f26ff41bde06226409b43bc94ea2ab8 (patch) | |
tree | 7b3b3d87a80bd05c628b634069a0d1b441e5ee4f | |
parent | 01c3c09be80d6fcd822ae60b575cd0ff5440a46f (diff) |
table and cells
-rw-r--r-- | pics.c | 271 |
1 files changed, 167 insertions, 104 deletions
@@ -3,8 +3,8 @@ #define CHECK_SIZE 16 -#define SOURCE_COLOR 0.8, 0.3, 0.2 -#define DEST_COLOR 0.2, 0.4, 0.6 +#define SOURCE_COLOR 0.8, 0.3, 0.4 +#define DEST_COLOR 0.2, 0.2, 0.4 static cairo_t * get_cairo (int width, int height) @@ -73,8 +73,8 @@ static void polygon_path (cairo_t *cr) { cairo_rel_move_to (cr, 10, 10); - cairo_rel_line_to (cr, 65, 35); - cairo_rel_line_to (cr, -38, 35); + cairo_rel_line_to (cr, 65, 38); + cairo_rel_line_to (cr, -35, 32); } static void @@ -146,10 +146,19 @@ centered_text (cairo_t *cr, double x, double y, const char *text) cairo_restore (cr); } -#define CELL_WIDTH 120 -#define CELL_HEIGHT 130 +#define CELL_WIDTH 128 +#define CELL_HEIGHT 128 #define XPAD (CELL_WIDTH / 4) -#define YPAD (CELL_WIDTH / 4) +#define YPAD (32) + +static void +cell_text (cairo_t *cr, double x, double y, const char *text) +{ + cairo_set_source_rgb (cr, 0, 0, 0); + centered_text (cr, + x + CELL_WIDTH / 2.0 - 20.0, + y + CELL_HEIGHT - 30, text); +} static void draw_cell (cairo_t *cr, @@ -183,10 +192,7 @@ draw_cell (cairo_t *cr, draw_source (cr); } - cairo_set_source_rgb (cr, 0, 0, 0); - centered_text (cr, - x + CELL_WIDTH / 2.0 - 20.0, - y + CELL_HEIGHT - 30, name); + cell_text (cr, x, y, name); cairo_restore (cr); } @@ -239,6 +245,92 @@ create_porter_duff_table (void) finish (cr, "table.png"); } + +static void +draw_color_dodge_none (cairo_t *cr, double x, double y) +{ + cairo_push_group (cr); + cairo_push_group (cr); + cairo_set_source_rgb (cr, DEST_COLOR); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_paint (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); + cairo_set_source_rgb (cr, SOURCE_COLOR); + cairo_paint (cr); + cairo_pop_group_to_source (cr); + + cairo_move_to (cr, x, y); + ampersand_path (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_fill (cr); + + cairo_pop_group_to_source (cr); + + cairo_move_to (cr, x, y); + polygon_path (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_fill (cr); +} + +static void +draw_color_dodge_source (cairo_t *cr, double x, double y) +{ + cairo_push_group (cr); + + cairo_push_group (cr); + + cairo_set_source_rgb (cr, SOURCE_COLOR); + cairo_paint (cr); + + cairo_push_group (cr); + cairo_set_source_rgb (cr, DEST_COLOR); + cairo_paint (cr); + cairo_set_source_rgb (cr, SOURCE_COLOR); + cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); + cairo_paint (cr); + cairo_pop_group_to_source (cr); + + cairo_move_to (cr, x, y); + ampersand_path (cr); + cairo_fill (cr); + + cairo_pop_group_to_source (cr); + + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_paint (cr); + + cairo_pop_group_to_source (cr); + + cairo_move_to (cr, x, y); + polygon_path (cr); + + cairo_fill (cr); +} + +static void +draw_color_dodge_dest (cairo_t *cr, double x, double y) +{ + cairo_move_to (cr, x, y); + draw_dest (cr); + + cairo_push_group (cr); + cairo_push_group (cr); + cairo_set_source_rgb (cr, DEST_COLOR); + cairo_paint (cr); + cairo_set_source_rgb (cr, SOURCE_COLOR); + cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); + cairo_paint (cr); + cairo_pop_group_to_source (cr); + cairo_move_to (cr, x, y); + ampersand_path (cr); + cairo_fill (cr); + cairo_pop_group_to_source (cr); + cairo_move_to (cr, x, y); + polygon_path (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); + cairo_fill (cr); +} + static void create_color_dodge_table (void) { @@ -260,22 +352,62 @@ create_color_dodge_table (void) "Dest Over", CAIRO_OPERATOR_DEST_OVER, }; - cairo_t *cr = get_cairo (CELL_WIDTH * 4 + XPAD, + cairo_t *cr = get_cairo (CELL_WIDTH * 4 + XPAD + 140, (CELL_HEIGHT) * 4 + 2 * YPAD); + double x, y; + int n_columns = 4; + + int i; + + for (i = YPAD; i < CELL_HEIGHT * 4 + 2 * YPAD; i += 2 * CELL_HEIGHT) + { + cairo_set_source_rgba (cr, 0, 0, 1, 0.02); + cairo_rectangle (cr, 0, i, CELL_WIDTH * 4 + XPAD + 140, CELL_HEIGHT); + cairo_fill (cr); + } + + cairo_push_group (cr); + + cairo_translate (cr, 140, 8); + + draw_table (cr, ops, sizeof (ops) / sizeof (ops[0]), n_columns); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + + x = CELL_WIDTH * (12 % n_columns) + XPAD; + y = CELL_HEIGHT * (12 / n_columns) + YPAD; + draw_color_dodge_none (cr, x, y); + cell_text (cr, x, y, "CDodge None"); + + x = CELL_WIDTH * (13 % n_columns) + XPAD; + y = CELL_HEIGHT * (13 / n_columns) + YPAD; + draw_color_dodge_source (cr, x, y); + cell_text (cr, x, y, "CDodge Source"); + + x = CELL_WIDTH * (14 % n_columns) + XPAD; + y = CELL_HEIGHT * (14 / n_columns) + YPAD; + draw_color_dodge_dest (cr, x, y); + cell_text (cr, x, y, "CDodge Dest"); + + x = CELL_WIDTH * (15 % n_columns) + XPAD; + y = CELL_HEIGHT * (15 / n_columns) + YPAD; + draw_cell (cr, x, y, CAIRO_OPERATOR_COLOR_DODGE, ""); + cell_text (cr, x, y, "CDodge Both"); + + cairo_pop_group_to_source (cr); + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_paint (cr); - draw_table (cr, ops, sizeof (ops) / sizeof (ops[0]), 4); - finish (cr, "colordodge-table.png"); } static void create_op (cairo_operator_t op, const char *name, const char *filename) { - cairo_t *cr = get_cairo (CELL_WIDTH + 20, CELL_HEIGHT); + cairo_t *cr = get_cairo (CELL_WIDTH, CELL_HEIGHT); cairo_move_to (cr, 0, 0); - draw_cell (cr, 30, 10, op, name); + draw_cell (cr, 20, 16, op, name); finish (cr, filename); } @@ -397,109 +529,38 @@ color_dodge_diagram (const char *filename) } static void -color_dodge_atopish (void) +color_dodge_none (void) { - cairo_t *cr = get_cairo (CELL_WIDTH + 20, CELL_HEIGHT); + cairo_t *cr = get_cairo (CELL_WIDTH, CELL_HEIGHT); cairo_pattern_t *pattern; - cairo_push_group (cr); - - cairo_move_to (cr, 0, 0); - - cairo_push_group (cr); - - cairo_set_source_rgb (cr, SOURCE_COLOR); - cairo_paint (cr); - - cairo_push_group (cr); - cairo_set_source_rgb (cr, DEST_COLOR); - cairo_paint (cr); - cairo_set_source_rgb (cr, SOURCE_COLOR); - cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); - cairo_paint (cr); - cairo_pop_group_to_source (cr); - - cairo_move_to (cr, 30, 10); - ampersand_path (cr); - cairo_fill (cr); - - cairo_pop_group_to_source (cr); - - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - cairo_paint (cr); - - cairo_pop_group_to_source (cr); - - cairo_move_to (cr, 30, 10); - polygon_path (cr); + draw_color_dodge_none (cr, 20, 16); - cairo_fill (cr); - - cairo_set_source_rgb (cr, 0, 0, 0); - centered_text (cr, - 30 + CELL_WIDTH / 2.0 - 20.0, - 10 + CELL_HEIGHT - 30, "asdfasdf"); - - finish (cr, "colordodge-atopish.png"); + finish (cr, "colordodge-none.png"); } static void -color_dodge_blend_only (void) +color_dodge_dest (void) { - cairo_t *cr = get_cairo (CELL_WIDTH + 20, CELL_HEIGHT); + cairo_t *cr = get_cairo (CELL_WIDTH, CELL_HEIGHT); cairo_pattern_t *pattern; - cairo_push_group (cr); - cairo_push_group (cr); - cairo_set_source_rgb (cr, DEST_COLOR); - cairo_paint (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); - cairo_set_source_rgb (cr, SOURCE_COLOR); - cairo_paint (cr); - cairo_pop_group_to_source (cr); - - cairo_move_to (cr, 30, 10); - ampersand_path (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - cairo_fill (cr); - - cairo_pop_group_to_source (cr); + draw_color_dodge_dest (cr, 20, 16); - cairo_move_to (cr, 30, 10); - polygon_path (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_OVER); - cairo_fill (cr); - - finish (cr, "colordodge-blendonly.png"); + finish (cr, "colordodge-dest.png"); } static void -dest_color_dodge (void) +color_dodge_source (void) { - cairo_t *cr = get_cairo (CELL_WIDTH + 20, CELL_HEIGHT); + cairo_t *cr = get_cairo (CELL_WIDTH, CELL_HEIGHT); cairo_pattern_t *pattern; - cairo_move_to (cr, 30, 10); - draw_dest (cr); + draw_color_dodge_source (cr, 20, 16); - cairo_push_group (cr); - cairo_push_group (cr); - cairo_set_source_rgb (cr, DEST_COLOR); - cairo_paint (cr); - cairo_set_source_rgb (cr, SOURCE_COLOR); - cairo_set_operator (cr, CAIRO_OPERATOR_COLOR_DODGE); - cairo_paint (cr); - cairo_pop_group_to_source (cr); - cairo_move_to (cr, 30, 10); - ampersand_path (cr); - cairo_fill (cr); - cairo_pop_group_to_source (cr); - cairo_move_to (cr, 30, 10); - polygon_path (cr); - cairo_set_operator (cr, CAIRO_OPERATOR_SOURCE); - cairo_fill (cr); + cell_text (cr, 20, 16, "asfdasdfasdf"); - finish (cr, "asdf.png"); + finish (cr, "colordodge-source.png"); } int @@ -507,15 +568,17 @@ main (int argc, char *argv) { create_op (CAIRO_OPERATOR_SOURCE, "Source", "source.png"); create_op (CAIRO_OPERATOR_DEST, "Destination", "dest.png"); - create_op (CAIRO_OPERATOR_COLOR_DODGE, "Color Dodge", "colordodge.png"); create_op (CAIRO_OPERATOR_DEST_ATOP, "Dest Atop", "destatop.png"); create_op (CAIRO_OPERATOR_OVER, "Over", "over.png"); create_porter_duff_table (); general_pixel_diagram ("diagram.png"); dest_atop_diagram ("destatop-diagram.png"); color_dodge_diagram ("colordodge-diagram.png"); - color_dodge_atopish (); - dest_color_dodge (); - color_dodge_blend_only (); + + color_dodge_none (); + color_dodge_source (); + color_dodge_dest (); + create_op (CAIRO_OPERATOR_COLOR_DODGE, "Color Dodge", "colordodge-both.png"); + create_color_dodge_table (); } |