Sophie

Sophie

distrib > Fedora > 18 > i386 > by-pkgid > 16551e78563a5b49ff9624ee1c8b8101 > files > 1305

ghc-xmonad-contrib-devel-0.11-1.1.fc18.i686.rpm

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>XMonad/Layout/DragPane.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE DeriveDataTypeable, FlexibleInstances, MultiParamTypeClasses, PatternGuards, TypeSynonymInstances #-}</span>
<a name="line-2"></a>
<a name="line-3"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-4"></a><span class='hs-comment'>-- |</span>
<a name="line-5"></a><span class='hs-comment'>-- Module      :  XMonad.Layout.DragPane</span>
<a name="line-6"></a><span class='hs-comment'>-- Copyright   :  (c) Spencer Janssen &lt;spencerjanssen@gmail.com&gt;</span>
<a name="line-7"></a><span class='hs-comment'>--                    David Roundy &lt;droundy@darcs.net&gt;,</span>
<a name="line-8"></a><span class='hs-comment'>--                    Andrea Rossato &lt;andrea.rossato@unibz.it&gt;</span>
<a name="line-9"></a><span class='hs-comment'>-- License     :  BSD3-style (see LICENSE)</span>
<a name="line-10"></a><span class='hs-comment'>--</span>
<a name="line-11"></a><span class='hs-comment'>-- Maintainer  :  Andrea Rossato &lt;andrea.rossato@unibz.it&gt;</span>
<a name="line-12"></a><span class='hs-comment'>-- Stability   :  unstable</span>
<a name="line-13"></a><span class='hs-comment'>-- Portability :  unportable</span>
<a name="line-14"></a><span class='hs-comment'>--</span>
<a name="line-15"></a><span class='hs-comment'>-- Layouts that splits the screen either horizontally or vertically and</span>
<a name="line-16"></a><span class='hs-comment'>-- shows two windows.  The first window is always the master window, and</span>
<a name="line-17"></a><span class='hs-comment'>-- the other is either the currently focused window or the second window in</span>
<a name="line-18"></a><span class='hs-comment'>-- layout order.</span>
<a name="line-19"></a>
<a name="line-20"></a><span class='hs-comment'>-----------------------------------------------------------------------------</span>
<a name="line-21"></a>
<a name="line-22"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>XMonad</span><span class='hs-varop'>.</span><span class='hs-conid'>Layout</span><span class='hs-varop'>.</span><span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span>
<a name="line-23"></a>                               <span class='hs-comment'>-- * Usage</span>
<a name="line-24"></a>                               <span class='hs-comment'>-- $usage</span>
<a name="line-25"></a>                                <span class='hs-varid'>dragPane</span>
<a name="line-26"></a>                              <span class='hs-layout'>,</span> <span class='hs-conid'>DragPane</span><span class='hs-layout'>,</span> <span class='hs-conid'>DragType</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-27"></a>                              <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-28"></a>
<a name="line-29"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>XMonad</span>
<a name="line-30"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Unique</span>
<a name="line-31"></a>
<a name="line-32"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>XMonad</span><span class='hs-varop'>.</span><span class='hs-conid'>StackSet</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>W</span>
<a name="line-33"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>XMonad</span><span class='hs-varop'>.</span><span class='hs-conid'>Util</span><span class='hs-varop'>.</span><span class='hs-conid'>Invisible</span>
<a name="line-34"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>XMonad</span><span class='hs-varop'>.</span><span class='hs-conid'>Util</span><span class='hs-varop'>.</span><span class='hs-conid'>XUtils</span>
<a name="line-35"></a>
<a name="line-36"></a><span class='hs-comment'>-- $usage</span>
<a name="line-37"></a><span class='hs-comment'>-- You can use this module with the following in your @~\/.xmonad\/xmonad.hs@:</span>
<a name="line-38"></a><span class='hs-comment'>--</span>
<a name="line-39"></a><span class='hs-comment'>-- &gt; import XMonad.Layout.DragPane</span>
<a name="line-40"></a><span class='hs-comment'>--</span>
<a name="line-41"></a><span class='hs-comment'>-- Then edit your @layoutHook@ by adding the DragPane layout:</span>
<a name="line-42"></a><span class='hs-comment'>--</span>
<a name="line-43"></a><span class='hs-comment'>-- &gt; myLayout = dragPane Horizontal 0.1 0.5 ||| Full ||| etc..</span>
<a name="line-44"></a><span class='hs-comment'>-- &gt; main = xmonad defaultConfig { layoutHook = myLayout }</span>
<a name="line-45"></a><span class='hs-comment'>--</span>
<a name="line-46"></a><span class='hs-comment'>-- For more detailed instructions on editing the layoutHook see:</span>
<a name="line-47"></a><span class='hs-comment'>--</span>
<a name="line-48"></a><span class='hs-comment'>-- "XMonad.Doc.Extending#Editing_the_layout_hook"</span>
<a name="line-49"></a>
<a name="line-50"></a><a name="halfHandleWidth"></a><span class='hs-definition'>halfHandleWidth</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Integral</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=&gt;</span> <span class='hs-varid'>a</span>
<a name="line-51"></a><span class='hs-definition'>halfHandleWidth</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>1</span>
<a name="line-52"></a>
<a name="line-53"></a><a name="handleColor"></a><span class='hs-definition'>handleColor</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>String</span>
<a name="line-54"></a><span class='hs-definition'>handleColor</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"#000000"</span>
<a name="line-55"></a>
<a name="line-56"></a><a name="dragPane"></a><span class='hs-definition'>dragPane</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DragType</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Double</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Double</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span>
<a name="line-57"></a><span class='hs-definition'>dragPane</span> <span class='hs-varid'>t</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-varid'>t</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span>
<a name="line-58"></a>
<a name="line-59"></a><a name="DragPane"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>=</span>
<a name="line-60"></a>    <span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>Invisible</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>Window</span><span class='hs-layout'>,</span><span class='hs-conid'>Rectangle</span><span class='hs-layout'>,</span><span class='hs-conid'>Int</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-conid'>DragType</span> <span class='hs-conid'>Double</span> <span class='hs-conid'>Double</span>
<a name="line-61"></a>             <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span> <span class='hs-layout'>)</span>
<a name="line-62"></a>
<a name="line-63"></a><a name="DragType"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>DragType</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Horizontal</span> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Vertical</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span> <span class='hs-layout'>)</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="instance%20LayoutClass%20DragPane%20a"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>LayoutClass</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span> <span class='hs-keyword'>where</span>
<a name="line-66"></a>    <span class='hs-varid'>doLayout</span> <span class='hs-varid'>d</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Vertical</span>   <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>doLay</span> <span class='hs-varid'>id</span> <span class='hs-varid'>d</span>
<a name="line-67"></a>    <span class='hs-varid'>doLayout</span> <span class='hs-varid'>d</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-keyword'>_</span> <span class='hs-conid'>Horizontal</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>doLay</span> <span class='hs-varid'>mirrorRect</span> <span class='hs-varid'>d</span>
<a name="line-68"></a>    <span class='hs-varid'>handleMessage</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>handleMess</span>
<a name="line-69"></a>
<a name="line-70"></a><a name="SetFrac"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>SetFrac</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>SetFrac</span> <span class='hs-conid'>Int</span> <span class='hs-conid'>Double</span> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span> <span class='hs-conid'>Show</span><span class='hs-layout'>,</span> <span class='hs-conid'>Read</span><span class='hs-layout'>,</span> <span class='hs-conid'>Eq</span><span class='hs-layout'>,</span> <span class='hs-conid'>Typeable</span> <span class='hs-layout'>)</span>
<a name="line-71"></a><a name="instance%20Message%20SetFrac%20handleMess%20::%20DragPane%20a%20-%3e%20SomeMessage%20-%3e%20X%20(Maybe%20(DragPane%20a))%20handleMess%20d@(DragPane%20mb@(I%20(Just%20(win,_,ident)))%20ty%20delta%20split)%20x%20%7c%20Just%20e%20%3c-%20fromMessage%20x%20::%20Maybe%20Event%20=%20do%20handleEvent%20d%20e%20return%20Nothing%20%7c%20Just%20Hide%20%3c-%20fromMessage%20x%20=%20do%20hideWindow%20win%20return%20$%20Just%20(DragPane%20mb%20ty%20delta%20split)%20%7c%20Just%20ReleaseResources%20%3c-%20fromMessage%20x%20=%20do%20deleteWindow%20win%20return%20$%20Just%20(DragPane%20(I%20Nothing)%20ty%20delta%20split)%20--%20layout%20specific%20messages%20%7c%20Just%20Shrink%20%3c-%20fromMessage%20x%20=%20return%20$%20Just%20(DragPane%20mb%20ty%20delta%20(split%20-%20delta))%20%7c%20Just%20Expand%20%3c-%20fromMessage%20x%20=%20return%20$%20Just%20(DragPane%20mb%20ty%20delta%20(split%20+%20delta))%20%7c%20Just%20(SetFrac%20ident'%20frac)%20%3c-%20fromMessage%20x,%20ident'%20==%20ident%20=%20do%20return%20$%20Just%20(DragPane%20mb%20ty%20delta%20frac)%20handleMess%20_%20_%20=%20return%20Nothing%20handleEvent%20::%20DragPane%20a%20-%3e%20Event%20-%3e%20X%20()%20handleEvent%20(DragPane%20(I%20(Just%20(win,r,ident)))%20ty%20_%20_)%20(ButtonEvent%20%7bev_window%20=%20thisw,%20ev_subwindow%20=%20thisbw,%20ev_event_type%20=%20t%20%7d)%20%7c%20t%20==%20buttonPress%20&&%20thisw%20==%20win%20%7c%7c%20thisbw%20==%20win%20=%20do%20mouseDrag%20(%5cex%20ey%20-%3e%20do%20let%20frac%20=%20case%20ty%20of%20Vertical%20-%3e%20(fromIntegral%20ex%20-%20(fromIntegral%20$%20rect_x%20r))/(fromIntegral%20$%20rect_width%20r)%20Horizontal%20-%3e%20(fromIntegral%20ey%20-%20(fromIntegral%20$%20rect_x%20r))/(fromIntegral%20$%20rect_width%20r)%20sendMessage%20(SetFrac%20ident%20frac))%20(return%20())%20handleEvent%20_%20_%20=%20return%20()%20doLay%20::%20(Rectangle%20-%3e%20Rectangle)%20-%3e%20DragPane%20a%20-%3e%20Rectangle%20-%3e%20W.Stack%20a%20-%3e%20X%20(%5b(a,%20Rectangle)%5d,%20Maybe%20(DragPane%20a))%20doLay%20mirror%20(DragPane%20mw%20ty%20delta%20split)%20r%20s%20=%20do%20let%20r'%20=%20mirror%20r%20(left',%20right')%20=%20splitHorizontallyBy%20split%20r'%20left%20=%20case%20left'%20of%20Rectangle%20x%20y%20w%20h%20-%3e%20mirror%20$%20Rectangle%20x%20y%20(w-halfHandleWidth)%20h%20right%20=%20case%20right'%20of%20Rectangle%20x%20y%20w%20h%20-%3e%20mirror%20$%20Rectangle%20(x+halfHandleWidth)%20y%20(w-halfHandleWidth)%20h%20handr%20=%20case%20left'%20of%20Rectangle%20x%20y%20w%20h%20-%3e%20mirror%20$%20Rectangle%20(x%20+%20fromIntegral%20w%20-%20halfHandleWidth)%20y%20(2*halfHandleWidth)%20h%20wrs%20=%20case%20reverse%20(W.up%20s)%20of%20(master:_)%20-%3e%20%5b(master,left),(W.focus%20s,right)%5d%20%5b%5d%20-%3e%20case%20W.down%20s%20of%20(next:_)%20-%3e%20%5b(W.focus%20s,left),(next,right)%5d%20%5b%5d%20-%3e%20%5b(W.focus%20s,%20r)%5d%20if%20length%20wrs%20%3e%201%20then%20case%20mw%20of%20I%20(Just%20(w,_,ident))%20-%3e%20do%20w'%20%3c-%20deleteWindow%20w%20%3e%3e%20newDragWin%20handr%20return%20(wrs,%20Just%20$%20DragPane%20(I%20$%20Just%20(w',r',ident))%20ty%20delta%20split)%20I%20Nothing%20-%3e%20do%20w%20%3c-%20newDragWin%20handr%20i%20%3c-%20io%20$%20newUnique%20return%20(wrs,%20Just%20$%20DragPane%20(I%20$%20Just%20(w,r',hashUnique%20i))%20ty%20delta%20split)%20else%20return%20(wrs,%20Nothing)%20newDragWin%20::%20Rectangle%20-%3e%20X%20Window%20newDragWin%20r%20=%20do%20let%20mask%20=%20Just%20$%20exposureMask%20.%7c.%20buttonPressMask%20w%20%3c-%20createNewWindow%20r%20mask%20handleColor%20False%20showWindow%20w%20d%20%3c-%20asks%20display%20liftIO%20$%20lowerWindow%20d%20w%20return%20w"></a><span class='hs-keyword'>instance</span> <span class='hs-conid'>Message</span> <span class='hs-conid'>SetFrac</span>
<a name="line-72"></a>
<a name="line-73"></a><a name="handleMess"></a><span class='hs-definition'>handleMess</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>SomeMessage</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>X</span> <span class='hs-layout'>(</span><span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-74"></a><span class='hs-definition'>handleMess</span> <span class='hs-varid'>d</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mb</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>win</span><span class='hs-layout'>,</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span><span class='hs-varid'>ident</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span> <span class='hs-varid'>x</span>
<a name="line-75"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-varid'>e</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Maybe</span> <span class='hs-conid'>Event</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>handleEvent</span> <span class='hs-varid'>d</span> <span class='hs-varid'>e</span>
<a name="line-76"></a>                                                  <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-77"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Hide</span>             <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>hideWindow</span> <span class='hs-varid'>win</span>
<a name="line-78"></a>                                                  <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span>
<a name="line-79"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>ReleaseResources</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span> <span class='hs-varid'>deleteWindow</span> <span class='hs-varid'>win</span>
<a name="line-80"></a>                                                  <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span>
<a name="line-81"></a>    <span class='hs-comment'>-- layout specific messages</span>
<a name="line-82"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Shrink</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-layout'>(</span><span class='hs-varid'>split</span> <span class='hs-comment'>-</span> <span class='hs-varid'>delta</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-83"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-conid'>Expand</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-layout'>(</span><span class='hs-varid'>split</span> <span class='hs-varop'>+</span> <span class='hs-varid'>delta</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-84"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>SetFrac</span> <span class='hs-varid'>ident'</span> <span class='hs-varid'>frac</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>fromMessage</span> <span class='hs-varid'>x</span><span class='hs-layout'>,</span> <span class='hs-varid'>ident'</span> <span class='hs-varop'>==</span> <span class='hs-varid'>ident</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-85"></a>                                     <span class='hs-varid'>return</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mb</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>frac</span><span class='hs-layout'>)</span>
<a name="line-86"></a><span class='hs-definition'>handleMess</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>Nothing</span>
<a name="line-87"></a>
<a name="line-88"></a><a name="handleEvent"></a><span class='hs-definition'>handleEvent</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Event</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>X</span> <span class='hs-conid'>()</span>
<a name="line-89"></a><span class='hs-definition'>handleEvent</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>win</span><span class='hs-layout'>,</span><span class='hs-varid'>r</span><span class='hs-layout'>,</span><span class='hs-varid'>ident</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>ty</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span><span class='hs-layout'>)</span>
<a name="line-90"></a>            <span class='hs-layout'>(</span><span class='hs-conid'>ButtonEvent</span> <span class='hs-layout'>{</span><span class='hs-varid'>ev_window</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>thisw</span><span class='hs-layout'>,</span> <span class='hs-varid'>ev_subwindow</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>thisbw</span><span class='hs-layout'>,</span> <span class='hs-varid'>ev_event_type</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>t</span> <span class='hs-layout'>}</span><span class='hs-layout'>)</span>
<a name="line-91"></a>    <span class='hs-keyglyph'>|</span> <span class='hs-varid'>t</span> <span class='hs-varop'>==</span> <span class='hs-varid'>buttonPress</span> <span class='hs-varop'>&amp;&amp;</span> <span class='hs-varid'>thisw</span> <span class='hs-varop'>==</span> <span class='hs-varid'>win</span> <span class='hs-varop'>||</span> <span class='hs-varid'>thisbw</span> <span class='hs-varop'>==</span> <span class='hs-varid'>win</span>  <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-92"></a>  <span class='hs-varid'>mouseDrag</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>\</span><span class='hs-varid'>ex</span> <span class='hs-varid'>ey</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-93"></a>             <span class='hs-keyword'>let</span> <span class='hs-varid'>frac</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>ty</span> <span class='hs-keyword'>of</span>
<a name="line-94"></a>                        <span class='hs-conid'>Vertical</span>   <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>ex</span> <span class='hs-comment'>-</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rect_x</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-varop'>/</span><span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rect_width</span>  <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
<a name="line-95"></a>                        <span class='hs-conid'>Horizontal</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>ey</span> <span class='hs-comment'>-</span> <span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rect_x</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span><span class='hs-varop'>/</span><span class='hs-layout'>(</span><span class='hs-varid'>fromIntegral</span> <span class='hs-varop'>$</span> <span class='hs-varid'>rect_width</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span>
<a name="line-96"></a>             <span class='hs-varid'>sendMessage</span> <span class='hs-layout'>(</span><span class='hs-conid'>SetFrac</span> <span class='hs-varid'>ident</span> <span class='hs-varid'>frac</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-97"></a>            <span class='hs-layout'>(</span><span class='hs-varid'>return</span> <span class='hs-conid'>()</span><span class='hs-layout'>)</span>
<a name="line-98"></a><span class='hs-definition'>handleEvent</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span>  <span class='hs-keyglyph'>=</span> <span class='hs-varid'>return</span> <span class='hs-conid'>()</span>
<a name="line-99"></a>
<a name="line-100"></a><a name="doLay"></a><span class='hs-definition'>doLay</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>Rectangle</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Rectangle</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Rectangle</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-conid'>Stack</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>X</span> <span class='hs-layout'>(</span><span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>a</span><span class='hs-layout'>,</span> <span class='hs-conid'>Rectangle</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span><span class='hs-layout'>,</span> <span class='hs-conid'>Maybe</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span>
<a name="line-101"></a><span class='hs-definition'>doLay</span> <span class='hs-varid'>mirror</span> <span class='hs-layout'>(</span><span class='hs-conid'>DragPane</span> <span class='hs-varid'>mw</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span> <span class='hs-varid'>r</span> <span class='hs-varid'>s</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-102"></a>  <span class='hs-keyword'>let</span> <span class='hs-varid'>r'</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>mirror</span> <span class='hs-varid'>r</span>
<a name="line-103"></a>      <span class='hs-layout'>(</span><span class='hs-varid'>left'</span><span class='hs-layout'>,</span> <span class='hs-varid'>right'</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>splitHorizontallyBy</span> <span class='hs-varid'>split</span> <span class='hs-varid'>r'</span>
<a name="line-104"></a>      <span class='hs-varid'>left</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>left'</span> <span class='hs-keyword'>of</span> <span class='hs-conid'>Rectangle</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-varid'>w</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-105"></a>                               <span class='hs-varid'>mirror</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Rectangle</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-comment'>-</span><span class='hs-varid'>halfHandleWidth</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span>
<a name="line-106"></a>      <span class='hs-varid'>right</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>right'</span> <span class='hs-keyword'>of</span>
<a name="line-107"></a>                <span class='hs-conid'>Rectangle</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-varid'>w</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-108"></a>                    <span class='hs-varid'>mirror</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Rectangle</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span><span class='hs-varop'>+</span><span class='hs-varid'>halfHandleWidth</span><span class='hs-layout'>)</span> <span class='hs-varid'>y</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-comment'>-</span><span class='hs-varid'>halfHandleWidth</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span>
<a name="line-109"></a>      <span class='hs-varid'>handr</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>left'</span> <span class='hs-keyword'>of</span>
<a name="line-110"></a>                <span class='hs-conid'>Rectangle</span> <span class='hs-varid'>x</span> <span class='hs-varid'>y</span> <span class='hs-varid'>w</span> <span class='hs-varid'>h</span> <span class='hs-keyglyph'>-&gt;</span>
<a name="line-111"></a>                    <span class='hs-varid'>mirror</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Rectangle</span> <span class='hs-layout'>(</span><span class='hs-varid'>x</span> <span class='hs-varop'>+</span> <span class='hs-varid'>fromIntegral</span> <span class='hs-varid'>w</span> <span class='hs-comment'>-</span> <span class='hs-varid'>halfHandleWidth</span><span class='hs-layout'>)</span> <span class='hs-varid'>y</span> <span class='hs-layout'>(</span><span class='hs-num'>2</span><span class='hs-varop'>*</span><span class='hs-varid'>halfHandleWidth</span><span class='hs-layout'>)</span> <span class='hs-varid'>h</span>
<a name="line-112"></a>      <span class='hs-varid'>wrs</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>reverse</span> <span class='hs-layout'>(</span><span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-varid'>up</span> <span class='hs-varid'>s</span><span class='hs-layout'>)</span> <span class='hs-keyword'>of</span>
<a name="line-113"></a>              <span class='hs-layout'>(</span><span class='hs-varid'>master</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-varid'>master</span><span class='hs-layout'>,</span><span class='hs-varid'>left</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span><span class='hs-layout'>(</span><span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-varid'>focus</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span><span class='hs-varid'>right</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-114"></a>              <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>case</span> <span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-varid'>down</span> <span class='hs-varid'>s</span> <span class='hs-keyword'>of</span>
<a name="line-115"></a>                      <span class='hs-layout'>(</span><span class='hs-varid'>next</span><span class='hs-conop'>:</span><span class='hs-keyword'>_</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-varid'>focus</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span><span class='hs-varid'>left</span><span class='hs-layout'>)</span><span class='hs-layout'>,</span><span class='hs-layout'>(</span><span class='hs-varid'>next</span><span class='hs-layout'>,</span><span class='hs-varid'>right</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-116"></a>                      <span class='hs-conid'>[]</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyglyph'>[</span><span class='hs-layout'>(</span><span class='hs-conid'>W</span><span class='hs-varop'>.</span><span class='hs-varid'>focus</span> <span class='hs-varid'>s</span><span class='hs-layout'>,</span> <span class='hs-varid'>r</span><span class='hs-layout'>)</span><span class='hs-keyglyph'>]</span>
<a name="line-117"></a>  <span class='hs-keyword'>if</span> <span class='hs-varid'>length</span> <span class='hs-varid'>wrs</span> <span class='hs-varop'>&gt;</span> <span class='hs-num'>1</span>
<a name="line-118"></a>     <span class='hs-keyword'>then</span> <span class='hs-keyword'>case</span> <span class='hs-varid'>mw</span> <span class='hs-keyword'>of</span>
<a name="line-119"></a>            <span class='hs-conid'>I</span> <span class='hs-layout'>(</span><span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-layout'>,</span><span class='hs-keyword'>_</span><span class='hs-layout'>,</span><span class='hs-varid'>ident</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-120"></a>                    <span class='hs-varid'>w'</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>deleteWindow</span> <span class='hs-varid'>w</span> <span class='hs-varop'>&gt;&gt;</span> <span class='hs-varid'>newDragWin</span> <span class='hs-varid'>handr</span>
<a name="line-121"></a>                    <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>wrs</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>w'</span><span class='hs-layout'>,</span><span class='hs-varid'>r'</span><span class='hs-layout'>,</span><span class='hs-varid'>ident</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span>
<a name="line-122"></a>            <span class='hs-conid'>I</span> <span class='hs-conid'>Nothing</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-keyword'>do</span>
<a name="line-123"></a>                    <span class='hs-varid'>w</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>newDragWin</span> <span class='hs-varid'>handr</span>
<a name="line-124"></a>                    <span class='hs-varid'>i</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>io</span> <span class='hs-varop'>$</span> <span class='hs-varid'>newUnique</span>
<a name="line-125"></a>                    <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>wrs</span><span class='hs-layout'>,</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-conid'>DragPane</span> <span class='hs-layout'>(</span><span class='hs-conid'>I</span> <span class='hs-varop'>$</span> <span class='hs-conid'>Just</span> <span class='hs-layout'>(</span><span class='hs-varid'>w</span><span class='hs-layout'>,</span><span class='hs-varid'>r'</span><span class='hs-layout'>,</span><span class='hs-varid'>hashUnique</span> <span class='hs-varid'>i</span><span class='hs-layout'>)</span><span class='hs-layout'>)</span> <span class='hs-varid'>ty</span> <span class='hs-varid'>delta</span> <span class='hs-varid'>split</span><span class='hs-layout'>)</span>
<a name="line-126"></a>     <span class='hs-keyword'>else</span> <span class='hs-varid'>return</span> <span class='hs-layout'>(</span><span class='hs-varid'>wrs</span><span class='hs-layout'>,</span> <span class='hs-conid'>Nothing</span><span class='hs-layout'>)</span>
<a name="line-127"></a>
<a name="line-128"></a>
<a name="line-129"></a><a name="newDragWin"></a><span class='hs-definition'>newDragWin</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Rectangle</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>X</span> <span class='hs-conid'>Window</span>
<a name="line-130"></a><span class='hs-definition'>newDragWin</span> <span class='hs-varid'>r</span> <span class='hs-keyglyph'>=</span> <span class='hs-keyword'>do</span>
<a name="line-131"></a>  <span class='hs-keyword'>let</span> <span class='hs-varid'>mask</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Just</span> <span class='hs-varop'>$</span> <span class='hs-varid'>exposureMask</span> <span class='hs-varop'>.|.</span> <span class='hs-varid'>buttonPressMask</span>
<a name="line-132"></a>  <span class='hs-varid'>w</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>createNewWindow</span> <span class='hs-varid'>r</span> <span class='hs-varid'>mask</span> <span class='hs-varid'>handleColor</span> <span class='hs-conid'>False</span>
<a name="line-133"></a>  <span class='hs-varid'>showWindow</span>  <span class='hs-varid'>w</span>
<a name="line-134"></a>  <span class='hs-varid'>d</span> <span class='hs-keyglyph'>&lt;-</span> <span class='hs-varid'>asks</span> <span class='hs-varid'>display</span>
<a name="line-135"></a>  <span class='hs-varid'>liftIO</span> <span class='hs-varop'>$</span> <span class='hs-varid'>lowerWindow</span> <span class='hs-varid'>d</span> <span class='hs-varid'>w</span>
<a name="line-136"></a>  <span class='hs-varid'>return</span>      <span class='hs-varid'>w</span>
</pre></body>
</html>