mirror of
https://github.com/penpot/penpot.git
synced 2025-06-05 11:31:37 +02:00
118 lines
3.9 KiB
Clojure
118 lines
3.9 KiB
Clojure
;; This Source Code Form is subject to the terms of the Mozilla Public
|
|
;; License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
;; file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
;;
|
|
;; Copyright (c) 2016 Andrey Antukh <niwi@niwi.nz>
|
|
|
|
(ns uxbox.view.ui.viewer.shapes
|
|
#_(:require [goog.events :as events]
|
|
[lentes.core :as l]
|
|
[uxbox.builtins.icons :as i]
|
|
[uxbox.view.store :as st]
|
|
[uxbox.view.data.viewer :as udv]
|
|
[uxbox.view.ui.viewer.interactions :as itx]
|
|
[uxbox.main.geom :as geom]
|
|
[uxbox.main.ui.shapes.rect :refer [rect-shape]]
|
|
[uxbox.main.ui.shapes.icon :refer [icon-shape]]
|
|
[uxbox.main.ui.shapes.text :refer [text-shape]]
|
|
;; [uxbox.main.ui.shapes.group :refer [group-shape]]
|
|
[uxbox.main.ui.shapes.path :refer [path-shape]]
|
|
[uxbox.main.ui.shapes.circle :refer [circle-shape]]
|
|
[uxbox.main.ui.shapes.image :refer [image-shape]]
|
|
[rumext.core :as mx :include-macros true])
|
|
#_(:import goog.events.EventType))
|
|
|
|
;; (def itx-flag-ref
|
|
;; (-> (comp (l/key :flags) (l/lens :interactions))
|
|
;; (l/derive st/state)))
|
|
|
|
;; (defn image-ref
|
|
;; [id]
|
|
;; (-> (l/in [:images id])
|
|
;; (l/derive st/state)))
|
|
|
|
;; ;; --- Interactions Wrapper
|
|
|
|
;; (defn- interactions-wrapper-did-mount
|
|
;; [own]
|
|
;; (let [dom (mx/dom-node own)
|
|
;; shape (first (::mx/args own))
|
|
;; evnts (itx/build-events shape)
|
|
;; keys (reduce (fn [acc [evt callback]]
|
|
;; (conj acc (events/listen dom evt callback)))
|
|
;; []
|
|
;; evnts)]
|
|
;; (assoc own ::keys keys)))
|
|
|
|
;; (defn- interactions-wrapper-will-unmount
|
|
;; [own]
|
|
;; (let [keys (::keys own)]
|
|
;; (run! #(events/unlistenByKey %) keys)
|
|
;; (dissoc own ::keys)))
|
|
|
|
;; (mx/defc interactions-wrapper
|
|
;; {:did-mount interactions-wrapper-did-mount
|
|
;; :will-unmount interactions-wrapper-will-unmount
|
|
;; :mixins [mx/reactive mx/static]}
|
|
;; [shape factory]
|
|
;; {:pre [(map? shape)]}
|
|
;; (let [show-itx? (and (mx/react itx-flag-ref)
|
|
;; (not (empty? (:interactions shape))))
|
|
;; rect (geom/shape->rect-shape shape)]
|
|
;; [:g {:id (str "itx-" (:id shape))
|
|
;; :style {:cursor "pointer"}}
|
|
;; (factory shape)
|
|
;; (when show-itx?
|
|
;; [:circle {:class "interaction-bullet"
|
|
;; :cx (:x1 rect)
|
|
;; :cy (:y1 rect)
|
|
;; :r 5}])]))
|
|
|
|
;; ;; [:rect {:class "interaction-hightlight"
|
|
;; ;; :x (:x1 rect)
|
|
;; ;; :y (:y1 rect)
|
|
;; ;; :width (:width rect)
|
|
;; ;; :height (:height rect)}]
|
|
|
|
;; ;; --- Image Shape Wrapper
|
|
;; ;;
|
|
;; ;; NOTE: This wrapper is needed for preload the referenced
|
|
;; ;; image object which is need for properly show the shape.
|
|
|
|
;; (mx/defc image-shape-wrapper
|
|
;; {:mixins [mx/static mx/reactive]
|
|
;; :init (fn [own]
|
|
;; (when-let [image-id (-> own ::mx/args first :image)]
|
|
;; (st/emit! (udv/fetch-image image-id)))
|
|
;; own)}
|
|
;; [{:keys [image] :as item}]
|
|
;; (when-let [image (mx/react (image-ref image))]
|
|
;; (image-shape (assoc item :image image))))
|
|
|
|
;; ;; --- Text Shape Wrapper
|
|
|
|
;; (mx/defc text-shape-wrapper
|
|
;; {:mixins [mx/static]}
|
|
;; [item]
|
|
;; (text-shape (assoc item :user-select true)))
|
|
|
|
;; ;; --- Shapes
|
|
|
|
;; (declare shape)
|
|
|
|
;; (mx/defc shape*
|
|
;; [{:keys [type] :as item}]
|
|
;; (case type
|
|
;; ;; :group (group-shape item shape)
|
|
;; :image (image-shape-wrapper item)
|
|
;; :text (text-shape-wrapper item)
|
|
;; :icon (icon-shape item)
|
|
;; :rect (rect-shape item)
|
|
;; :path (path-shape item)
|
|
;; :circle (circle-shape item)))
|
|
|
|
;; (mx/defc shape
|
|
;; [sid]
|
|
;; {:pre [(uuid? sid)]}
|
|
;; (let [item (get-in @st/state [:shapes sid])]
|
|
;; (interactions-wrapper item shape*)))
|