[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/svg-clock 99c291f 02/18: 2011-09-26 Ulf Jasper <address
From: |
Stefan Monnier |
Subject: |
[elpa] externals/svg-clock 99c291f 02/18: 2011-09-26 Ulf Jasper <address@hidden> |
Date: |
Tue, 1 Dec 2020 17:26:01 -0500 (EST) |
branch: externals/svg-clock
commit 99c291f4eee1e69cdfa1ac5a4829a548157f6999
Author: Ulf Jasper <ulf.jasper@web.de>
Commit: Ulf Jasper <ulf.jasper@web.de>
2011-09-26 Ulf Jasper <ulf.jasper@web.de>
* elpa/packages/svg-clock/svg-clock.el (svg-clock-version):
Changed to "0.2"
(svg-clock-size): Add automatic-fit-to-window option.
(svg-clock-update, svg-clock-template): Formatting.
(svg-clock-set-size, svg-clock-grow, svg-clock-shrink)
(svg-clock-fit-window, svg-clock-stop, svg-clock-start)
(svg-clock-mode, svg-clock-mode-map): New
(svg-clock): Refactored.
---
svg-clock.el | 105 ++++++++++++++++++++++++++++++++++++++++++++++++-----------
1 file changed, 86 insertions(+), 19 deletions(-)
diff --git a/svg-clock.el b/svg-clock.el
index 68a1d1e..3c9f208 100644
--- a/svg-clock.el
+++ b/svg-clock.el
@@ -4,7 +4,7 @@
;; Author: Ulf Jasper <ulf.jasper@web.de>
;; Created: 22. Sep. 2011
-;; Keywords: demo
+;; Keywords: demo, svg, clock
;; This file is part of GNU Emacs.
@@ -40,11 +40,14 @@
;;; History:
+;; 0.2 (2011-09-26)
+;; - Added automatic resizing. One clock fits all.
+
;; 0.1 (2011-09-22)
;; - Initial release.
;;; Code:
-(defconst svg-clock-version "0.1" "Version number of `svg-clock'.")
+(defconst svg-clock-version "0.2" "Version number of `svg-clock'.")
(require 'image-mode)
@@ -52,9 +55,12 @@
"svg-clock"
:group 'applications)
-(defcustom svg-clock-size 250
- "Size (width and height) of the clock, in pixels."
- :type 'integer
+(defcustom svg-clock-size t
+ "Size (width and height) of the clock.
+Either an integer which gives the clock size in pixels, or t
+which makes the clock fit to its window automatically."
+ :type '(choice (integer :tag "Fixed Size" :value 250)
+ (const :tag "Fit to window" t))
:group 'svg-clock)
(defvar svg-clock-timer nil)
@@ -132,7 +138,6 @@
<use xlink:href=\"#minute-ticks-b\"
transform=\"rotate(180, 50, 50)\" />
-
<use xlink:href=\"#hand-second\"
transform=\"rotate(%SECOND%, 50, 50)\">
</use>
@@ -143,7 +148,6 @@
transform=\"rotate(%HOUR%, 50, 50)\">
</use>
-
<circle cx=\"50\" cy=\"50\" r=\"3\" fill=\"%FG%\"/>
</g>
</defs>
@@ -152,6 +156,9 @@
</svg>"
"The template for drawing the `svg-clock'.")
+(defvar svg-clock--actual-size 100
+ "Actual size of the svg clock.")
+
(defun svg-clock-color-to-hex (colour)
"Return hex representation of COLOUR."
(let ((values (color-values colour)))
@@ -178,32 +185,92 @@ TIME must have the form (SECOND MINUTE HOUR ...), as
returned by `decode-time'."
(svg-clock-replace "%BG%" bg-colour)
(svg-clock-replace "%FG%" fg-colour)
- (svg-clock-replace "%HOUR%" (format "%f" (+ (* hours 30) (/ minutes
2.0))))
- (svg-clock-replace "%MINUTE%" (format "%f" (+ (* minutes 6)
- (/ seconds 10.0))))
+ (svg-clock-replace "%HOUR%"
+ (format "%f" (+ (* hours 30) (/ minutes 2.0))))
+ (svg-clock-replace "%MINUTE%"
+ (format "%f" (+ (* minutes 6) (/ seconds 10.0))))
(svg-clock-replace "%SECOND%" (format "%f" (* seconds 6)))
- (svg-clock-replace "%SIZE%" (format "%d" svg-clock-size))
- (svg-clock-replace "%SCALE%" (format "%f" (/ svg-clock-size 100.0)))
+ (svg-clock-replace "%SIZE%" (format "%d" svg-clock--actual-size))
+ (svg-clock-replace "%SCALE%"
+ (format "%f" (/ svg-clock--actual-size 100.0)))
+
(image-toggle-display-image))))
(defun svg-clock-update ()
"Update the clock."
+ (if (integerp svg-clock-size)
+ (setq svg-clock--actual-size svg-clock-size)
+ (svg-clock-fit-window))
(svg-clock-do-update (decode-time (current-time))))
-;;;###autoload
-(defun svg-clock ()
- "Start/stop the svg clock."
+(defun svg-clock-set-size (size &optional perform-update)
+ "Set the SIZE of the clock and optionally PERFORM-UPDATE."
+ (setq svg-clock--actual-size size)
+ (if perform-update
+ (svg-clock-update)))
+
+(defun svg-clock-grow ()
+ "Enlarge the size of the svg clock by 10 pixesl.
+If `svg-clock-size' is t this command has no effect."
+ (interactive)
+ (svg-clock-set-size (+ 10 svg-clock--actual-size) t))
+
+(defun svg-clock-shrink ()
+ "Reduce the size of the svg clock by 10 pixesl.
+If `svg-clock-size' is t this command has no effect."
(interactive)
+ (svg-clock-set-size (max 10 (- svg-clock--actual-size 10)) t))
+
+(defun svg-clock-fit-window (&optional perform-update)
+ "Make the svg clock fill the whole window it is displayed in.
+Optionally PERFORM-UPDATE immediately."
+ (interactive)
+ (let ((clock-win (get-buffer-window "*clock*")))
+ (if clock-win
+ (let* ((coords (window-inside-pixel-edges clock-win))
+ (width (- (nth 2 coords) (nth 0 coords)))
+ (height (- (nth 3 coords) (nth 1 coords))))
+ (svg-clock-set-size (min width height) perform-update)))))
+
+(defun svg-clock-stop ()
+ "Stop the svg clock and hide it."
+ (interactive)
+ (if (not svg-clock-timer)
+ (message "svg-clock is not running.")
+ (cancel-timer svg-clock-timer)
+ (setq svg-clock-timer nil)
+ (replace-buffer-in-windows "*clock*")
+ (message "Clock stopped")))
+
+(defun svg-clock-start ()
+ "Start the svg clock."
(if svg-clock-timer
- (progn
- (cancel-timer svg-clock-timer)
- (setq svg-clock-timer nil)
- (message "Clock stopped"))
+ (message "svg-clock is running already")
(switch-to-buffer (get-buffer-create "*clock*"))
+ (unless (integerp svg-clock-size)
+ (svg-clock-fit-window))
(setq svg-clock-timer
(run-with-timer 0 1 'svg-clock-update))
+ (svg-clock-mode)
(message "Clock started")))
+(define-derived-mode svg-clock-mode fundamental-mode "svg clock"
+ "Major mode for the svg-clock buffer.
+\\{svg-clock-mode-map}")
+
+(define-key svg-clock-mode-map [?+] 'svg-clock-grow)
+(define-key svg-clock-mode-map [?-] 'svg-clock-shrink)
+(define-key svg-clock-mode-map [?q] 'svg-clock-stop)
+(define-key svg-clock-mode-map [?f] 'svg-clock-fit-window)
+
+;;;###autoload
+(defun svg-clock ()
+ "Start/stop the svg clock."
+ (interactive)
+ (if svg-clock-timer
+ (svg-clock-stop)
+ (svg-clock-start)))
+
(provide 'svg-clock)
;;; svg-clock.el ends here
- [elpa] externals/svg-clock 039aac6 18/18: * .gitignore: New file, (continued)
- [elpa] externals/svg-clock 039aac6 18/18: * .gitignore: New file, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock d1aeadd 11/18: There's no longer an svg-def function in svg.el, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock ba28d97 09/18: Bump version number to 1.0 and make changes public, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 284d123 14/18: Fix requirements and version numbers, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock ea9302b 07/18: * packages/svg-clock/svg-clock.el (svg-clock-do-update, svg-clock-start): Don't, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 3d9cd0e 15/18: Copy svg--def to manipulate the DOM directly from svg-clock.el, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 534946a 06/18: Fixed image-mode issue. Changed version to 0.5., Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 03ea7e3 01/18: New package svg-clock., Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 48454df 04/18: svg-clock: Disable buffer undo, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock dc73e08 13/18: Allow controlling whether to show the seconds and the face, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 99c291f 02/18: 2011-09-26 Ulf Jasper <address@hidden>,
Stefan Monnier <=
- [elpa] externals/svg-clock 5e4e62e 08/18: svg-clock.el: Refactoring. Use 'svg.el' and 'dom.el'., Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 9f4be3e 05/18: 2012-01-29 Ulf Jasper <address@hidden>, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 1c04475 16/18: Bump version after last fix, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 301259c 10/18: Fix some quoting problems in doc strings, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock c8fc54f 12/18: Pick the right size when on a scaled display, Stefan Monnier, 2020/12/01
- [elpa] externals/svg-clock 55d2f18 17/18: Revert "Copy svg--def to manipulate the DOM directly from svg-clock.el", Stefan Monnier, 2020/12/01