LINUX.ORG.RU

регистрируешь в «on paint» функцию с двумя аргументами dc viewArea зачем 2й не помню, я им не опльзовался, а первій и есть канва

kyz
()
Ответ на: комментарий от kyz

Спасибо большое за ссылку, помогло, но осталась одна проблема: окно не перерисовывается сразу после того как я черчу линию(чтоб картинка «проявилось», требуется свернуть-развернуть окно). Как это исправить?

Aswed ★★★★★
() автор топика
Ответ на: комментарий от Aswed

вот код от туда:

    -- advance all the balls to their next position
    nextBalls :: Var [[Point]] -> Panel () -> IO ()
    nextBalls vballs p
      = do varUpdate vballs (filter (not.null) . map (drop 1))
           repaint p

kyz
()
Ответ на: комментарий от kyz

вот код:

import Graphics.UI.WX
import Graphics.UI.WXCore

main = start gui

gui = do
		frm    <- frame [text := "Window!!!", size := sz 500 500]
		vLines <- varCreate [(pt 0 0,pt 100 100)] -- Список линий
		vState <- varCreate (False,pt 0 0) -- (Чертим или запоминаем координаты, координаты последнего клика)
		panl   <- panel frm [size := sz 500 500,
		                     on paint := paintFig vLines]
		set panl [on click := clickReaction vLines vState] -- Реакция на мышку
		return()

paintFig vLines dc viewArea =
	do
		lines <- varGet vLines
		set dc [brushColor := black, brushKind := BrushSolid]
		mapM_ (\(x,y) -> line dc x y []) lines

clickReaction vLines vState p = -- p :: Point
	do
		(reactType,prevPoint) <- varGet vState -- Получаем тип клика и координаты прошлого
		if (reactType) then oneMore prevPoint
		               else switchState
	where
		oneMore p0 = do
						l <- varGet vLines
						varSet vLines ((p0,p):l)
						varSet vState (False,p)
		switchState = do
						varSet vState (True,p)

Aswed ★★★★★
() автор топика
Ответ на: комментарий от kyz

Штука интересная, но если честно, я не вижу ничего страшного в написании гуя в императивном стиле. Щепотка императивности прелесть Хаскеля не убьет :)

Aswed ★★★★★
() автор топика
Ответ на: комментарий от Aswed

когда гуй маленький - дак пофиг на чем писать. но при использовании реактивного программирования - получаем много преимуществ, а именно - может отследить: какие состояния и события - от каких зависят.

а при императивном программировании - с разделенными лиснерами, событиями и переменными - трудно понять, на что данная переменная влияет, и кто ее может изменить.

kyz
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.