[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/sketch-mode 32559c4 06/38: Add remove functionality (id
From: |
ELPA Syncer |
Subject: |
[elpa] externals/sketch-mode 32559c4 06/38: Add remove functionality (id's and labels) |
Date: |
Wed, 15 Sep 2021 16:57:34 -0400 (EDT) |
branch: externals/sketch-mode
commit 32559c4c0e47de52f74ea2f661a5c4f029e08764
Author: Daniel Nicolai <dalanicolai@gmail.com>
Commit: Daniel Nicolai <dalanicolai@gmail.com>
Add remove functionality (id's and labels)
---
sketch-mode.el | 72 +++++++++++++++++++++++++++++++++++++++++++++++++-----
sketch-mode.png | Bin 0 -> 65687 bytes
sketch-scratch.el | 7 ++++++
3 files changed, 73 insertions(+), 6 deletions(-)
diff --git a/sketch-mode.el b/sketch-mode.el
index 250f78e..5215e43 100644
--- a/sketch-mode.el
+++ b/sketch-mode.el
@@ -67,6 +67,10 @@ representing the image width and image height
"When non-nil, show grid lines (default: t)."
:type 'boolean)
+(defcustom sketch-show-labels nil
+ "When non-nil, show object labels (default: t)."
+ :type 'boolean)
+
(defcustom sketch-default-grid-parameter 25
"Default grid line separation distance (integer)."
:type 'integer)
@@ -137,7 +141,9 @@ STOPS is a list of percentage/color pairs."
(fill . ,(or color "black"))))))))))
(define-minor-mode sketch-mode
- "Create svg images using the mouse."
+ "Create svg images using the mouse.
+In sketch-mode buffer press \\[sketch-transient] to activate the
+transient."
nil "sketch-mode"
'(([drag-mouse-1] . sketch-interactively)
([C-S-drag-mouse-1] . sketch-interactively)
@@ -204,6 +210,7 @@ values"
(let ((width (if arg (car sketch-default-image-size) (read-number "Enter
width: ") ))
(height (if arg 600 (read-number "Enter height: "))))
(switch-to-buffer (get-buffer-create "*sketch*"))
+ (defvar-local sketch-elements nil)
(defvar-local grid-param 25)
(setq grid-param (if arg 25 (read-number "Enter grid parameter (enter
0 for no grid): ")))
(sketch--create-canvas width height grid-param)))))
@@ -292,7 +299,7 @@ values"
(propertize (apply 'color-rgb-to-hex (color-name-to-rgb
default))
'face 'transient-inactive-argument))))))
-(transient-define-prefix sketch-transient ()
+(transient-define-prefix sketch-transient ()
"Some Emacs magic"
:transient-suffix 'transient--do-call
:transient-non-suffix 'transient--do-stay
@@ -302,11 +309,14 @@ values"
("C" "fill-color" sketch-fill-color)]
[("w" "stroke-width" sketch-stroke-width)]
[("m" "end-marker" sketch-object-marker)]]
- ["Snap-to-grid"
+ ["Grid"
("s" "Snap to grid" sketch-snap)
- ("t" "Toggle grid" sketch-toggle-grid)]
+ ("g" "Toggle grid" sketch-toggle-grid)]
+ ["Labels"
+ ("l" "Toggle labels" sketch-toggle-labels)]
["Commands"
[([drag-mouse-1] "Sketch" sketch-interactively-1)
+ ("R" "Remove object" sketch-remove-object)
("u" "Undo" sketch-undo)
("r" "Redo" sketch-redo)]
[("d" "Show definition" sketch-show-definition)
@@ -360,10 +370,55 @@ values"
(setq sketch-show-grid (if sketch-show-grid nil t))
(sketch-redraw))
+(defun sketch-labels ()
+ (interactive)
+ (let ((svg-labels (svg-create 100 100)))
+ (mapc (lambda (node)
+ (pcase (car node)
+ ('rect (svg-text svg-labels
+ (dom-attr node 'id)
+ :x (+ (dom-attr node 'x) 2)
+ :y (+ (dom-attr node 'y)
+ (- (dom-attr node 'height) 2))
+ :font-size 20
+ :stroke "red"
+ :fill "red"))
+ ('line (svg-text svg-labels
+ (dom-attr node 'id)
+ :x (dom-attr node 'x1)
+ :y (dom-attr node 'y1)
+ :font-size 20
+ :stroke "red"
+ :fill "red"))))
+ (cddr svg-sketch))
+ (cddr svg-labels)))
+
+(defun sketch-labels-list ()
+ (mapcar (lambda (node)
+ (dom-attr node 'id))
+ (cddr svg-sketch)))
+
+(defun sketch-create-label ()
+ (interactive)
+ (let* ((alphabet "abcdefghijklmnopqrstuvwxyz")
+ (labels-list (mapcar 'string (concat alphabet (upcase alphabet))))
+ (labels (sketch-labels-list)))
+ (while (member (car labels-list) labels)
+ (setq labels-list (cdr labels-list)))
+ (car labels-list)))
+
+(defun sketch-toggle-labels ()
+ (interactive)
+ (setq sketch-show-labels (if sketch-show-labels nil t))
+ (sketch-redraw))
+
(defun sketch-redraw ()
(unless sketch-mode
(user-error "Not in sketch-mode buffer"))
- (setq svg (append svg-canvas (when sketch-show-grid (cddr svg-grid)) (cddr
svg-sketch)))
+ (setq svg (append svg-canvas
+ (when sketch-show-grid (cddr svg-grid))
+ (cddr svg-sketch)
+ (when sketch-show-labels (sketch-labels))))
(erase-buffer) ;; a (not exact) alternative is to use (kill-backward-chars 1)
(insert-image (svg-image svg :pointer 'arrow :grid-param grid-param)))
@@ -401,9 +456,14 @@ values"
(car start-coords) (cdr
start-coords)
(sketch--circle-radius
start-coords end-coords)))
("ellipse" `(svg-ellipse
,@(sketch--ellipse-coords start-coords end-coords))))))
- (apply (car command-and-coords) svg-sketch `(,@(cdr command-and-coords)
,@object-props))
+ (apply (car command-and-coords) svg-sketch `(,@(cdr command-and-coords)
,@object-props :id ,(sketch-create-label)))
(sketch-redraw)))
+(transient-define-suffix sketch-remove-object ()
+ (interactive)
+ (svg-remove svg-sketch (completing-read "Remove element with id: "
+ (sketch-labels-list)))
+ (sketch-redraw))
;; (defun sketch-interactively (event)
;; "Draw object interactively, interpreting mouse event."
;; (interactive "e")
diff --git a/sketch-mode.png b/sketch-mode.png
new file mode 100644
index 0000000..1be0fc4
Binary files /dev/null and b/sketch-mode.png differ
diff --git a/sketch-scratch.el b/sketch-scratch.el
new file mode 100644
index 0000000..1108976
--- /dev/null
+++ b/sketch-scratch.el
@@ -0,0 +1,7 @@
+(setq svg-scratch (svg-create 100 100))
+(svg-rectangle svg-scratch 25 25 50 50 :id "a")
+(svg-line svg-scratch 25 25 75 75 :id "b" :stroke-color "black")
+
+;; (svg-remove svg-scratch "a")
+
+(insert-image (svg-image (append svg-scratch (nthcdr 2 svg-labels))))
- [elpa] branch externals/sketch-mode created (now aaac04d), ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 3c8f9f1 05/38: Add documentation (prepare for publishing), ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 04dd1db 07/38: Add sketch fonts, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode ccff908 03/38: Implement toggle grid, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 96ce92b 02/38: First sketch of sketch-mode, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode d3b1831 14/38: Move transient quit for more sketch space, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode a715b8a 12/38: Reformat/compactify transient, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 35255d0 04/38: Implement undo/redo and show/edit/(re)load definition, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 56d7b5d 08/38: Create FUNDING.yml, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode da9e1d7 13/38: Implement help-echo showing coordinates, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 32559c4 06/38: Add remove functionality (id's and labels),
ELPA Syncer <=
- [elpa] externals/sketch-mode 5c37145 09/38: Add sponsor button, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode b944693 10/38: Add crop image feature AND add text transient into main, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode f82ed74 11/38: Update documentation (add screencast), ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 4d78311 18/38: Experimental object modify tabulated list, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode d42f84a 22/38: Add svg and sketch group definitions, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode e3c16c7 26/38: Merge branch 'implement-layers' (incl. undo-tree undo/redo), ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 951c284 28/38: Fix dot marker and rename (make internal) sketch-snap-to-grid, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode f0465ec 29/38: Remove sketch-interactive function, ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode 4c6a675 36/38: Fix load definition functionality (also set layers list), ELPA Syncer, 2021/09/15
- [elpa] externals/sketch-mode bcb99c9 35/38: Implement text label and modify feature, ELPA Syncer, 2021/09/15