From 5dd625984032a3410d4ff8bb4fc3c1184d118cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alvaro=20Fernando=20Garc=C3=ADa?= Date: Thu, 26 Dec 2019 09:08:15 -0300 Subject: [PATCH] Add iterate example to README --- README.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) diff --git a/README.md b/README.md index 9e9b5f1..0d0df96 100644 --- a/README.md +++ b/README.md @@ -109,6 +109,47 @@ main = do } ``` +You can also control the window loop to indicate webviewhs how to process each frame: + +```haskell +{-# LANGUAGE + OverloadedStrings +#-} + +import qualified Graphics.UI.Webviewhs as WHS + +main :: IO () +main = do + eitherWindow <- WHS.createWindow windowParams windowCallback + case eitherWindow of + Left _ -> pure () + Right window -> do + windowLoop window + WHS.terminateWindowLoop window + WHS.destroyWindow window + where + windowParams = WHS.WindowParams + { WHS.windowParamsTitle = "Test" + , WHS.windowParamsUri = "https://lettier.github.io" + , WHS.windowParamsWidth = 800 + , WHS.windowParamsHeight = 600 + , WHS.windowParamsResizable = True + , WHS.windowParamsDebuggable = True + } + + -- This can be called from Html/JS as "window.external.invoke(msg)" + windowCallback window msg = print msg + + -- Process a single frame using iterate + windowLoop window = do + shouldContinue <- WHS.iterateWindowLoop window False + if shouldContinue + then $ do + threadDelay 10000 -- wait some microsecs before next frame + windowLoop window + else pure () +``` + If you want more control over the native desktop window, you could do something like this: ```haskell