[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/svg-lib 004ab08 05/32: Better handling of default style
From: |
ELPA Syncer |
Subject: |
[elpa] externals/svg-lib 004ab08 05/32: Better handling of default style + style simplification |
Date: |
Mon, 27 Sep 2021 16:57:46 -0400 (EDT) |
branch: externals/svg-lib
commit 004ab0876d0080fc9c2cfd8025ddca2c84d91215
Author: Nicolas P. Rougier <Nicolas.Rougier@inria.fr>
Commit: Nicolas P. Rougier <Nicolas.Rougier@inria.fr>
Better handling of default style + style simplification
---
svg-lib-demo.el | 22 +++----
svg-lib.el | 183 +++++++++++++++++++++++++++++++++-----------------------
2 files changed, 119 insertions(+), 86 deletions(-)
diff --git a/svg-lib-demo.el b/svg-lib-demo.el
index 8ace83d..ce3ae03 100644
--- a/svg-lib-demo.el
+++ b/svg-lib-demo.el
@@ -1,41 +1,41 @@
(dotimes (i 5)
(insert-image (svg-lib-tag "TODO" nil
- :family "Roboto Mono" :weight (* (+ i 2) 100))))
+ :font-family "Roboto Mono" :font-weight (* (+ i 2)
100))))
-
+
(dotimes (i 10)
- (insert-image (svg-lib-tag "TODO" nil :padding 1 :thickness (/ i 4.0))))
+ (insert-image (svg-lib-tag "TODO" nil :padding 1 :stroke (/ i 4.0))))
(dotimes (i 10)
- (insert-image (svg-lib-tag "TODO" nil :thickness 2 :radius i)))
+ (insert-image (svg-lib-tag "TODO" nil :stroke 2 :radius i)))
(dotimes (i 10)
(insert-image (svg-lib-progress (/ (+ i 1) 10.0) nil
- :width 5 :margin 1 :thickness 2 :padding 2)))
+ :width 5 :margin 1 :stroke 2 :padding 2)))
(insert-image (svg-lib-progress .75 nil
- :foreground "#999999" :stroke "#999999" :margin 0
- :background "#f0f0f0" :radius 0 :thickness .5 :padding 0))
+ :foreground "#999999" :background "#f0f0f0"
+ :margin 0 :radius 0 :stroke .5 :padding 0))
-(insert-image (svg-lib-progress 0.75 nil :radius 8 :thickness 2 :padding 0))
+(insert-image (svg-lib-progress 0.75 nil :radius 8 :stroke 2 :padding 0))
(dotimes (i 10)
- (insert-image (svg-lib-icon "material" "star" nil
- :scale (/ (+ i 1) 10.0))))
+ (insert-image (svg-lib-icon "material" "star" nil :scale (/ (+ i 1) 10.0))))
(insert-image (svg-lib-icon "material" "star" nil :radius 8
- :thickness 2 :scale 0.75 :padding 0))
+ :foreground "white" :background "black"
+ :stroke 0 :scale 0.75 :padding 0))
diff --git a/svg-lib.el b/svg-lib.el
index 74a8237..d2c5547 100644
--- a/svg-lib.el
+++ b/svg-lib.el
@@ -101,13 +101,41 @@ collection (there are way too many to store them)."
;; Default style for all objects
;; ---------------------------------------------------------------------
+(defun svg-lib-style-compute-default (&optional face)
+ "Compute the default style according to face (which defaults
+to the default face)."
+
+ (let* ((face (or face 'default))
+ (font-family (face-attribute face :family nil 'default))
+ (font-weight (face-attribute face :weight nil 'default))
+ (font-size (face-attribute face :height nil 'default))
+ (font-size (round (* font-size 0.085)))
+ (foreground (face-attribute face :foreground nil 'default))
+ (background (face-attribute face :background nil 'default)))
+
+ `(:background ,background
+ :foreground ,foreground
+
+ :padding 1 ;; In characters (tag and icons) or pixels
(progress)
+ :margin 1 ;; In chracters
+ :stroke 2 ;; In pixels
+ :radius 3 ;; In pixels
+ :width 20 ;; In characters
+ :height 0.90 ;; Ratio of text line height
+ :scale 0.75 ;; Icon scaling
+
+ :font-family ,font-family
+ :font-size ,font-size
+ :font-weight ,font-weight)))
+
(defcustom svg-lib-style-default
- '(:foreground "black" :background "white" :stroke "black"
- :thickness 2 :radius 3 :padding 1 :margin 1 :width 20 :scale 1.0
- :family "Roboto Mono" :height 12 :weight regular)
+ (svg-lib-style-compute-default)
"Default style"
+ :type '(plist :key-type (string :tag "Property")
+ :value-type (string :tag "Value"))
:group 'svg-lib)
+
;; Convert Emacs color to SVG color
;; ---------------------------------------------------------------------
(defun svg-lib-convert-color (color-name)
@@ -141,17 +169,15 @@ If COLOR-NAME is unknown to Emacs, then return COLOR-NAME
as-is."
(svg-lib-convert-color (plist-get style :foreground)))
(plist-put style :background
(svg-lib-convert-color (plist-get style :background)))
- (plist-put style :stroke
- (svg-lib-convert-color (plist-get style :stroke)))
;; Convert emacs font weights to SVG font weights
(let ((weights
'((thin . 100) (ultralight . 200) (light . 300)
(regular . 400) (medium . 500) (semibold . 600)
(bold . 700) (extrabold . 800) (black . 900))))
- (plist-put style :weight
- (or (cdr (assoc (plist-get style :weight) weights))
- (plist-get style :weight))))
+ (plist-put style :font-weight
+ (or (cdr (assoc (plist-get style :font-weight) weights))
+ (plist-get style :font-weight))))
style))
@@ -165,24 +191,27 @@ and style elements ARGS."
(style (if style (apply #'svg-lib-style nil style) default))
(style (if args (apply #'svg-lib-style style args) style))
- (foreground (plist-get style :foreground))
- (background (plist-get style :background))
- (stroke (plist-get style :stroke))
- (size (plist-get style :height))
- (family (plist-get style :family))
- (weight (plist-get style :weight))
- (radius (plist-get style :radius))
- (margin (plist-get style :margin))
- (padding (plist-get style :padding))
- (thickness (plist-get style :thickness))
+ (foreground (plist-get style :foreground))
+ (background (plist-get style :background))
+ (stroke (plist-get style :stroke))
+ (width (plist-get style :width))
+ (height (plist-get style :height))
+ (radius (plist-get style :radius))
+ (scale (plist-get style :scale))
+ (margin (plist-get style :margin))
+ (padding (plist-get style :padding))
+ (font-size (plist-get style :font-size))
+ (font-family (plist-get style :font-family))
+ (font-weight (plist-get style :font-weight))
(txt-char-width (window-font-width))
(txt-char-height (window-font-height))
- (ascent (aref (font-info (format "%s:%d" family size)) 8))
- (tag-char-width (aref (font-info (format "%s:%d" family size)) 11))
- (tag-char-height (aref (font-info (format "%s:%d" family size)) 3))
+ (font-info (font-info (format "%s:%d" font-family font-size)))
+ (ascent (aref font-info 8))
+ (tag-char-width (aref font-info 11))
+ (tag-char-height (aref font-info 3))
(tag-width (* (+ (length label) padding) txt-char-width))
- (tag-height (* txt-char-height 0.9))
+ (tag-height (* txt-char-height height))
(svg-width (+ tag-width (* margin txt-char-width)))
(svg-height tag-height)
@@ -193,18 +222,19 @@ and style elements ARGS."
(svg (svg-create svg-width svg-height)))
- (if (>= thickness 0.25)
+ (if (>= stroke 0.25)
(svg-rectangle svg tag-x 0 tag-width tag-height
- :fill stroke :rx radius))
- (svg-rectangle svg (+ tag-x (/ thickness 2.0)) (/ thickness 2.0)
- (- tag-width thickness) (- tag-height thickness)
- :fill background :rx (- radius (/ thickness 2.0)))
+ :fill foreground :rx radius))
+ (svg-rectangle svg (+ tag-x (/ stroke 2.0)) (/ stroke 2.0)
+ (- tag-width stroke) (- tag-height stroke)
+ :fill background :rx (- radius (/ stroke 2.0)))
(svg-text svg label
- :font-family family :font-weight weight :font-size size
+ :font-family font-family :font-weight font-weight :font-size
font-size
:fill foreground :x text-x :y text-y)
(svg-image svg :scale 1 :ascent 'center)))
+
;; Create a progress bar
;; ---------------------------------------------------------------------
(defun svg-lib-progress (value &optional style &rest args)
@@ -215,26 +245,29 @@ and style elements ARGS."
(style (if style (apply #'svg-lib-style nil style) default))
(style (if args (apply #'svg-lib-style style args) style))
- (width (plist-get style :width))
- (foreground (plist-get style :foreground))
- (background (plist-get style :background))
- (stroke (plist-get style :stroke))
- (size (plist-get style :height))
- (family (plist-get style :family))
- (weight (plist-get style :weight))
- (radius (plist-get style :radius))
- (margin (plist-get style :margin))
- (padding (plist-get style :padding))
- (thickness (plist-get style :thickness))
+ (foreground (plist-get style :foreground))
+ (background (plist-get style :background))
+ (stroke (plist-get style :stroke))
+ (width (plist-get style :width))
+ (height (plist-get style :height))
+ (radius (plist-get style :radius))
+ (scale (plist-get style :scale))
+ (margin (plist-get style :margin))
+ (padding (plist-get style :padding))
+ (font-size (plist-get style :font-size))
+ (font-family (plist-get style :font-family))
+ (font-weight (plist-get style :font-weight))
(txt-char-width (window-font-width))
(txt-char-height (window-font-height))
-
- (ascent (aref (font-info (format "%s:%d" family size)) 8))
- (tag-char-width (aref (font-info (format "%s:%d" family size)) 11))
- (tag-char-height (aref (font-info (format "%s:%d" family size)) 3))
+
+ (font-info (font-info (format "%s:%d" font-family font-size)))
+ (ascent (aref font-info 8))
+ (tag-char-width (aref font-info 11))
+ (tag-char-height (aref font-info 3))
+
(tag-width (* width txt-char-width))
- (tag-height (* txt-char-height 0.9))
+ (tag-height (* txt-char-height height))
(svg-width (+ tag-width (* margin txt-char-width)))
(svg-height tag-height)
@@ -242,19 +275,19 @@ and style elements ARGS."
(tag-x (/ (- svg-width tag-width) 2))
(svg (svg-create svg-width svg-height)))
- (if (>= thickness 0.25)
+ (if (>= stroke 0.25)
(svg-rectangle svg tag-x 0 tag-width tag-height
- :fill stroke :rx radius))
- (svg-rectangle svg (+ tag-x (/ thickness 2.0))
- (/ thickness 2.0)
- (- tag-width thickness)
- (- tag-height thickness)
- :fill background :rx (- radius (/ thickness 2.0)))
- (svg-rectangle svg (+ tag-x (/ thickness 2.0) padding)
- (+ (/ thickness 2.0) padding)
- (- (* value tag-width) thickness (* 2 padding))
- (- tag-height thickness (* 2 padding))
- :fill foreground :rx (- radius (/ thickness 2.0)))
+ :fill foreground :rx radius))
+ (svg-rectangle svg (+ tag-x (/ stroke 2.0))
+ (/ stroke 2.0)
+ (- tag-width stroke)
+ (- tag-height stroke)
+ :fill background :rx (- radius (/ stroke 2.0)))
+ (svg-rectangle svg (+ tag-x (/ stroke 2.0) padding)
+ (+ (/ stroke 2.0) padding)
+ (- (* value tag-width) stroke (* 2 padding))
+ (- tag-height stroke (* 2 padding))
+ :fill foreground :rx (- radius (/ stroke 2.0)))
(svg-image svg :scale 1 :ascent 'center)))
@@ -296,23 +329,23 @@ given STYLE and style elements ARGS."
(style (if style (apply #'svg-lib-style nil style) default))
(style (if args (apply #'svg-lib-style style args) style))
- (foreground (plist-get style :foreground))
- (background (plist-get style :background))
- (stroke (plist-get style :stroke))
- (size (plist-get style :height))
- (family (plist-get style :family))
- (weight (plist-get style :weight))
- (radius (plist-get style :radius))
- (margin (plist-get style :margin))
- (padding (plist-get style :padding))
- (thickness (plist-get style :thickness))
- (scale (plist-get style :scale))
+ (foreground (plist-get style :foreground))
+ (background (plist-get style :background))
+ (stroke (plist-get style :stroke))
+ (height (plist-get style :height))
+ (radius (plist-get style :radius))
+ (scale (plist-get style :scale))
+ (margin (plist-get style :margin))
+ (padding (plist-get style :padding))
+ (font-size (plist-get style :font-size))
+ (font-family (plist-get style :font-family))
+ (font-weight (plist-get style :font-weight))
(width (+ 2 padding))
(txt-char-width (window-font-width))
(txt-char-height (window-font-height))
(box-width (* width txt-char-width))
- (box-height (* 0.90 txt-char-height))
+ (box-height (* height txt-char-height))
(svg-width (+ box-width (* margin txt-char-width)))
(svg-height box-height)
(box-x (/ (- svg-width box-width) 2))
@@ -336,14 +369,14 @@ given STYLE and style elements ARGS."
(svg (svg-create svg-width svg-height)))
- (if (>= thickness 0.25)
+ (if (>= stroke 0.25)
(svg-rectangle svg box-x box-y box-width box-height
- :fill stroke :rx radius))
- (svg-rectangle svg (+ box-x (/ thickness 2.0))
- (+ box-y (/ thickness 2.0))
- (- box-width thickness)
- (- box-height thickness)
- :fill background :rx (- radius (/ thickness 2.0)))
+ :fill foreground :rx radius))
+ (svg-rectangle svg (+ box-x (/ stroke 2.0))
+ (+ box-y (/ stroke 2.0))
+ (- box-width stroke)
+ (- box-height stroke)
+ :fill background :rx (- radius (/ stroke 2.0)))
(dolist (item (xml-get-children (car root) 'path))
(let* ((attrs (xml-node-attributes item))
- [elpa] branch externals/svg-lib created (now f9e1bbb), ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib f732499 02/32: Updated description, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 778ef64 04/32: Full rewrite, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 6a83751 01/32: Initial import, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 5787149 07/32: Added button object, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib fe5e099 13/32: Do not fetch svg if it is cached, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib a1bfa49 15/32: Add svg-lib-icons-dir, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 38b0bad 03/32: Typo, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 004ab08 05/32: Better handling of default style + style simplification,
ELPA Syncer <=
- [elpa] externals/svg-lib a5b06a8 09/32: Forgot screenshot, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 9115bf7 12/32: Fix string/array nil issue on windows, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib e66a2d0 17/32: Merge pull request #3 from chenyanming/fix-windows-string-or-array-nil-error, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 461c155 06/32: Update with new style, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib e2d2d68 10/32: Better screenshot, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 952016b 11/32: Fix tasks status, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib ebde091 22/32: Added progress pies, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib b67b120 30/32: Cosmetic changes, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 90bb561 18/32: Added tag example, ELPA Syncer, 2021/09/27
- [elpa] externals/svg-lib 0ce0302 19/32: Merge remote-tracking branch 'origin/master', ELPA Syncer, 2021/09/27