mirror of
https://github.com/penpot/penpot.git
synced 2026-05-01 22:28:15 +00:00
41 lines
1.2 KiB
Clojure
41 lines
1.2 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) KALEIDOS INC
|
|
|
|
(ns app.worker.snaps
|
|
(:require
|
|
[app.common.geom.rect :as grc]
|
|
[app.util.snap-data :as sd]
|
|
[app.worker.impl :as impl]
|
|
[okulary.core :as l]))
|
|
|
|
(defonce state (l/atom {}))
|
|
|
|
;; Public API
|
|
(defmethod impl/handler :snaps/initialize-page-index
|
|
[{:keys [page] :as message}]
|
|
(swap! state sd/add-page page)
|
|
nil)
|
|
|
|
(defmethod impl/handler :snaps/update-page-index
|
|
[{:keys [old-page new-page] :as message}]
|
|
(swap! state sd/update-page old-page new-page)
|
|
nil)
|
|
|
|
(defmethod impl/handler :snaps/range-query
|
|
[{:keys [page-id frame-id axis ranges bounds] :as message}]
|
|
(let [match-bounds?
|
|
(fn [[_ data]]
|
|
(some #(or (= :guide (:type %))
|
|
(= :layout (:type %))
|
|
(grc/contains-point? bounds (:pt %))) data))]
|
|
(->> (into []
|
|
(comp (mapcat #(sd/query @state page-id frame-id axis %))
|
|
(distinct))
|
|
ranges)
|
|
(filter match-bounds?))))
|
|
|
|
|