diff --git a/assets/images/toolErase.png b/assets/images/toolErase.png new file mode 100644 index 0000000..39c5233 Binary files /dev/null and b/assets/images/toolErase.png differ diff --git a/assets/text/TODO b/assets/text/TODO index 59bcd43..5e3c725 100644 --- a/assets/text/TODO +++ b/assets/text/TODO @@ -21,10 +21,11 @@ High-priority list: 1) bug: a) select line tool b) set origin point c) move mouse about d) incr brush size e) set target point d) undo - bug: a) new canvas/startup b) place rect c) move mouse d) undo status changes - bug: a) text tool b) paste text c) undo -2) bug: a) start w/ spoke-vxplion.txt b) scroll down c) fix w/ canvas resize -3) add hotkeys.txt mIRC art canvas to help menu -4) tools: erase, pick, unicode block elements +2) bug: a) new canvas/startup b) place rect c) move mouse d) undo status changes +3) bug: a) start w/ spoke-vxplion.txt b) scroll down c) fix w/ canvas resize +4) add hotkeys.txt mIRC art canvas to help menu +5) tools: pick colour, unicode block elements +6) bug: a) text tool b) paste text c) undo +7) bug: a) tile once b) tile twice vim:ff=dos tw=0 diff --git a/assets/text/hotkeys.txt b/assets/text/hotkeys.txt index 11c2899..cd2bac7 100644 --- a/assets/text/hotkeys.txt +++ b/assets/text/hotkeys.txt @@ -1,6 +1,6 @@ 0-9, 0-5, 6 Set foreground colour to #0-9, #10-15, transparent colour, resp. 0-9, 0-5, 6 Set background colour to #0-9, #10-15, transparent colour, resp. - C, U, F, L, R, E, T Switch to circle, cursor, fill, line, rectangle, object, text tool + C, U, E, F, L, R, E, T Switch to circle, cursor, erase, fill, line, rectangle, object, text tool I Flip colours N New canvas O Open mIRC art file diff --git a/libroar/RoarCanvasCommands.py b/libroar/RoarCanvasCommands.py index eb50996..b64323d 100644 --- a/libroar/RoarCanvasCommands.py +++ b/libroar/RoarCanvasCommands.py @@ -129,7 +129,7 @@ class RoarCanvasCommands(RoarCanvasCommandsFile, RoarCanvasCommandsEdit, RoarCan self.canvasUndo, self.canvasRedo, NID_TOOLBAR_HSEP, self.canvasCut, self.canvasCopy, self.canvasPaste, self.canvasDelete, NID_TOOLBAR_HSEP, self.canvasAssetsWindowHide, self.canvasAssetsWindowShow, NID_TOOLBAR_HSEP, - self.canvasTool(self.canvasTool, 1), self.canvasTool(self.canvasTool, 5), self.canvasTool(self.canvasTool, 0), self.canvasTool(self.canvasTool, 2), self.canvasTool(self.canvasTool, 3), self.canvasTool(self.canvasTool, 6), self.canvasTool(self.canvasTool, 4), + self.canvasTool(self.canvasTool, 1), self.canvasTool(self.canvasTool, 6), self.canvasTool(self.canvasTool, 0), self.canvasTool(self.canvasTool, 3), self.canvasTool(self.canvasTool, 4), self.canvasTool(self.canvasTool, 7), self.canvasTool(self.canvasTool, 5), self.canvasTool(self.canvasTool, 2), ]) toolBars.append( [self.canvasColour(self.canvasColour, 0), self.canvasColour(self.canvasColour, 1), self.canvasColour(self.canvasColour, 2), self.canvasColour(self.canvasColour, 3), diff --git a/libroar/RoarCanvasCommandsTools.py b/libroar/RoarCanvasCommandsTools.py index 3343296..18bde4b 100644 --- a/libroar/RoarCanvasCommandsTools.py +++ b/libroar/RoarCanvasCommandsTools.py @@ -6,6 +6,7 @@ from GuiFrame import GuiSelectDecorator from ToolCircle import ToolCircle +from ToolErase import ToolErase from ToolFill import ToolFill from ToolLine import ToolLine from ToolObject import ToolObject @@ -16,18 +17,19 @@ import wx class RoarCanvasCommandsTools(): @GuiSelectDecorator(0, "Circle", "&Circle", ["toolCircle.png"], [wx.ACCEL_CTRL, ord("C")], False) @GuiSelectDecorator(1, "Cursor", "C&ursor", ["toolCursor.png"], [wx.ACCEL_CTRL, ord("U")], False) - @GuiSelectDecorator(2, "Fill", "&Fill", ["toolFill.png"], [wx.ACCEL_CTRL, ord("F")], False) - @GuiSelectDecorator(3, "Line", "&Line", ["toolLine.png"], [wx.ACCEL_CTRL, ord("L")], False) - @GuiSelectDecorator(4, "Object", "&Object", ["toolObject.png"], [wx.ACCEL_CTRL, ord("E")], False) - @GuiSelectDecorator(5, "Rectangle", "&Rectangle", ["toolRect.png"], [wx.ACCEL_CTRL, ord("R")], True) - @GuiSelectDecorator(6, "Text", "&Text", ["toolText.png"], [wx.ACCEL_CTRL, ord("T")], False) + @GuiSelectDecorator(2, "Erase", "&Erase", ["toolErase.png"], [wx.ACCEL_CTRL, ord("A")], False) + @GuiSelectDecorator(3, "Fill", "&Fill", ["toolFill.png"], [wx.ACCEL_CTRL, ord("F")], False) + @GuiSelectDecorator(4, "Line", "&Line", ["toolLine.png"], [wx.ACCEL_CTRL, ord("L")], False) + @GuiSelectDecorator(5, "Object", "&Object", ["toolObject.png"], [wx.ACCEL_CTRL, ord("E")], False) + @GuiSelectDecorator(6, "Rectangle", "&Rectangle", ["toolRect.png"], [wx.ACCEL_CTRL, ord("R")], True) + @GuiSelectDecorator(7, "Text", "&Text", ["toolText.png"], [wx.ACCEL_CTRL, ord("T")], False) def canvasTool(self, f, idx): def canvasTool_(event): if (self.currentTool.__class__ == ToolObject) \ and (self.currentTool.toolState > self.currentTool.TS_NONE) \ and self.currentTool.external: self.parentCanvas.dropTarget.done() - self.lastTool, self.currentTool = self.currentTool, [ToolCircle, None, ToolFill, ToolLine, ToolObject, ToolRect, ToolText][idx] + self.lastTool, self.currentTool = self.currentTool, [ToolCircle, None, ToolErase, ToolFill, ToolLine, ToolObject, ToolRect, ToolText][idx] if self.currentTool != None: self.currentTool = self.currentTool() self.currentOperator, self.operatorState = None, None @@ -51,7 +53,7 @@ class RoarCanvasCommandsTools(): self.accels = () self.menus = ( ("&Tools", - self.canvasTool(self.canvasTool, 1), self.canvasTool(self.canvasTool, 5), self.canvasTool(self.canvasTool, 0), self.canvasTool(self.canvasTool, 2), self.canvasTool(self.canvasTool, 3), self.canvasTool(self.canvasTool, 6), self.canvasTool(self.canvasTool, 4), + self.canvasTool(self.canvasTool, 1), self.canvasTool(self.canvasTool, 6), self.canvasTool(self.canvasTool, 0), self.canvasTool(self.canvasTool, 3), self.canvasTool(self.canvasTool, 4), self.canvasTool(self.canvasTool, 7), self.canvasTool(self.canvasTool, 5), self.canvasTool(self.canvasTool, 2), ), ) self.toolBars = () diff --git a/libtools/ToolErase.py b/libtools/ToolErase.py new file mode 100644 index 0000000..4d865fb --- /dev/null +++ b/libtools/ToolErase.py @@ -0,0 +1,34 @@ +#!/usr/bin/env python3 +# +# ToolErase.py +# Copyright (c) 2018, 2019 Lucio Andrés Illanes Albornoz +# + +from Tool import Tool + +class ToolErase(Tool): + name = "Erase" + + # + # onMouseEvent(self, atPoint, brushColours, brushPos, brushSize, canvas, dispatchFn, eventDc, keyModifiers, mapPoint, mouseDragging, mouseLeftDown, mouseRightDown) + def onMouseEvent(self, atPoint, brushColours, brushPos, brushSize, canvas, dispatchFn, eventDc, keyModifiers, mapPoint, mouseDragging, mouseLeftDown, mouseRightDown): + brushColours, brushSize, dirty = list(brushColours), list(brushSize), False + if mouseRightDown: + brushColours = [brushColours[0], brushColours[0]] + else: + brushColours = [brushColours[1], brushColours[1]] + if brushSize[0] > 1: + brushSize[0] *= 2 + for brushRow in range(brushSize[1]): + for brushCol in range(brushSize[0]): + patchColours = [brushColours[1]] * 2 + patch = [mapPoint[0] + brushCol, mapPoint[1] + brushRow, *patchColours, 0, " "] + if mouseLeftDown or mouseRightDown: + if not dirty: + dirty = True + dispatchFn(eventDc, False, patch); dispatchFn(eventDc, True, patch); + else: + dispatchFn(eventDc, True, patch) + return True, dirty + +# vim:expandtab foldmethod=marker sw=4 ts=4 tw=120