Allow drag selection box sizes to differ from selected box sizes
More tweaking needs to be done, after deciding a max width for selection items.
This commit is contained in:
@@ -8,11 +8,15 @@ module Dodge.SelectionSections (
|
||||
inverseSelSecYint,
|
||||
posSelSecYint,
|
||||
inverseSelNumPos,
|
||||
inverseSelNumPosFixedWidth,
|
||||
mouseInvPosFixWidth,
|
||||
ssLookupGE,
|
||||
ssLookupLE,
|
||||
sssSelectionSlice,
|
||||
) where
|
||||
|
||||
import Dodge.ListDisplayParams
|
||||
import Dodge.Data.Universe
|
||||
import Control.Applicative
|
||||
import qualified Control.Foldl as L
|
||||
import Control.Lens
|
||||
@@ -229,10 +233,42 @@ inverseSelSecYintXPosCheck cfig ldp x yint sss = do
|
||||
guard $ x - x1 < 160 && x > x1
|
||||
return sel
|
||||
|
||||
inverseSelSecYintXPosCheckFixedWidth ::
|
||||
Config -> LDParams -> Float -> Int -> IMSS a -> Maybe (XInfinity (Int, Int))
|
||||
inverseSelSecYintXPosCheckFixedWidth cfig ldp x yint sss = do
|
||||
let sel = inverseSelSecYint yint sss
|
||||
(i,j) <- case sel of
|
||||
NonInf v -> Just v
|
||||
NegInf -> do
|
||||
(i',j',_) <- ssLookupMin sss
|
||||
return (i',j')
|
||||
PosInf -> do
|
||||
(i',j',_) <- ssLookupMax sss
|
||||
return (i',j')
|
||||
let V2 x0 _ = screenPosAbs cfig (ldp ^. ldpPos)
|
||||
sindent <- sss ^? ix i . ssIndent
|
||||
itindent <- sss ^? ix i . ssItems . ix j . siOffX
|
||||
--let x1 = x0 + _ldpScale ldp * 10 * (fromIntegral (sindent + itindent) - 0.5)
|
||||
let x1 = x0 + _ldpScale ldp * 10 * (fromIntegral (sindent) - 0.5)
|
||||
guard $ x - x1 < 170 && x > x1
|
||||
return sel
|
||||
|
||||
mouseInvPosFixWidth :: Universe -> Maybe (XInfinity (Int,Int))
|
||||
mouseInvPosFixWidth u = inverseSelNumPosFixedWidth
|
||||
(u^.uvConfig)
|
||||
invDP
|
||||
(u^.uvWorld. input . mousePos)
|
||||
(u ^.uvWorld. hud . diSections)
|
||||
|
||||
|
||||
inverseSelNumPos :: Config -> LDParams -> Point2 -> IMSS a -> Maybe (XInfinity (Int, Int))
|
||||
inverseSelNumPos cfig ldp (V2 x y) =
|
||||
inverseSelSecYintXPosCheck cfig ldp x (posSelSecYint cfig ldp y)
|
||||
|
||||
inverseSelNumPosFixedWidth :: Config -> LDParams -> Point2 -> IMSS a -> Maybe (XInfinity (Int, Int))
|
||||
inverseSelNumPosFixedWidth cfig ldp (V2 x y) =
|
||||
inverseSelSecYintXPosCheckFixedWidth cfig ldp x (posSelSecYint cfig ldp y)
|
||||
|
||||
sssSelectionSlice :: IMSS a -> XInfinity (Int,Int) -> XInfinity (Int,Int) -> IMSS a
|
||||
sssSelectionSlice sss x1 x2 = fromMaybe mempty $ do
|
||||
let (xmin,xmax) | x1 < x2 = (x1,x2)
|
||||
|
||||
Reference in New Issue
Block a user