diff options
Diffstat (limited to 'lib/Phi/Border.hs')
-rw-r--r-- | lib/Phi/Border.hs | 20 |
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 () |