packages feed

gtk2hs-rpn-0.0.1: src/rpnTeste2.hs

module Main where {
import Graphics.UI.Gtk ;
import Graphics.UI.Gtk.Layout.Rpn ;
import Graphics.Rendering.Cairo ;
import Data.Monoid ;
import Data.IORef ;

desenharQuadrados = do {
    dw <- eventWindow ;
    (w,h) <- drawableGetSize ;

dQ :: IORef (Double,Double) -> Int -> RPN ;
dQ ior n = mconcat [
    cDRW ,
    tON widgetExposeEvent desenharQuadrados ,
    cFRM ,
    tSET label ,
    pCA
 ] where {
    widgetExposeEvent :: Signal Widget (EventM ECrossing Bool) ;
    widgetExposeEvent = exposeEvent ;
    label :: [AttrOp Frame] ;
    label = [frameLabel := ( show n ++ " cm" )] ;
    desenharQuadrados = do {
        dw <- eventWindow ;
        (w,h) <- drawableGetSize ;
        let (w',h') = (fromIntegral w, fromIntegral h) ;
        (eX,eY) <- readIORef ior ;
        xs <- [0,n'*eX..w'] ;
        ys <- [0,n'*eY..h'] ;
        renderWithDrawable dw $ do {


main = do {

 initGUI ;

     janelaPrincipal <- windowNew ;

     proporções <- newIORef ( 10 , 10 ) ;

     let {
         atualizarX = \v -> modifyIORef proporções $ \( _ , y ) -> ( 200 / v , y ) ;
         atualizarY = \v -> modifyIORef proporções $ \( x , _ ) -> ( x , 200 / v ) ;
         desenharQuadrados n = do {
             ( px , py ) <- readIORef proporções ;
             return $ Just $ \( w , h ) -> do {
                 let { dx = n * px ; dy = n * py } ;
                 sequence $ ( flip map ) [ 0 , dx .. w ] $
                  \v -> moveTo v 0 >> lineTo v h ;
                 sequence $ ( flip map ) [ 0 , dy .. h ] $
                  \v -> moveTo 0 v >> lineTo w v ;
                 stroke
             } ;
         } ;
         janelinha n = mconcat [
             rpnCairoLiveShape ( desenharQuadrados n ) 2000 ,
             rpnFrame $ Just $ "<b> Quadrados de " ++ show n ++ " <i> cm </i></b>"
         ] ;
     } ;

     [conteúdo] <- widgetFromRpn $ mconcat [

         rpnCairoShape $ const $ rectangle 10 10 200 200 >> stroke ,
         rpnMinimumSize 220 220 ,

         rpnSetOrientation OrientationVertical ,
         rpnScale 2 10 20 1 ( Just PosRight ) atualizarY ,

         rpnSetOrientation OrientationHorizontal ,
         rpnBox [ PackGrow , PackNatural ] ,

         rpnSetOrientation OrientationHorizontal ,
         rpnScale 2 10 20 1 ( Just PosBottom ) atualizarX ,

         rpnSetOrientation OrientationVertical ,
         rpnBox [ PackNatural , PackNatural ] ,

         rpnSetAlign ( 0.5 , 0.5 ) ,
         rpnAlign 0 0 ,

         rpnSetOrientation OrientationHorizontal ,
         rpnStockButton stockQuit mainQuit ,
         rpnButtonBox ButtonboxCenter [False] ,

         rpnSetOrientation OrientationVertical ,
         rpnBox [ PackGrow , PackNatural ] ,

         janelinha 1 ,
         janelinha 2 ,
         janelinha 3 ,
         rpnBox $ take 3 $ replicate 3 PackGrow ,

         rpnSetOrientation OrientationHorizontal ,
         rpnBox [ PackNatural , PackGrow ]

     ] ;

     containerAdd janelaPrincipal conteúdo ;

     widgetShowAll janelaPrincipal ;

     mainGUI

 }


}