summaryrefslogtreecommitdiffstats
path: root/lib/Phi/Border.hs
diff options
context:
space:
mode:
authorMatthias Schiffer <mschiffer@universe-factory.net>2011-07-18 20:57:19 +0200
committerMatthias Schiffer <mschiffer@universe-factory.net>2011-07-18 20:57:19 +0200
commit581e1f9c63101fd2a00711748415997b0c20b793 (patch)
treeab2ee291354819727939593655e0a53383870b03 /lib/Phi/Border.hs
parent4cc0f0f2ee44aa5c65b8b7f759620b5de0c874a3 (diff)
downloadphi-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.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 ()