summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Border.hs
diff options
context:
space:
mode:
Diffstat (limited to 'lib/Phi/Border.hs')
-rw-r--r--lib/Phi/Border.hs20
1 files changed, 15 insertions, 5 deletions
diff --git a/lib/Phi/Border.hs b/lib/Phi/Border.hs
index 5a144df..1c664db 100644
--- a/lib/Phi/Border.hs
+++ b/lib/Phi/Border.hs
@@ -60,9 +60,13 @@ instance WidgetClass Border where
type WidgetData Border = BorderState
initWidget (Border _ widgets) phi disp = liftM BorderState $ mapM (createWidgetState phi disp) widgets
- minSize (Border config _) (BorderState widgetStates) height =
- max (borderH m+2*(bw+cr)) $ sum (map (\(WidgetState {stateWidget = w, statePrivateData = priv}) -> minSize w priv height') widgetStates) + borderH p + 2*bw + borderH m
+ minSize (Border config _) (BorderState widgetStates) height screen =
+ case True of
+ _ | childSize == 0 -> 0
+ | otherwise -> max (borderH m+2*(bw+cr)) (childSize + borderH p + 2*bw + borderH m)
where
+ childSize = sum $ map (\(WidgetState {stateWidget = w, statePrivateData = priv}) -> minSize w priv height' screen) widgetStates
+
m = margin config
bw = borderWidth config
p = padding config
@@ -71,7 +75,9 @@ instance WidgetClass Border where
weight (Border config _) = borderWeight config
- layout (Border config _) (BorderState widgetStates) width height = BorderState $ layoutWidgets widgetStates x y width' height'
+ layout (Border config _) (BorderState widgetStates) width height screen = case True of
+ _ | width' > 0 -> BorderState $ layoutWidgets widgetStates x y width' height' screen
+ | otherwise -> BorderState widgetStates
where
m = margin config
bw = borderWidth config
@@ -82,11 +88,15 @@ instance WidgetClass Border where
width' = width - borderH m - 2*bw - borderH p
height' = height - borderV m - 2*bw - borderV p
- render (Border config _) (BorderState widgetStates) w h screen = do
+ render (Border config _) (BorderState widgetStates) w h screen = when (w > borderH m - 2*bw - borderH p) $ do
drawBorder config 0 0 w h
clip
renderWidgets widgetStates screen
-
+ where
+ m = margin config
+ bw = borderWidth config
+ p = padding config
+
handleMessage _ (BorderState widgetStates) m = BorderState $ handleMessageWidgets m widgetStates
drawBorder :: BorderConfig -> Int -> Int -> Int -> Int -> Render ()