summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/Xmobar/Config/Parse.hs19
-rw-r--r--src/Xmobar/Config/Types.hs23
-rw-r--r--src/Xmobar/Run/Parsers.hs2
-rw-r--r--src/Xmobar/X11/Boxes.hs5
-rw-r--r--src/Xmobar/X11/CairoDraw.hs4
5 files changed, 30 insertions, 23 deletions
diff --git a/src/Xmobar/Config/Parse.hs b/src/Xmobar/Config/Parse.hs
index 41088e9..16af3db 100644
--- a/src/Xmobar/Config/Parse.hs
+++ b/src/Xmobar/Config/Parse.hs
@@ -16,7 +16,10 @@
------------------------------------------------------------------------------
-module Xmobar.Config.Parse(readConfig, parseConfig) where
+module Xmobar.Config.Parse(readConfig
+ , parseConfig
+ , indexedFont
+ , indexedOffset) where
import Text.ParserCombinators.Parsec
import Text.ParserCombinators.Parsec.Number (int)
@@ -174,3 +177,17 @@ commandsErr = "commands: this usually means that a command could not" ++
readConfig :: Config -> FilePath -> IO (Either ParseError (Config,[String]))
readConfig defaultConfig f =
liftIO (S.readFile f) <&> parseConfig defaultConfig
+
+-- | Extracts from a configuration the additional font at the corresponding index.
+-- Returns the default font if not present.
+indexedFont :: Config -> FontIndex -> String
+indexedFont config idx =
+ if idx < 1 || idx > length (additionalFonts config)
+ then font config else additionalFonts config !! (idx - 1)
+
+-- | Extracts from a configuration the offset at the corresponding index.
+-- Returns the default offset if not present.
+indexedOffset :: Config -> FontIndex -> Int
+indexedOffset config idx =
+ if idx < 1 || idx > length (textOffsets config)
+ then textOffset config else textOffsets config !! (idx - 1)
diff --git a/src/Xmobar/Config/Types.hs b/src/Xmobar/Config/Types.hs
index 3f2297f..a448d5d 100644
--- a/src/Xmobar/Config/Types.hs
+++ b/src/Xmobar/Config/Types.hs
@@ -1,6 +1,6 @@
-----------------------------------------------------------------------------
-- |
--- Module : Xmobar.Config
+-- Module : Xmobar.Config.Types
-- Copyright : (c) Andrea Rossato
-- License : BSD-style (see LICENSE)
--
@@ -13,12 +13,9 @@
-----------------------------------------------------------------------------
module Xmobar.Config.Types
- ( -- * Configuration
- -- $config
- Config (..)
+ ( Config (..)
, XPosition (..), Align (..), Border (..), TextOutputFormat (..)
- , SignalChan (..)
- , indexedFont, indexedOffset
+ , FontIndex, SignalChan (..)
) where
import qualified Control.Concurrent.STM as STM
@@ -71,19 +68,9 @@ data Config =
-- right text alignment
, template :: String -- ^ The output template
, verbose :: Bool -- ^ Emit additional debug messages
- , signal :: SignalChan -- ^ The signal channel used to send signals to xmobar
+ , signal :: SignalChan -- ^ The signal channel to send signals to xmobar
} deriving (Read, Show)
-indexedFont :: Config -> Int -> String
-indexedFont config idx =
- if idx < 1 || idx > length (additionalFonts config)
- then font config else additionalFonts config !! (idx - 1)
-
-indexedOffset :: Config -> Int -> Int
-indexedOffset config idx =
- if idx < 1 || idx > length (textOffsets config)
- then textOffset config else textOffsets config !! (idx - 1)
-
data XPosition = Top
| TopH Int
| TopW Align Int
@@ -111,6 +98,8 @@ data Border = NoBorder
data TextOutputFormat = Plain | Ansi | Pango | Swaybar deriving (Read, Show, Eq)
+type FontIndex = Int
+
newtype SignalChan = SignalChan { unSignalChan :: Maybe (STM.TMVar SignalType) }
instance Read SignalChan where
diff --git a/src/Xmobar/Run/Parsers.hs b/src/Xmobar/Run/Parsers.hs
index c0f3104..9b36786 100644
--- a/src/Xmobar/Run/Parsers.hs
+++ b/src/Xmobar/Run/Parsers.hs
@@ -64,8 +64,6 @@ data TextRenderInfo = TextRenderInfo { tColorsString :: String
, tBoxes :: [Box]
} deriving Show
-type FontIndex = Int
-
type Segment = (Widget, TextRenderInfo, FontIndex, Maybe [Action])
-- | Runs the string parser
diff --git a/src/Xmobar/X11/Boxes.hs b/src/Xmobar/X11/Boxes.hs
index c0eeeed..87a081f 100644
--- a/src/Xmobar/X11/Boxes.hs
+++ b/src/Xmobar/X11/Boxes.hs
@@ -18,6 +18,10 @@ module Xmobar.X11.Boxes (boxLines, borderRect) where
import Xmobar.Run.Parsers
import Xmobar.Config.Types
+-- | Computes the coordinates of a list of lines representing a Box.
+-- The Box is to be positioned between x0 and x1, with height ht, and drawn
+-- with line width lw. The returned lists are coordinates of the beginning
+-- and end of each line.
boxLines :: Box -> Double -> Double -> Double -> [(Double, Double, Double, Double)]
boxLines (Box bd offset lw _ margins) ht x0 x1 =
case bd of
@@ -39,6 +43,7 @@ boxLines (Box bd offset lw _ margins) ht x0 x1 =
rleft = (xmin, ymin + p0, xmin, ymax + p1)
rright = (xmax, ymin + p0, xmax, ymax + p1)
+-- | Computes the rectangle (x, y, width, height) for the given Border.
borderRect :: Border -> Double -> Double -> (Double, Double, Double, Double)
borderRect bdr w h =
case bdr of
diff --git a/src/Xmobar/X11/CairoDraw.hs b/src/Xmobar/X11/CairoDraw.hs
index b90b2f8..b7ecd34 100644
--- a/src/Xmobar/X11/CairoDraw.hs
+++ b/src/Xmobar/X11/CairoDraw.hs
@@ -35,12 +35,10 @@ import qualified Graphics.Rendering.Pango as P
import Xmobar.Run.Parsers (Segment
, Widget(..)
, Box (..)
- , BoxMargins (..)
- , BoxBorder (..)
- , BoxOffset (..)
, TextRenderInfo (..)
, colorComponents)
import Xmobar.Config.Types
+import Xmobar.Config.Parse (indexedFont, indexedOffset)
import Xmobar.Text.Pango (fixXft)
import Xmobar.X11.Types
import Xmobar.X11.Boxes (boxLines, borderRect)