Skip to content

Commit

Permalink
More layout fixes
Browse files Browse the repository at this point in the history
  • Loading branch information
Shinmera committed Aug 9, 2019
1 parent 4f1d91d commit afc9cf7
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 6 deletions.
11 changes: 8 additions & 3 deletions layout.lisp
Expand Up @@ -23,21 +23,26 @@
(let ((layout-tree (parent element)))
(setf (slot-value element 'layout-tree) layout-tree)
(setf (slot-value element 'parent) NIL)
(setf (root (parent element)) element)))
(setf (root layout-tree) element)))
(T
(setf (slot-value element 'layout-tree) (layout-tree (parent element)))
(enter element (parent element)))))

(defmethod print-object ((element layout-element) stream)
(print-unreadable-object (element stream :type T :identity T)
(format stream "~a" (bounds element))))

(defmethod (setf bounds) ((extent extent) (element layout-element))
(let ((current (extent element)))
(let ((current (bounds element)))
(setf (extent-x current) (extent-x extent))
(setf (extent-y current) (extent-y extent))
(setf (extent-w current) (extent-w extent))
(setf (extent-h current) (extent-h extent))
extent))

(defmethod (setf bounds) :after (extent (element layout-element))
(notice-bounds element (parent element)))
(when (parent element)
(notice-bounds element (parent element))))

(defmethod x ((element layout-element)) (extent-x (bounds element)))
(defmethod y ((element layout-element)) (extent-y (bounds element)))
Expand Down
7 changes: 4 additions & 3 deletions layouts/linear.lisp
Expand Up @@ -6,7 +6,7 @@

(in-package #:org.shirakumo.alloy)

(defclass linear-layout (layout)
(defclass linear-layout (layout vector-container)
((min-size :initarg :min-size :initform (size) :accessor min-size)
(stretch :initarg :stretch :initform T :accessor stretch)
(align :initarg :align :initform :start :accessor align)))
Expand All @@ -22,8 +22,9 @@
(defmethod (setf min-size) :after (value (layout linear-layout))
(update-linear-layout layout 0 (bounds layout)))

(defmethod notice-bounds :after ((element layout-element) (layout linear-layout))
(let ((updated (update-linear-layout layout (element-index element layout) (bounds layout))))
(defmethod notice-bounds ((element layout-element) (layout linear-layout))
;; FIXME: optimise bounds update.
(let ((updated (update-linear-layout layout 0 (bounds layout))))
(unless (extent= (bounds layout) updated)
(setf (bounds layout) updated))))

Expand Down
8 changes: 8 additions & 0 deletions package.lisp
Expand Up @@ -142,6 +142,14 @@
#:component
#:layout
#:layout-tree)
;; layouts/fixed.lisp
(:export
#:fixed-layout)
;; layouts/linear.lisp
(:export
#:linear-layout
#:vertical-linear-layout
#:horizontal-linear-layout)
;; renderer
(:export
#:allocate
Expand Down

0 comments on commit afc9cf7

Please sign in to comment.