module XMonad.Util.XUtils
(
averagePixels
, createNewWindow
, showWindow
, showWindows
, hideWindow
, hideWindows
, deleteWindow
, deleteWindows
, paintWindow
, paintAndWrite
, paintTextAndIcons
, stringToPixel
, pixelToString
, fi
) where
import XMonad.Prelude
import XMonad
import XMonad.Util.Font
import XMonad.Util.Image
averagePixels :: Pixel -> Pixel -> Double -> X Pixel
averagePixels :: Atom -> Atom -> Double -> X Atom
averagePixels Atom
p1 Atom
p2 Double
f =
do Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
let cm :: Atom
cm = Display -> Dimension -> Atom
defaultColormap Display
d (Display -> Dimension
defaultScreen Display
d)
[Color Atom
_ Word16
r1 Word16
g1 Word16
b1 Word8
_,Color Atom
_ Word16
r2 Word16
g2 Word16
b2 Word8
_] <- IO [Color] -> X [Color]
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO [Color] -> X [Color]) -> IO [Color] -> X [Color]
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> [Color] -> IO [Color]
queryColors Display
d Atom
cm [Atom -> Word16 -> Word16 -> Word16 -> Word8 -> Color
Color Atom
p1 Word16
0 Word16
0 Word16
0 Word8
0,Atom -> Word16 -> Word16 -> Word16 -> Word8 -> Color
Color Atom
p2 Word16
0 Word16
0 Word16
0 Word8
0]
let mn :: a -> a -> b
mn a
x1 a
x2 = Double -> b
forall a b. (RealFrac a, Integral b) => a -> b
round (a -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x1 Double -> Double -> Double
forall a. Num a => a -> a -> a
* Double
f Double -> Double -> Double
forall a. Num a => a -> a -> a
+ a -> Double
forall a b. (Integral a, Num b) => a -> b
fromIntegral a
x2 Double -> Double -> Double
forall a. Num a => a -> a -> a
* (Double
1Double -> Double -> Double
forall a. Num a => a -> a -> a
-Double
f))
Color Atom
p Word16
_ Word16
_ Word16
_ Word8
_ <- IO Color -> X Color
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO Color -> X Color) -> IO Color -> X Color
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> Color -> IO Color
allocColor Display
d Atom
cm (Atom -> Word16 -> Word16 -> Word16 -> Word8 -> Color
Color Atom
0 (Word16 -> Word16 -> Word16
forall {b} {a} {a}.
(Integral b, Integral a, Integral a) =>
a -> a -> b
mn Word16
r1 Word16
r2) (Word16 -> Word16 -> Word16
forall {b} {a} {a}.
(Integral b, Integral a, Integral a) =>
a -> a -> b
mn Word16
g1 Word16
g2) (Word16 -> Word16 -> Word16
forall {b} {a} {a}.
(Integral b, Integral a, Integral a) =>
a -> a -> b
mn Word16
b1 Word16
b2) Word8
0)
Atom -> X Atom
forall (m :: * -> *) a. Monad m => a -> m a
return Atom
p
createNewWindow :: Rectangle -> Maybe EventMask -> String -> Bool -> X Window
createNewWindow :: Rectangle -> Maybe Atom -> String -> Bool -> X Atom
createNewWindow (Rectangle Position
x Position
y Dimension
w Dimension
h) Maybe Atom
m String
col Bool
o = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
Atom
rw <- (XConf -> Atom) -> X Atom
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Atom
theRoot
Atom
c <- Display -> String -> X Atom
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display -> String -> m Atom
stringToPixel Display
d String
col
Atom
win <- IO Atom -> X Atom
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO Atom -> X Atom) -> IO Atom -> X Atom
forall a b. (a -> b) -> a -> b
$ Display
-> Screen
-> Atom
-> Position
-> Position
-> Dimension
-> Dimension
-> Atom
-> Bool
-> IO Atom
mkWindow Display
d (Display -> Screen
defaultScreenOfDisplay Display
d) Atom
rw Position
x Position
y Dimension
w Dimension
h Atom
c Bool
o
case Maybe Atom
m of
Just Atom
em -> IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> Atom -> IO ()
selectInput Display
d Atom
win Atom
em
Maybe Atom
Nothing -> IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> Atom -> IO ()
selectInput Display
d Atom
win Atom
exposureMask
X Bool -> X () -> X ()
whenX (Bool -> X Bool
forall (m :: * -> *) a. Monad m => a -> m a
return (Bool -> X Bool) -> Bool -> X Bool
forall a b. (a -> b) -> a -> b
$ Maybe Atom -> Bool
forall a. Maybe a -> Bool
isJust Maybe Atom
m) (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$ (X () -> X () -> X ()) -> X () -> X () -> X ()
forall a b c. (a -> b -> c) -> b -> a -> c
flip X () -> X () -> X ()
forall a. X a -> X a -> X a
catchX (() -> X ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()) (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$ do
Atom
wINDOW_TYPE <- String -> X Atom
getAtom String
"_NET_WM_WINDOW_TYPE"
Atom
dESKTOP <- String -> X Atom
getAtom String
"_NET_WM_WINDOW_TYPE_DESKTOP"
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> Atom -> Atom -> CInt -> [CLong] -> IO ()
changeProperty32 Display
d Atom
win Atom
wINDOW_TYPE Atom
aTOM CInt
propModeReplace [Atom -> CLong
forall a b. (Integral a, Num b) => a -> b
fi Atom
dESKTOP]
Atom -> X Atom
forall (m :: * -> *) a. Monad m => a -> m a
return Atom
win
showWindow :: Window -> X ()
showWindow :: Atom -> X ()
showWindow Atom
w = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> IO ()
mapWindow Display
d Atom
w
showWindows :: [Window] -> X ()
showWindows :: [Atom] -> X ()
showWindows = (Atom -> X ()) -> [Atom] -> X ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Atom -> X ()
showWindow
hideWindow :: Window -> X ()
hideWindow :: Atom -> X ()
hideWindow Atom
w = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> IO ()
unmapWindow Display
d Atom
w
hideWindows :: [Window] -> X ()
hideWindows :: [Atom] -> X ()
hideWindows = (Atom -> X ()) -> [Atom] -> X ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Atom -> X ()
hideWindow
deleteWindow :: Window -> X ()
deleteWindow :: Atom -> X ()
deleteWindow Atom
w = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> IO ()
destroyWindow Display
d Atom
w
deleteWindows :: [Window] -> X ()
deleteWindows :: [Atom] -> X ()
deleteWindows = (Atom -> X ()) -> [Atom] -> X ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
(a -> m b) -> t a -> m ()
mapM_ Atom -> X ()
deleteWindow
paintWindow :: Window
-> Dimension
-> Dimension
-> Dimension
-> String
-> String
-> X ()
paintWindow :: Atom
-> Dimension -> Dimension -> Dimension -> String -> String -> X ()
paintWindow Atom
w Dimension
wh Dimension
ht Dimension
bw String
c String
bc =
Atom
-> Rectangle
-> Dimension
-> String
-> String
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe (String, String, [((Position, Position), [[Bool]])])
-> X ()
paintWindow' Atom
w (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht) Dimension
bw String
c String
bc Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
forall a. Maybe a
Nothing Maybe (String, String, [((Position, Position), [[Bool]])])
forall a. Maybe a
Nothing
paintAndWrite :: Window
-> XMonadFont
-> Dimension
-> Dimension
-> Dimension
-> String
-> String
-> String
-> String
-> [Align]
-> [String]
-> X ()
paintAndWrite :: Atom
-> XMonadFont
-> Dimension
-> Dimension
-> Dimension
-> String
-> String
-> String
-> String
-> [Align]
-> [String]
-> X ()
paintAndWrite Atom
w XMonadFont
fs Dimension
wh Dimension
ht Dimension
bw String
bc String
borc String
ffc String
fbc [Align]
als [String]
strs = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
[(Position, Position)]
strPositions <- [(Align, String)]
-> ((Align, String) -> X (Position, Position))
-> X [(Position, Position)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM ([Align] -> [String] -> [(Align, String)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Align]
als [String]
strs) (((Align, String) -> X (Position, Position))
-> X [(Position, Position)])
-> ((Align, String) -> X (Position, Position))
-> X [(Position, Position)]
forall a b. (a -> b) -> a -> b
$
(Align -> String -> X (Position, Position))
-> (Align, String) -> X (Position, Position)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (Display
-> XMonadFont
-> Rectangle
-> Align
-> String
-> X (Position, Position)
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display
-> XMonadFont
-> Rectangle
-> Align
-> String
-> m (Position, Position)
stringPosition Display
d XMonadFont
fs (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht))
let ms :: Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
ms = (XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
forall a. a -> Maybe a
Just (XMonadFont
fs,String
ffc,String
fbc, [String]
-> [(Position, Position)] -> [(String, (Position, Position))]
forall a b. [a] -> [b] -> [(a, b)]
zip [String]
strs [(Position, Position)]
strPositions)
Atom
-> Rectangle
-> Dimension
-> String
-> String
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe (String, String, [((Position, Position), [[Bool]])])
-> X ()
paintWindow' Atom
w (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht) Dimension
bw String
bc String
borc Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
ms Maybe (String, String, [((Position, Position), [[Bool]])])
forall a. Maybe a
Nothing
paintTextAndIcons :: Window
-> XMonadFont
-> Dimension
-> Dimension
-> Dimension
-> String
-> String
-> String
-> String
-> [Align]
-> [String]
-> [Placement]
-> [[[Bool]]]
-> X ()
paintTextAndIcons :: Atom
-> XMonadFont
-> Dimension
-> Dimension
-> Dimension
-> String
-> String
-> String
-> String
-> [Align]
-> [String]
-> [Placement]
-> [[[Bool]]]
-> X ()
paintTextAndIcons Atom
w XMonadFont
fs Dimension
wh Dimension
ht Dimension
bw String
bc String
borc String
ffc String
fbc [Align]
als [String]
strs [Placement]
i_als [[[Bool]]]
icons = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
[(Position, Position)]
strPositions <- [(Align, String)]
-> ((Align, String) -> X (Position, Position))
-> X [(Position, Position)]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
t a -> (a -> m b) -> m (t b)
forM ([Align] -> [String] -> [(Align, String)]
forall a b. [a] -> [b] -> [(a, b)]
zip [Align]
als [String]
strs) (((Align, String) -> X (Position, Position))
-> X [(Position, Position)])
-> ((Align, String) -> X (Position, Position))
-> X [(Position, Position)]
forall a b. (a -> b) -> a -> b
$ (Align -> String -> X (Position, Position))
-> (Align, String) -> X (Position, Position)
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (Display
-> XMonadFont
-> Rectangle
-> Align
-> String
-> X (Position, Position)
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display
-> XMonadFont
-> Rectangle
-> Align
-> String
-> m (Position, Position)
stringPosition Display
d XMonadFont
fs (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht))
let iconPositions :: [(Position, Position)]
iconPositions = (Placement -> [[Bool]] -> (Position, Position))
-> [Placement] -> [[[Bool]]] -> [(Position, Position)]
forall a b c. (a -> b -> c) -> [a] -> [b] -> [c]
zipWith (Rectangle -> Placement -> [[Bool]] -> (Position, Position)
iconPosition (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht)) [Placement]
i_als [[[Bool]]]
icons
ms :: Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
ms = (XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
forall a. a -> Maybe a
Just (XMonadFont
fs,String
ffc,String
fbc, [String]
-> [(Position, Position)] -> [(String, (Position, Position))]
forall a b. [a] -> [b] -> [(a, b)]
zip [String]
strs [(Position, Position)]
strPositions)
is :: Maybe (String, String, [((Position, Position), [[Bool]])])
is = (String, String, [((Position, Position), [[Bool]])])
-> Maybe (String, String, [((Position, Position), [[Bool]])])
forall a. a -> Maybe a
Just (String
ffc, String
fbc, [(Position, Position)]
-> [[[Bool]]] -> [((Position, Position), [[Bool]])]
forall a b. [a] -> [b] -> [(a, b)]
zip [(Position, Position)]
iconPositions [[[Bool]]]
icons)
Atom
-> Rectangle
-> Dimension
-> String
-> String
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe (String, String, [((Position, Position), [[Bool]])])
-> X ()
paintWindow' Atom
w (Position -> Position -> Dimension -> Dimension -> Rectangle
Rectangle Position
0 Position
0 Dimension
wh Dimension
ht) Dimension
bw String
bc String
borc Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
ms Maybe (String, String, [((Position, Position), [[Bool]])])
is
paintWindow' :: Window -> Rectangle -> Dimension -> String -> String
-> Maybe (XMonadFont,String,String,[(String, (Position, Position))])
-> Maybe (String, String, [((Position, Position), [[Bool]])]) -> X ()
paintWindow' :: Atom
-> Rectangle
-> Dimension
-> String
-> String
-> Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> Maybe (String, String, [((Position, Position), [[Bool]])])
-> X ()
paintWindow' Atom
win (Rectangle Position
_ Position
_ Dimension
wh Dimension
ht) Dimension
bw String
color String
b_color Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
strStuff Maybe (String, String, [((Position, Position), [[Bool]])])
iconStuff = do
Display
d <- (XConf -> Display) -> X Display
forall r (m :: * -> *) a. MonadReader r m => (r -> a) -> m a
asks XConf -> Display
display
Atom
p <- IO Atom -> X Atom
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO Atom -> X Atom) -> IO Atom -> X Atom
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> Dimension -> Dimension -> CInt -> IO Atom
createPixmap Display
d Atom
win Dimension
wh Dimension
ht (Screen -> CInt
defaultDepthOfScreen (Screen -> CInt) -> Screen -> CInt
forall a b. (a -> b) -> a -> b
$ Display -> Screen
defaultScreenOfDisplay Display
d)
GC
gc <- IO GC -> X GC
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO GC -> X GC) -> IO GC -> X GC
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> IO GC
createGC Display
d Atom
p
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> GC -> Bool -> IO ()
setGraphicsExposures Display
d GC
gc Bool
False
[Atom
color',Atom
b_color'] <- (String -> X Atom) -> [String] -> X [Atom]
forall (t :: * -> *) (m :: * -> *) a b.
(Traversable t, Monad m) =>
(a -> m b) -> t a -> m (t b)
mapM (Display -> String -> X Atom
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display -> String -> m Atom
stringToPixel Display
d) [String
color,String
b_color]
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> GC -> Atom -> IO ()
setForeground Display
d GC
gc Atom
b_color'
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display
-> Atom
-> GC
-> Position
-> Position
-> Dimension
-> Dimension
-> IO ()
fillRectangle Display
d Atom
p GC
gc Position
0 Position
0 Dimension
wh Dimension
ht
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> GC -> Atom -> IO ()
setForeground Display
d GC
gc Atom
color'
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display
-> Atom
-> GC
-> Position
-> Position
-> Dimension
-> Dimension
-> IO ()
fillRectangle Display
d Atom
p GC
gc (Dimension -> Position
forall a b. (Integral a, Num b) => a -> b
fi Dimension
bw) (Dimension -> Position
forall a b. (Integral a, Num b) => a -> b
fi Dimension
bw) (Dimension
wh Dimension -> Dimension -> Dimension
forall a. Num a => a -> a -> a
- (Dimension
bw Dimension -> Dimension -> Dimension
forall a. Num a => a -> a -> a
* Dimension
2)) (Dimension
ht Dimension -> Dimension -> Dimension
forall a. Num a => a -> a -> a
- (Dimension
bw Dimension -> Dimension -> Dimension
forall a. Num a => a -> a -> a
* Dimension
2))
Bool -> X () -> X ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> Bool
forall a. Maybe a -> Bool
isJust Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
strStuff) (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$ do
let (XMonadFont
xmf,String
fc,String
bc,[(String, (Position, Position))]
strAndPos) = Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
-> (XMonadFont, String, String, [(String, (Position, Position))])
forall a. HasCallStack => Maybe a -> a
fromJust Maybe
(XMonadFont, String, String, [(String, (Position, Position))])
strStuff
[(String, (Position, Position))]
-> ((String, (Position, Position)) -> X ()) -> X ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [(String, (Position, Position))]
strAndPos (((String, (Position, Position)) -> X ()) -> X ())
-> ((String, (Position, Position)) -> X ()) -> X ()
forall a b. (a -> b) -> a -> b
$ \(String
s, (Position
x, Position
y)) ->
Display
-> Atom
-> XMonadFont
-> GC
-> String
-> String
-> Position
-> Position
-> String
-> X ()
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display
-> Atom
-> XMonadFont
-> GC
-> String
-> String
-> Position
-> Position
-> String
-> m ()
printStringXMF Display
d Atom
p XMonadFont
xmf GC
gc String
fc String
bc Position
x Position
y String
s
Bool -> X () -> X ()
forall (f :: * -> *). Applicative f => Bool -> f () -> f ()
when (Maybe (String, String, [((Position, Position), [[Bool]])]) -> Bool
forall a. Maybe a -> Bool
isJust Maybe (String, String, [((Position, Position), [[Bool]])])
iconStuff) (X () -> X ()) -> X () -> X ()
forall a b. (a -> b) -> a -> b
$ do
let (String
fc, String
bc, [((Position, Position), [[Bool]])]
iconAndPos) = Maybe (String, String, [((Position, Position), [[Bool]])])
-> (String, String, [((Position, Position), [[Bool]])])
forall a. HasCallStack => Maybe a -> a
fromJust Maybe (String, String, [((Position, Position), [[Bool]])])
iconStuff
[((Position, Position), [[Bool]])]
-> (((Position, Position), [[Bool]]) -> X ()) -> X ()
forall (t :: * -> *) (m :: * -> *) a b.
(Foldable t, Monad m) =>
t a -> (a -> m b) -> m ()
forM_ [((Position, Position), [[Bool]])]
iconAndPos ((((Position, Position), [[Bool]]) -> X ()) -> X ())
-> (((Position, Position), [[Bool]]) -> X ()) -> X ()
forall a b. (a -> b) -> a -> b
$ \((Position
x, Position
y), [[Bool]]
icon) ->
Display
-> Atom
-> GC
-> String
-> String
-> Position
-> Position
-> [[Bool]]
-> X ()
forall (m :: * -> *).
(Functor m, MonadIO m) =>
Display
-> Atom
-> GC
-> String
-> String
-> Position
-> Position
-> [[Bool]]
-> m ()
drawIcon Display
d Atom
p GC
gc String
fc String
bc Position
x Position
y [[Bool]]
icon
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display
-> Atom
-> Atom
-> GC
-> Position
-> Position
-> Dimension
-> Dimension
-> Position
-> Position
-> IO ()
copyArea Display
d Atom
p Atom
win GC
gc Position
0 Position
0 Dimension
wh Dimension
ht Position
0 Position
0
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> Atom -> IO ()
freePixmap Display
d Atom
p
IO () -> X ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
io (IO () -> X ()) -> IO () -> X ()
forall a b. (a -> b) -> a -> b
$ Display -> GC -> IO ()
freeGC Display
d GC
gc
mkWindow :: Display -> Screen -> Window -> Position
-> Position -> Dimension -> Dimension -> Pixel -> Bool -> IO Window
mkWindow :: Display
-> Screen
-> Atom
-> Position
-> Position
-> Dimension
-> Dimension
-> Atom
-> Bool
-> IO Atom
mkWindow Display
d Screen
s Atom
rw Position
x Position
y Dimension
w Dimension
h Atom
p Bool
o = do
let visual :: Visual
visual = Screen -> Visual
defaultVisualOfScreen Screen
s
attrmask :: Atom
attrmask = Atom
cWOverrideRedirect Atom -> Atom -> Atom
forall a. Bits a => a -> a -> a
.|. Atom
cWBackPixel Atom -> Atom -> Atom
forall a. Bits a => a -> a -> a
.|. Atom
cWBorderPixel
(Ptr SetWindowAttributes -> IO Atom) -> IO Atom
forall a. (Ptr SetWindowAttributes -> IO a) -> IO a
allocaSetWindowAttributes ((Ptr SetWindowAttributes -> IO Atom) -> IO Atom)
-> (Ptr SetWindowAttributes -> IO Atom) -> IO Atom
forall a b. (a -> b) -> a -> b
$
\Ptr SetWindowAttributes
attributes -> do
Ptr SetWindowAttributes -> Bool -> IO ()
set_override_redirect Ptr SetWindowAttributes
attributes Bool
o
Ptr SetWindowAttributes -> Atom -> IO ()
set_border_pixel Ptr SetWindowAttributes
attributes Atom
p
Ptr SetWindowAttributes -> Atom -> IO ()
set_background_pixel Ptr SetWindowAttributes
attributes Atom
p
Display
-> Atom
-> Position
-> Position
-> Dimension
-> Dimension
-> CInt
-> CInt
-> CInt
-> Visual
-> Atom
-> Ptr SetWindowAttributes
-> IO Atom
createWindow Display
d Atom
rw Position
x Position
y Dimension
w Dimension
h CInt
0 (Screen -> CInt
defaultDepthOfScreen Screen
s)
CInt
inputOutput Visual
visual Atom
attrmask Ptr SetWindowAttributes
attributes