summaryrefslogtreecommitdiff
path: root/saedit/drawfuncs.c
diff options
context:
space:
mode:
Diffstat (limited to 'saedit/drawfuncs.c')
-rw-r--r--saedit/drawfuncs.c107
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);
+}