{-# LANGUAGE OverloadedStrings #-}
module Hasmin.Types.BorderRadius
( BorderRadius(..)
, isZeroBR
) where
import Data.List.NonEmpty (NonEmpty((:|)))
import qualified Data.List.NonEmpty as NE
import Data.Monoid ((<>))
import qualified Data.Text.Lazy.Builder as B
import Hasmin.Class
import Hasmin.Types.PercentageLength
import Hasmin.Utils
data BorderRadius = BorderRadius (NonEmpty PercentageLength) [PercentageLength]
deriving Show
instance Eq BorderRadius where
BorderRadius xs1 ys1 == BorderRadius xs2 ys2 =
minifyBorderRadius xs1 ys1 `eq` minifyBorderRadius xs2 ys2
where (BorderRadius as1 bs1) `eq` (BorderRadius as2 bs2) = as1 == as2 && bs1 == bs2
instance Minifiable BorderRadius where
minify (BorderRadius xs ys) =
minifyBorderRadius <$> traverse minifyPL xs <*> traverse minifyPL ys
minifyBorderRadius :: NonEmpty PercentageLength -> [PercentageLength] -> BorderRadius
minifyBorderRadius as [] = BorderRadius (reduceTRBL as) []
minifyBorderRadius as bs
| l1 == l2 = BorderRadius l1 []
| otherwise = BorderRadius l1 (NE.toList l2)
where l1 = reduceTRBL as
l2 = reduceTRBL (NE.fromList bs)
instance ToText BorderRadius where
toBuilder (BorderRadius (h:|ts) xs) = toBuilder h <> f ' ' ts <> f '/' xs
where f _ [] = mempty
f i ys = B.singleton i <> mconcatIntersperse toBuilder " " ys
isZeroBR :: BorderRadius -> Bool
isZeroBR (BorderRadius (pl:|[]) []) = isZero pl
isZeroBR _ = False