;;; -*- lexical-binding: t -*- ;; ;; -------------------------------------------------------------------------- (require 'cl-lib) (cl-pushnew "." load-path :test #'string=) (require 'luki-lisp) ;; -------------------------------------------------------------------------- (-> 'bad-elem) (-> 'bad-pos) ;; -------------------------------------------------------------------------- (cl-defmethod bad-move ((e elem) (dx integer) (dy integer)) (~ (x y) e (bad-pos e (+ dx x) (+ dy y)))) ;; -------------------------------------------------------------------------- (cl-defmethod bad-move-x ((e elem) &optional d) (or d (setq d 1)) (bad-move e d 0)) (cl-defmethod bad-move-y ((e elem) &optional d) (or d (setq d 1)) (bad-move e 0 d)) ;; -------------------------------------------------------------------------- (cl-defmethod bad-left ((e elem) &optional d) (or d (setq d 1)) (bad-move-x e (- d))) (cl-defmethod bad-right ((e elem) &optional d) (or d (setq d 1)) (bad-move-x e d)) (cl-defmethod bad-up ((e elem) &optional d) (or d (setq d 1)) (bad-move-y e (- d))) (cl-defmethod bad-down ((e elem) &optional d) (or d (setq d 1)) (bad-move-y e d)) ;; ----------------------------------------------------------------------- (cl-defmethod bad-origo ((e elem)) (~ (min-x min-y) e (bad-pos e min-x min-y))) (cl-defmethod bad-center ((e elem)) (~ (w w-max min-y) e (when-let* ((wm (or w-max (frame-width)))) (bad-pos e (- (/ wm 2) (/ w 2)) min-y)))) ;; ----------------------------------------------------------------------- (cl-defmethod bad-pos-inside ((i elem) (o elem)) (~ (w h) o (~ (ix iy min-x min-y (bw w) (bh h)) i (let* ((max-scale 2) (new-x (+ (* ix (/ (- w bw) max-scale)) (if (z ix) min-x (if (= ix max-scale) (1- (% bw max-scale)) 0)))) (new-y (+ (* iy (/ (- h bh) max-scale)) (if (z iy) min-y (if (= iy max-scale) (- (% bh max-scale) (if (cl-oddp bh) 2 0)) 0)))) (end-m (1+ max-scale))) (bad-pos i new-x new-y) (setf ix (m (++ ix) end-m)) (when (z ix) (setf iy (m (++ iy) end-m))))))) ;; -------------------------------------------------------------------------- (<- 'bad-move)