Add ability to set methods on table cells

This commit is contained in:
oakes
2014-01-12 14:06:55 -05:00
parent d81cff935c
commit 537a20dbe4

View File

@@ -10,7 +10,8 @@
[com.badlogic.gdx.scenes.scene2d.utils ActorGestureListener Align
ChangeListener ClickListener DragListener FocusListener
NinePatchDrawable SpriteDrawable TextureRegionDrawable
TiledDrawable]))
TiledDrawable]
[com.esotericsoftware.tablelayout Cell]))
(defmacro drawable
[type & options]
@@ -37,27 +38,74 @@
[key]
`(u/static-field-lower :scenes :scene2d :utils :Align ~key))
(defn cell!
[^Cell cell & args]
(let [method-name (first args)
[[a1 a2 a3 a4] rest-args] (split-with #(not (keyword? %)) (rest args))]
(when method-name
(case method-name
:width (.width cell ^double a1)
:height (.height cell ^double a1)
:size (.size cell ^double a1 ^double a2)
:min-width (.minWidth cell ^double a1)
:min-height (.minHeight cell ^double a1)
:min-size (.minSize cell ^double a1 ^double a2)
:max-width (.maxWidth cell ^double a1)
:max-height (.maxHeight cell ^double a1)
:max-size (.minSize cell ^double a1 ^double a2)
:space (.space cell ^double a1 ^double a2 ^double a3 ^double a4)
:space-top (.spaceTop cell ^double a1)
:space-left (.spaceLeft cell ^double a1)
:space-bottom (.spaceBottom cell ^double a1)
:space-right (.spaceRight cell ^double a1)
:pad (.pad cell ^double a1 ^double a2 ^double a3 ^double a4)
:pad-top (.padTop cell ^double a1)
:pad-left (.padLeft cell ^double a1)
:pad-bottom (.padBottom cell ^double a1)
:pad-right (.padRight cell ^double a1)
:fill (.fill cell ^boolean a1 ^boolean a2)
:fill-x (.fillX cell)
:fill-y (.fillY cell)
:center (.center cell)
:top (.top cell)
:left (.left cell)
:bottom (.bottom cell)
:right (.right cell)
:expand (.expand cell ^boolean a1 ^boolean a2)
:expand-x (.expandX cell)
:expand-y (.expandY cell)
:ignore (.ignore cell ^boolean a1)
:colspan (.colspan cell (int a1))
:uniform (.uniform cell ^boolean a1 ^boolean a2)
:uniform-x (.uniformX cell)
:uniform-y (.uniformY cell)
:row (.row cell)
nil)
(apply cell! cell rest-args))
cell))
(defmulti add-to-group! #(-> % first :object type) :default WidgetGroup)
(defmethod add-to-group! WidgetGroup
[[{:keys [^WidgetGroup object]} children]]
(doseq [child children]
(.addActor object ^Actor (:object child))))
[[parent child]]
(.addActor ^WidgetGroup (:object parent) ^Actor (:object child)))
(defmethod add-to-group! Table
[[{:keys [^Table object]} children]]
(doseq [child children]
(cond
(map? child)
(.add object ^Actor (:object child))
(keyword? child)
(case child
:row (.row object)
nil))))
[[parent child]]
(cond
(map? child)
(.add ^Table (:object parent) ^Actor (:object child))
(vector? child)
(apply cell! (add-to-group! [parent (first child)]) (rest child))
(keyword? child)
(case child
:row (.row ^Table (:object parent))
nil)))
(defn add!
[group children]
(add-to-group! [group children])
(doseq [child children]
(add-to-group! [group child]))
group)
(defn ^:private create-group