пятница, 16 июля 2010 г.

Масштабирование изображения в drawing-area

Для масштабирования изображения мне понадобится коэфициент
(defvar *scroll-units* 1)
Ему я сразу присваиваю 1 т.к. изображение должно быть 1:1
В последующем все координаты на экране будут множиться на этот коэфициент, чем и достигнется масштабирование

Вся магия работы с колесиком мыши происходит в событии scroll-event
(gobject:g-signal-connect draw-area "scroll-event" (lambda (object event)
(declare (ignore object))
;Алгоритм деревяннейший - через (event-scroll-direction event) я получаю направление и сравниваю :UP оно или нет. Пока что все что не :UP то :DOWN
   (if (equal (gdk:event-scroll-direction event) :UP)
;в зависимости от результата - увеличиваем коэфициент или уменьшаем
     (setf *scroll-units* (1+ *scroll-units*))
     (setf *scroll-units* (/ *scroll-units* 2)))
;осталось только перерисовать экран
 (widget-queue-draw draw-area)))


;Не стоит так же забывать добавить маску
  (push :scroll-mask (gdk-window-events (widget-window draw-area)))

;Ну а сами данные для отрисовки выглядят вот так
(move-to (* *scroll-units* 200) (* *scroll-units* 10))
(line-to (* *scroll-units* 100) (* *scroll-units* 10))

0 коммент.:

Отправить комментарий