0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-02-09 00:28:20 -05:00

🐛 Parametrized render to embed objects. Fix problem with fonts when exporting to SVG

This commit is contained in:
alonso.torres 2022-03-21 21:34:46 +01:00
parent e6f8269c0b
commit 118b4367e7
6 changed files with 17 additions and 9 deletions

View file

@ -26,6 +26,7 @@
(defn- get-mtype (defn- get-mtype
[type] [type]
(case (d/name type) (case (d/name type)
"zip" "application/zip" "zip" "application/zip"
"pdf" "application/pdf" "pdf" "application/pdf"

View file

@ -327,6 +327,7 @@
:page-id page-id :page-id page-id
:object-id object-id :object-id object-id
:render-texts true :render-texts true
:embed true
:route "render-object"} :route "render-object"}
uri (-> (or uri (cf/get :public-uri)) uri (-> (or uri (cf/get :public-uri))

View file

@ -226,7 +226,7 @@
font-style: %(style)s; font-style: %(style)s;
font-weight: %(weight)s; font-weight: %(weight)s;
font-display: block; font-display: block;
src: url(/fonts/%(family)s-%(suffix)s.woff) format('woff'); src: url(%(baseurl)sfonts/%(family)s-%(suffix)s.woff) format('woff');
} }
") ")
@ -262,7 +262,8 @@
:else :else
(let [{:keys [weight style suffix] :as variant} (let [{:keys [weight style suffix] :as variant}
(d/seek #(= (:id %) font-variant-id) variants) (d/seek #(= (:id %) font-variant-id) variants)
font-data {:family family font-data {:baseurl (str cf/public-uri)
:family family
:style style :style style
:suffix (or suffix font-variant-id) :suffix (or suffix font-variant-id)
:weight weight}] :weight weight}]

View file

@ -115,10 +115,12 @@
(let [file-id (uuid (get-in route [:path-params :file-id])) (let [file-id (uuid (get-in route [:path-params :file-id]))
page-id (uuid (get-in route [:path-params :page-id])) page-id (uuid (get-in route [:path-params :page-id]))
object-id (uuid (get-in route [:path-params :object-id])) object-id (uuid (get-in route [:path-params :object-id]))
embed? (= (get-in route [:query-params :embed]) "true")
render-texts (get-in route [:query-params :render-texts])] render-texts (get-in route [:query-params :render-texts])]
[:& render/render-object {:file-id file-id [:& render/render-object {:file-id file-id
:page-id page-id :page-id page-id
:object-id object-id :object-id object-id
:embed? embed?
:render-texts? (and (some? render-texts) (= render-texts "true"))}])) :render-texts? (and (some? render-texts) (= render-texts "true"))}]))
:render-sprite :render-sprite

View file

@ -52,8 +52,8 @@
(mf/defc object-svg (mf/defc object-svg
{::mf/wrap [mf/memo]} {::mf/wrap [mf/memo]}
[{:keys [objects object-id zoom render-texts?] [{:keys [objects object-id zoom render-texts? embed?]
:or {zoom 1} :or {zoom 1 embed? false}
:as props}] :as props}]
(let [object (get objects object-id) (let [object (get objects object-id)
frame-id (if (= :frame (:type object)) frame-id (if (= :frame (:type object))
@ -106,7 +106,7 @@
{:size (str (mth/ceil width) "px " {:size (str (mth/ceil width) "px "
(mth/ceil height) "px")})) (mth/ceil height) "px")}))
[:& (mf/provider embed/context) {:value false} [:& (mf/provider embed/context) {:value embed?}
[:svg {:id "screenshot" [:svg {:id "screenshot"
:view-box vbox :view-box vbox
:width width :width width
@ -152,7 +152,7 @@
objects)) objects))
(mf/defc render-object (mf/defc render-object
[{:keys [file-id page-id object-id render-texts?] :as props}] [{:keys [file-id page-id object-id render-texts? embed?] :as props}]
(let [objects (mf/use-state nil)] (let [objects (mf/use-state nil)]
(mf/with-effect [file-id page-id object-id] (mf/with-effect [file-id page-id object-id]
@ -171,6 +171,7 @@
(when @objects (when @objects
[:& object-svg {:objects @objects [:& object-svg {:objects @objects
:object-id object-id :object-id object-id
:embed? embed?
:render-texts? render-texts? :render-texts? render-texts?
:zoom 1}]))) :zoom 1}])))

View file

@ -60,17 +60,19 @@
(s/def ::file-id ::us/uuid) (s/def ::file-id ::us/uuid)
(s/def ::object-id ::us/uuid) (s/def ::object-id ::us/uuid)
(s/def ::render-text ::us/boolean) (s/def ::render-text ::us/boolean)
(s/def ::embed ::us/boolean)
(s/def ::render-object-params (s/def ::render-object-params
(s/keys :req-un [::file-id ::page-id ::object-id] (s/keys :req-un [::file-id ::page-id ::object-id]
:opt-un [::render-text])) :opt-un [::render-text ::embed]))
(defn- render-object (defn- render-object
[params] [params]
(let [{:keys [page-id file-id object-id render-texts]} (us/conform ::render-object-params params)] (let [{:keys [page-id file-id object-id render-texts embed]} (us/conform ::render-object-params params)]
(mf/html (mf/html
[:& render/render-object [:& render/render-object
{:file-id file-id {:file-id file-id
:page-id page-id :page-id page-id
:object-id object-id :object-id object-id
:render-texts? (and (some? render-texts) (= render-texts "true"))}]))) :embed? embed
:render-texts? render-texts}])))