aboutsummaryrefslogtreecommitdiff
path: root/gnu/build/svg.scm
blob: 6f1f4b3684683ea01ef1129b7140658cb05d9142 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2016, 2017, 2018 Ludovic Courtès <ludo@gnu.org>
;;; Copyright © 2015 Andy Wingo <wingo@igalia.com>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu build svg)
  #:use-module (rsvg)
  #:use-module (cairo)
  #:use-module (srfi srfi-11)
  #:export (svg->png))

(define* (downscaled-surface surface
                             #:key
                             source-width source-height
                             width height)
  "Return a new rendering context where SURFACE is scaled to WIDTH x HEIGHT."
  (let ((cr (cairo-create (cairo-image-surface-create 'argb32
                                                      width height))))
    (cairo-scale cr (/ width source-width) (/ height source-height))
    (cairo-set-source-surface cr surface 0 0)
    (cairo-pattern-set-filter (cairo-get-source cr) 'best)
    (cairo-rectangle cr 0 0 source-width source-height)
    (cairo-fill cr)
    cr))

(define* (svg->png in-svg out-png
                   #:key width height)
  "Render the file at IN-SVG as a PNG file in OUT-PNG.  When WIDTH and HEIGHT
are provided, use them as the dimensions of OUT-PNG; otherwise preserve the
dimensions of IN-SVG."
  (define svg
    (rsvg-handle-new-from-file in-svg))

  (let-values (((origin-width origin-height em ex)
                (rsvg-handle-get-dimensions svg)))
    (let* ((surf (cairo-image-surface-create 'argb32
                                             origin-width origin-height))
           (cr   (cairo-create surf)))
      (rsvg-handle-render-cairo svg cr)
      (cairo-surface-flush surf)
      (let ((cr (if (and width height
                         (not (= width origin-width))
                         (not (= height origin-height)))
                    (downscaled-surface surf
                                        #:source-width origin-width
                                        #:source-height origin-height
                                        #:width width
                                        #:height height)
                    cr)))
        (cairo-surface-write-to-png (cairo-get-target cr) out-png)))))

;;; svg.scm ends here
itle='2020-05-08 16:30:50 +0200'>2020-05-08services: Add descriptions....* gnu/services/dbus.scm (polkit-service-type)[description]: New field. * gnu/services/dict.scm (dicod-service-type)[description]: New field. * gnu/services/dns.scm (knot-service-type)[description]: New field. * gnu/services/networking.scm (dhcpd-service-type)[description]: New field. * gnu/services/shepherd.scm (shepherd-root-service-type)[description]: New field. * gnu/services/xorg.scm (slim-service-type)[description]: New field. (screen-locker-service-type)[description]: New field. * gnu/system/pam.scm (pam-root-service-type)[description]: New field. * gnu/system/shadow.scm (account-service-type)[description]: New field. Ludovic Courtès 2020-04-17services: account: Have 'user-processes' depend on 'user-homes'....Until now, 'user-homes' happened to start right after 'user-processes' and before services that depend on a home directory but the dependency was not explicit. This addresses it. * gnu/system/shadow.scm (account-service-type): Extend USER-PROCESSES-SERVICE-TYPE. Ludovic Courtès 2020-04-01system: Move nanorc to XDG_CONFIG_HOME....* gnu/system/shadow.scm (skeleton-directory): Move .nanorc to .config/nano/nanorc. Efraim Flashner 2020-03-30Revert "system: Move nanorc to XDG_CONFIG_HOME."...This reverts commit bd71818df31364bbd04f3f13b3bbb251636748b4. This changed caused system reconfiguration to fail like this: ------ building /gnu/store/y1x8asbzw624ywgkpin35p1i4bqnyfy2-skel.drv... Backtrace: 4 (primitive-load "/gnu/store/2x7d0jsbgf2ndb5fsk0nj07rhsx?") In ice-9/eval.scm: 619:8 3 (_ #f) In ice-9/boot-9.scm: 260:13 2 (for-each #<procedure 7ffff6ad8100 at ice-9/eval.scm:3?> ?) In guix/build/utils.scm: 343:27 1 (_ "/gnu/store/ajrgkj1s9vdcq00drn703f4zj9dvfrsv-nanorc" ?) In unknown file: 0 (copy-file "/gnu/store/ajrgkj1s9vdcq00drn703f4zj9dvfrs?" ?) ERROR: In procedure copy-file: In procedure copy-file: No such file or directory `/gnu/store/v1grsca743phw41lyf63dzmh9nz5jlpn-bash_profile' -> `.bash_profile' `/gnu/store/xdsaw0mj6axj427hyi6ysrnsxi21n7d5-bashrc' -> `.bashrc' `/gnu/store/6i0b236dyar78zc5k5hrj5dv3vr4zb9w-zprofile' -> `.zprofile' `/gnu/store/ajrgkj1s9vdcq00drn703f4zj9dvfrsv-nanorc' -> `.config/nano/nanorc' builder for `/gnu/store/y1x8asbzw624ywgkpin35p1i4bqnyfy2-skel.drv' failed with exit code 1 ------ Leo Famulari 2020-03-30system: Move nanorc to XDG_CONFIG_HOME....* gnu/system/shadow.scm (default-skeletons): Move .nanorc to .config/nano/nanorc. Efraim Flashner 2020-03-19gnu: system: Remove guile-wm from skeleton....* gnu/system/shadow.scm (default-skeletons): Remove guile-wm (especially as a dependency). Jan Nieuwenhuizen 2019-04-23services: account: Make 'user-homes' a one-shot service....* gnu/system/shadow.scm (account-shepherd-service): Add 'one-shot?' field. Return #t from 'start'. Ludovic Courtès 2019-03-07activation: Build account databases with (gnu build accounts)....* gnu/build/activation.scm (enumerate, current-users, current-groups) (add-group, add-user, modify-user, ensure-user): Remove. (activate-users+groups)[touch, activate-user]: Remove. [make-home-directory]: New procedure. Rewrite in terms of 'user+group-databases', 'write-group', etc. * gnu/build/install.scm (directives): Remove "/root". * gnu/system/shadow.scm (account-activation): Remove (setenv "PATH" ...) expression, which is now unneeded. Ludovic Courtès 2019-03-07activation: Operate on <user-account> and <user-group> records....* gnu/system/accounts.scm (sexp->user-group, sexp->user-account): New procedures. * gnu/system/shadow.scm (account-activation): Call them in the arguments to 'activate-users+groups'. (account-shepherd-service): Likewise. * gnu/build/activation.scm (activate-users+groups): Expect a list of <user-account> and a list of <user-group>. Replace uses of 'match' on tuples with calls to record accessors. (activate-user-home): Likewise. Ludovic Courtès 2019-03-07system: Add (gnu system accounts)....The (gnu system accounts) module is meant to be used both on the build- and on the host-side. * gnu/system/shadow.scm <top level>: Call 'default-shell'. (<user-account>, <user-group>): Move to... * gnu/system/accounts.scm: ... here. New file. * gnu/local.mk (GNU_SYSTEM_MODULES): Add system/accounts.scm. Ludovic Courtès 2018-10-19system: Rename .zlogin to .zprofile....Reported by Meiyo Peng <meiyo.peng@gmail.com>. * gnu/system/shadow.scm (default-skeletons): Rename zlogin to zprofile. Chris Marusich 2018-07-23system: '.guile' skeleton now recommends 'guile-colorized'....* gnu/system/shadow.scm (default-skeletons)[".guile"]: Recommend 'guile-colorized'. Ludovic Courtès 2018-07-05Don't force colour in aliases....* gnu/system/shadow.scm (default-skeletons): Substitute ‘--color=auto’ for ‘--color’ (which implies ‘=always’) in aliases. * doc/guix.texi (G-Expressions): Also adjust examples as that makes more sense. Tobias Geerinckx-Rice 2018-06-11system: Default .bashrc now sources /etc/bashrc....This is a followup to commit 1382bde93c3ccb5be6b846b932edd7707fac1a3e, which disabled automatic sourcing of /etc/bashrc by interactive shell. The noticeable effect of the change would be that Bash completion would only work in login shells. * gnu/system/shadow.scm (default-skeletons)["bashrc"]: Source /etc/bashrc. Ludovic Courtès 2018-04-04system: Add default '.nanorc' with syntax highlighting....* gnu/system/shadow.scm (default-skeletons): Add ".nanorc". Ludovic Courtès 2018-01-11Merge branch 'master' into core-updatesLeo Famulari 2018-01-09system: Extend .gdbinit to authorize extensions from /gnu/store/*/lib....* gnu/system/shadow.scm (default-skeletons)["gdbinit"]: Add 'auto-load safe-path' statement. Ludovic Courtès 2017-12-08gnu: guile: Move Readline support to a separate 'guile-readline' package....This reduces the closure of Guile from 131 MiB to 116 MiB and removes extra readline/ncurses builds from the bootstrap path. * gnu/packages/guile.scm (guile-2.0)[inputs]: Remove READLINE. (make-guile-readline): New procedure. (guile-readline): New variable. * gnu/system/shadow.scm (default-skeletons): Adjust '.guile' so that it gracefully deals with missing (ice-9 readline). Ludovic Courtès 2017-11-01system: Return early in skeleton '.bashrc' when the shell is non-interactive....* gnu/system/shadow.scm (default-skeletons)[bashrc]: Add return statement. Marius Bakke 2017-11-01system: Test for interactive shell instead of `cat` in skeleton '.bashrc'....* gnu/system/shadow.scm (default-skeletons)[bashrc]: Wrap $SSH_CLIENT test in a conditional testing for interactive shell. Marius Bakke