From 49b61db891843223d8d47dc68ae3158035ebd3ae Mon Sep 17 00:00:00 2001 From: Darshan Phaldesai <51489635+luiq54@users.noreply.github.com> Date: Tue, 9 Jun 2020 23:43:34 +0530 Subject: [PATCH] Added the ability to draw on Tiling Mode Previews (#259) Also added hovering brush preview for same --- src/Autoload/DrawingAlgos.gd | 17 +++++++++++++---- src/Canvas.gd | 15 +++++++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/Autoload/DrawingAlgos.gd b/src/Autoload/DrawingAlgos.gd index ff22e6d3a..858046336 100644 --- a/src/Autoload/DrawingAlgos.gd +++ b/src/Autoload/DrawingAlgos.gd @@ -17,6 +17,11 @@ func draw_pixel_blended(sprite : Image, pos : Vector2, color : Color, pen_pressu var x_max = Global.current_project.x_max var y_min = Global.current_project.y_min var y_max = Global.current_project.y_max + +# #Check if Tiling is enabled and whether mouse is in TilingPreviews + if Global.tile_mode and point_in_rectangle(pos,Vector2( - Global.current_project.size.x - 1 , - Global.current_project.size.y -1 ), Vector2(2 * Global.current_project.size.x, 2 * Global.current_project.size.y)): + pos = pos.posmodv(Global.current_project.size) + if !point_in_rectangle(pos, Vector2(x_min - 1, y_min - 1), Vector2(x_max, y_max)): return @@ -68,10 +73,10 @@ func draw_brush(sprite : Image, pos : Vector2, color : Color, current_mouse_butt drawer.v_mirror = vertical_mirror if brush_type == Global.Brush_Types.PIXEL || current_action == Global.Tools.LIGHTENDARKEN: - var start_pos_x = pos.x - (brush_size >> 1) - var start_pos_y = pos.y - (brush_size >> 1) - var end_pos_x = start_pos_x + brush_size - var end_pos_y = start_pos_y + brush_size + var start_pos_x = floor(pos.x - (brush_size >> 1)) + var start_pos_y = floor(pos.y - (brush_size >> 1)) + var end_pos_x = floor(start_pos_x + brush_size) + var end_pos_y = floor(start_pos_y + brush_size) for cur_pos_x in range(start_pos_x, end_pos_x): for cur_pos_y in range(start_pos_y, end_pos_y): @@ -99,6 +104,10 @@ func draw_brush(sprite : Image, pos : Vector2, color : Color, current_mouse_butt var custom_brush_size := custom_brush_image.get_size() - Vector2.ONE pos = pos.floor() + # #Check if Tiling is enabled and whether mouse is in TilingPreviews + if Global.tile_mode and point_in_rectangle(pos,Vector2( - Global.current_project.size.x - 1 , - Global.current_project.size.y -1 ), Vector2(2 * Global.current_project.size.x, 2 * Global.current_project.size.y)): + pos = pos.posmodv(Global.current_project.size) + var dst := rectangle_center(pos, custom_brush_size) var src_rect := Rect2(Vector2.ZERO, custom_brush_size + Vector2.ONE) # Rectangle with the same size as the brush, but at cursor's position diff --git a/src/Canvas.gd b/src/Canvas.gd index 9936bb7cb..325642dc7 100644 --- a/src/Canvas.gd +++ b/src/Canvas.gd @@ -70,11 +70,26 @@ func _draw() -> void: var start_pos_x = mouse_pos.x - (Global.brush_sizes[i] >> 1) var start_pos_y = mouse_pos.y - (Global.brush_sizes[i] >> 1) draw_rect(Rect2(start_pos_x, start_pos_y, Global.brush_sizes[i], Global.brush_sizes[i]), Color.blue, false) + #Check for tile mode + if Global.tile_mode and point_in_rectangle(mouse_pos,Vector2( - Global.current_project.size.x - 1 , - Global.current_project.size.y -1 ), Vector2(2 * Global.current_project.size.x, 2 * Global.current_project.size.y)): + if !point_in_rectangle(mouse_pos, Vector2(Global.current_project.x_min - 1,Global.current_project.y_min - 1), Vector2(Global.current_project.x_max,Global.current_project.y_max)): + var new_start_pos_x = posmod(start_pos_x,Global.current_project.size.x) + var new_start_pos_y = posmod(start_pos_y,Global.current_project.size.y) + draw_rect(Rect2(new_start_pos_x, new_start_pos_y, Global.brush_sizes[i], Global.brush_sizes[i]), Color.green, false) elif Global.current_brush_types[i] == Global.Brush_Types.CIRCLE || Global.current_brush_types[i] == Global.Brush_Types.FILLED_CIRCLE: if Global.current_tools[i] == Global.Tools.PENCIL || Global.current_tools[i] == Global.Tools.ERASER: draw_set_transform(mouse_pos, rotation, scale) for rect in Global.left_circle_points: draw_rect(Rect2(rect, Vector2.ONE), Color.blue, false) + + #Check for tile mode + if Global.tile_mode and point_in_rectangle(mouse_pos,Vector2( - Global.current_project.size.x - 1 , - Global.current_project.size.y -1 ), Vector2(2 * Global.current_project.size.x, 2 * Global.current_project.size.y)): + if !point_in_rectangle(mouse_pos, Vector2(Global.current_project.x_min - 1,Global.current_project.y_min - 1), Vector2(Global.current_project.x_max,Global.current_project.y_max)): + var pos = mouse_pos.posmodv(Global.current_project.size) + if pos != mouse_pos: + draw_set_transform(pos,rotation,scale) + for rect in Global.left_circle_points: + draw_rect(Rect2(rect, Vector2.ONE), Color.green, false) draw_set_transform(position, rotation, scale) else: if Global.current_tools[i] == Global.Tools.PENCIL || Global.current_tools[i] == Global.Tools.ERASER: