[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/sketch-mode ccff908 03/38: Implement toggle grid
From: |
ELPA Syncer |
Subject: |
[elpa] externals/sketch-mode ccff908 03/38: Implement toggle grid |
Date: |
Wed, 15 Sep 2021 16:57:33 -0400 (EDT) |
branch: externals/sketch-mode
commit ccff908fe722883c64719c649866ba89724f850a
Author: Daniel Nicolai <dalanicolai@gmail.com>
Commit: Daniel Nicolai <dalanicolai@gmail.com>
Implement toggle grid
---
sketch-mode.el | 86 ++++++++++++++++++++++++++++++++++++++++------------------
1 file changed, 59 insertions(+), 27 deletions(-)
diff --git a/sketch-mode.el b/sketch-mode.el
index b2c4f40..480b36d 100644
--- a/sketch-mode.el
+++ b/sketch-mode.el
@@ -37,7 +37,13 @@
;; TODO maybe add keybindings (save/bind transient setting to specific 'mouse
keys')
-;; TODO add functionality to toggle grid
+;; DONE add functionality to toggle grid
+
+;; TODO implement undo mechanism
+
+;; TODO add remove (objects) functionality (see `svg-remove')
+
+;; TODO add clipping fuctionality (see `svg-clip-path')
;; NOTE this is a most straightforward sketch-mode. A more advanced/general
version
;; could implement a drawing DSL based on nodes (a la tikz/asymptote etc.)
@@ -54,9 +60,13 @@
"Default size for sketch canvas.
Cons cell with car and cdr both integers, respectively
representing the image width and image height
-(default: `'(800 . 600)')."
+(default: '(800 . 600))."
:type '(cons integer integer))
+(defcustom sketch-show-grid t
+ "When non-nil, show grid lines (default: t)."
+ :type 'boolean)
+
(defcustom sketch-default-grid-parameter 25
"Default grid line separation distance (integer)."
:type 'integer)
@@ -130,7 +140,8 @@ STOPS is a list of percentage/color pairs."
"Create svg images using the mouse."
nil "sketch-mode"
'(([drag-mouse-1] . sketch-interactively)
- ([C-S-drag-mouse-1] . sketch-interactively)))
+ ([C-S-drag-mouse-1] . sketch-interactively)
+ ("" . sketch-transient)))
(defun sketch--circle-radius (start-coords end-coords)
@@ -154,25 +165,31 @@ STOPS is a list of percentage/color pairs."
(defun sketch--create-canvas (width height &optional grid-param)
"Create canvas for drawing svg using the mouse."
(defvar svg)
- (insert-image (let ((width width)
- (height height))
- (setq svg (svg-create width height :stroke "gray"))
- (svg-marker svg "arrow" 8 8 "black" t)
- (svg-rectangle svg 0 0 width height :fill "white")
- (unless (or (not grid-param) (= grid-param 0) )
- (let ((dash t))
- (dotimes (x (1- (/ width grid-param)))
- (let ((pos (* (1+ x) grid-param)))
- (svg-line svg pos 0 pos height :stroke-dasharray
(when dash "2,4"))
- (setq dash (if dash nil t)))))
- (let ((dash t))
- (dotimes (x (1- (/ height grid-param)))
- (let ((pos (* (1+ x) grid-param)))
- (svg-line svg 0 pos width pos :stroke-dasharray
(when dash "2,4"))
- (setq dash (if dash nil t))))))
- (svg-image svg :pointer 'arrow :grid-param grid-param)))
+ (defvar svg-canvas)
+ (defvar svg-grid)
+ (defvar svg-sketch)
+ (insert-image
+ (let ((width width)
+ (height height))
+ (setq svg-canvas (svg-create width height :stroke "gray"))
+ (svg-marker svg-canvas "arrow" 8 8 "black" t)
+ (svg-rectangle svg-canvas 0 0 width height :fill "white")
+ (setq svg-grid (svg-create width height))
+ (let ((dash t))
+ (dotimes (x (1- (/ width grid-param)))
+ (let ((pos (* (1+ x) grid-param)))
+ (svg-line svg-grid pos 0 pos height :stroke-dasharray (when dash
"2,4"))
+ (setq dash (if dash nil t)))))
+ (let ((dash t))
+ (dotimes (x (1- (/ height grid-param)))
+ (let ((pos (* (1+ x) grid-param)))
+ (svg-line svg-grid 0 pos width pos :stroke-dasharray (when dash
"2,4"))
+ (setq dash (if dash nil t)))))
+ (setq svg (append svg-canvas (when sketch-show-grid (cddr svg-grid))))
+ (svg-image svg :pointer 'arrow :grid-param grid-param)))
(sketch-mode)
- (call-interactively 'sketch-transient))
+ (call-interactively 'sketch-transient)
+ (setq svg-sketch (svg-create width height)))
;;;###autoload
(defun sketch (arg)
@@ -181,12 +198,13 @@ With prefix argument, "
(interactive "P")
(let ((width (if arg (car sketch-default-image-size) (read-number "Enter
width: ") ))
(height (if arg 600 (read-number "Enter height: ")))
- (grid-param (if arg 25 (read-number "Enter grid parameter (enter 0 for
no grid): ")))
(buffer (get-buffer "*sketch")))
(if buffer
(progn (switch-to-buffer buffer)
(call-interactively 'tutorial-transient))
(switch-to-buffer (get-buffer-create "*sketch"))
+ (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))))
@@ -284,9 +302,12 @@ With prefix argument, "
[("w" "stroke-width" sketch-stroke-width)]
[("m" "end-marker" sketch-object-marker)]]
["Snap-to-grid"
- ("s" "Snap to grid" sketch-snap)]
+ ("s" "Snap to grid" sketch-snap)
+ ("t" "Toggle grid" sketch-toggle-grid)]
["Commands"
- [([drag-mouse-1] "Sketch" sketch-interactively-1)]
+ [([drag-mouse-1] "Sketch" sketch-interactively-1)
+ ("u" "Undo" sketch-undo)
+ ("r" "Redo" sketch-redo)]
[("d" "Show definition" sketch-show-definition)
("D" "Copy definition" sketch-copy-definition)
("S" "Save image" sketch-save)]]
@@ -333,6 +354,18 @@ With prefix argument, "
:choices '("t")
:default "nil")
+(defun sketch-toggle-grid ()
+ (interactive)
+ (setq sketch-show-grid (if sketch-show-grid 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)))
+ (erase-buffer) ;; a (not exact) alternative is to use (kill-backward-chars 1)
+ (insert-image (svg-image svg :pointer 'arrow :grid-param grid-param)))
+
(transient-define-suffix sketch-interactively-1 (event)
(interactive "@e")
(let* ((args (when transient-current-prefix (transient-args
'sketch-transient)))
@@ -366,9 +399,8 @@ With prefix argument, "
(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 `(,@(cdr command-and-coords)
,@object-props))
- (kill-backward-chars 1)
- (insert-image (svg-image svg :pointer 'arrow :grid-param grid-param))))
+ (apply (car command-and-coords) svg-sketch `(,@(cdr command-and-coords)
,@object-props))
+ (sketch-redraw)))
;; (defun sketch-interactively (event)
;; "Draw object interactively, interpreting mouse event."
- [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 <=
- [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, 2021/09/15
- [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