diff options
Diffstat (limited to 'saedit/drawfuncs.c')
-rw-r--r-- | saedit/drawfuncs.c | 107 |
1 files changed, 107 insertions, 0 deletions
diff --git a/saedit/drawfuncs.c b/saedit/drawfuncs.c new file mode 100644 index 0000000..97a769e --- /dev/null +++ b/saedit/drawfuncs.c @@ -0,0 +1,107 @@ +#include "interactor.h" +#include "drawfuncs.h" +#include "spritedrawingarea.h" +#include "config.h" + +void +interactor_sprite_layer_draw_func ( + SDALayer *layer, + cairo_t *cr, + gpointer user_data +) { + const GdkPixbuf *sprite; + gint offsetX, offsetY; + Interactor *interactor = *((Interactor **) user_data); + + if (interactor == NULL) + return; + + sprite = interactor_get_sprite (interactor); + + if (sprite == NULL) + return; + + interactor_get_offset (interactor, &offsetX, &offsetY); + + gdk_cairo_set_source_pixbuf ( + cr, sprite, + offsetX, + offsetY + config_keys_get_tile_size () / 2 + ); + cairo_pattern_set_filter ( + cairo_get_source (cr), + CAIRO_FILTER_NEAREST + ); + cairo_paint (cr); +} + +void +background_layer_draw_func ( + SDALayer *layer, + cairo_t *cr, + gpointer user_data +) { + GdkRGBA *rgba = (GdkRGBA *) user_data; + + gdk_cairo_set_source_rgba (cr, rgba); + + cairo_rectangle ( + cr, + -SPRITE_DRAWING_AREA_FIELD_SIZE, + -SPRITE_DRAWING_AREA_FIELD_SIZE, + 2 * SPRITE_DRAWING_AREA_FIELD_SIZE, + 2 * SPRITE_DRAWING_AREA_FIELD_SIZE + ); + cairo_fill (cr); +} + +void +tile_grid_layer_draw_func ( + SDALayer *layer, + cairo_t *cr, + gpointer user_data +) { + gint x; + gint field_size = SPRITE_DRAWING_AREA_FIELD_SIZE; + gint tile_size = config_keys_get_tile_size (); + + cairo_set_line_width (cr, 1.0); + cairo_set_operator (cr, CAIRO_OPERATOR_XOR); + cairo_set_source_rgba (cr, 0, 0, 0, 0.5); + cairo_translate (cr, 0.5, 0.5); + + x = -tile_size / 2; + while (x >= -field_size) + x -= tile_size; + + for (; x <= field_size; x += tile_size) { + cairo_move_to (cr, x, -field_size); + cairo_line_to (cr, x, field_size); + cairo_move_to (cr, -field_size, x); + cairo_line_to (cr, field_size, x); + } + + cairo_stroke (cr); +} + +void +pixel_grid_layer_draw_func ( + SDALayer *layer, + cairo_t *cr, + gpointer user_data +) { + gint x; + gint field_size = SPRITE_DRAWING_AREA_FIELD_SIZE; + + cairo_set_line_width (cr, 0.1); + cairo_set_source_rgb (cr, 0, 0, 0); + + for (x = -field_size; x <= field_size; ++x) { + cairo_move_to (cr, x, -field_size); + cairo_line_to (cr, x, field_size); + cairo_move_to (cr, -field_size, x); + cairo_line_to (cr, field_size, x); + } + + cairo_stroke (cr); +} |