diff options
author | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-18 20:57:19 +0200 |
---|---|---|
committer | Matthias Schiffer <mschiffer@universe-factory.net> | 2011-07-18 20:57:19 +0200 |
commit | 581e1f9c63101fd2a00711748415997b0c20b793 (patch) | |
tree | ab2ee291354819727939593655e0a53383870b03 /lib/Phi/Border.hs | |
parent | 4cc0f0f2ee44aa5c65b8b7f759620b5de0c874a3 (diff) | |
download | phi-581e1f9c63101fd2a00711748415997b0c20b793.tar phi-581e1f9c63101fd2a00711748415997b0c20b793.zip |
Make minSize depend on the screen if necessary
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 () |