;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016, 2017 Ludovic Courtès ;;; Copyright © 2015 Andy Wingo ;;; ;;; 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 . (define-module (gnu build svg) #:use-module (srfi srfi-11) #:export (svg->png)) ;; We need Guile-RSVG and Guile-Cairo. Load them lazily, at run time, to ;; allow compilation to proceed. See also . (module-autoload! (current-module) '(rsvg) '(rsvg-handle-new-from-file)) (module-autoload! (current-module) '(cairo) '(cairo-image-surface-create)) (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 tute gtk+ for gtk+-2. Tobias Geerinckx-Rice 2021-03-09gnu: sigrok-cli: Update to 0.7.2....* gnu/packages/electronics.scm (sigrok-cli): Update to 0.7.2. Tobias Geerinckx-Rice 2021-02-19gnu: Add xoscope....* gnu/packages/electronics.scm (xoscope): New variable. Leo Famulari 2021-02-19gnu: Add comedilib....* gnu/packages/electronics.scm (comedilib): New variable. Leo Famulari 2021-01-10gnu: pulseview: Fix qt-5.15 compatibility....* gnu/packages/electronics.scm (pulseview)[source]: Add patch. * gnu/packages/patches/pulseview-qt515-compat.patch: New file. * gnu/local.mk (dist_patch_DATA): Register it. Efraim Flashner 2021-01-10gnu: pulseview: Update to 0.4.2....* gnu/packages/electronics.scm (pulseview): Update to 0.4.2. [source]: Use https. Efraim Flashner 2020-12-21gnu: sdcc: Move to embedded.scm....* gnu/packages/embedded.scm: Add sdcc from sdcc.scm. * gnu/packages/electronics.scm: Update #:use-module directive. * gnu/packages/sdcc.scm: Delete file. * gnu/local.mk: Remove it. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Simon South 2020-09-05Merge remote-tracking branch 'origin/master' into stagingEfraim Flashner 2020-07-25gnu: libsigrok: Remove unused input....* gnu/packages/electronics.scm (libsigrok)[native-inputs]: Remove CHECK. Marius Bakke 2020-07-25gnu: check: Update to 0.15.1....* gnu/packages/check.scm (check): Update to 0.15.1. (check-0.14): New public variable. * gnu/packages/backup.scm (burp)[native-inputs]: Change from CHECK to CHECK-0.14. * gnu/packages/bioinformatics.scm (libsbml)[native-inputs]: Likewise. * gnu/packages/databases.scm (recutils)[native-inputs]: Likewise. * gnu/packages/electronics.scm (libsigrokdecode)[native-inputs]: Likewise. * gnu/packages/enlightenment.scm (efl, edi)[native-inputs]: Likewise. * gnu/packages/gnome.scm (gdm)[inputs]: Likewise. * gnu/packages/gtk.scm (girara)[native-inputs]: Likewise. * gnu/packages/messaging.scm (pidgin)[native-inputs]: Likewise. * gnu/packages/networking.scm (iodine)[native-inputs]: Likewise. * gnu/packages/pulseaudio.scm (pulseaudio)[native-inputs]: Likewise. * gnu/packages/sssd.scm (sssd)[native-inputs]: Likewise. * gnu/packages/web.scm (libwapcaplet)[native-inputs]: Likewise. Marius Bakke