[Haskell-cafe] problem with Graphics.HGL
asilovy
asilovy at hotmail.com
Sun Dec 17 05:19:01 EST 2006
Hello,
I posted this message to Haskell-Libraries but were advised to try
Haskell-Cafe...
I'm trying some stuffs with the Graphics.HGL library and have a question. I
wonder if someone could help me with it.
I'm trying to write some Win32 application using openWindowEx. I see it has
a parameter to (eventually) define a timer. On the other hand, the
maybeGetWindowEvent function is used to get "notified" of different events
such as mouse button pressed, key pressed, resizing...
I don't understand the special status of the timer. Why is it not an event
like the others. It does'nt sound right to me. As I understand it, you have
to wait for a timer tick rather than being informed by a timer event.
For instance, I've written a small test program that uses the timer to draw
some random "stars" on a window. Eventually, when the user presses the mouse
button, the window is closed.
But, as you can try, if you trigger a lot of events (by, for instance,
moving the mouse a lot) BEFORE pressing the mouse button those events,
although I don't treat them, will have to be processed with the delays of
the timer before the mouse clic can be treated. And so, the window takes a
long time to close.
I'm I misunderstanding something ? And is there another way to treat the
timer ?
Thanks for your answer
Alain
{---------------------------------------------------------------------------------------
Draws randomly colored stars at random places
Uses Events from :
http://haskell.org/ghc/docs/latest/html/libraries/HGL/Graphics-HGL-Window.html#t%3AEvent
-}
import Graphics.HGL
import Hugs.Prelude
import System.Random
import Graphics.HGL.Win32.Types
import Control.Monad
import Data.Maybe
main = runGraphics myWin
myWin = do
w <- openWindowEx "TestWindow" Nothing (400,400) DoubleBuffered (Just 100)
let
loop n = do
x0 <- randomRIO (0, 39)
y0 <- randomRIO (0, 39)
couleur <- randomRIO (0, 0x00FFFFFF)
let
(x, y) = (x0 * 10, y0 * 10)
c = if mod couleur 10 == 0 then couleur else 0 -- 1/10 will be
colored
drawInWindow w $ withRGB (toRGB (fromInt c)) $ ellipse (x, y) (x + 9, y
+ 9)
e <- maybeGetWindowEvent w -- some Event ?
when (isJust e) $ -- yes...
case fromJust e of -- which ?
Button _ _ _ -> closeWindow w -- mouse button
_ -> return () -- something else ->
nothing to do
getWindowTick w -- wait and...
loop (n + 1) -- loop
loop 0
--------------------------------------------------------------------------------------
--
View this message in context: http://www.nabble.com/problem-with-Graphics.HGL-tf2834899.html#a7914596
Sent from the Haskell - Haskell-Cafe mailing list archive at Nabble.com.
More information about the Haskell-Cafe
mailing list