module Color(tryAllocColor,tryAllocColorF, allocColor,allocColorF, allocColorPixel,allocColorPixelF, tryAllocNamedColor,tryAllocNamedColorF, allocNamedColor,allocNamedColorF, allocNamedColorPixel,allocNamedColorPixelF, allocNamedColorDef, allocNamedColorDefPixel, queryColor,queryColorF ) where import Command import Event --import Fudget import Xrequest import Xtypes import Cont --import NullF(F,K) import StdIoUtil(echoStderrK) --import ContinuationIO(stderr) genTryAlloc cmd xr = let expected (ColorAllocated color) = Just color expected _ = Nothing in xr cmd expected genTryAllocColor xr cmap rgb = genTryAlloc (AllocColor cmap rgb) xr genTryAllocNamedColor xr cmap cname = genTryAlloc (AllocNamedColor cmap cname) xr tryAllocColor x = genTryAllocColor xrequest x tryAllocColorF = genTryAllocColor xrequestF tryAllocNamedColor x = genTryAllocNamedColor xrequest x tryAllocNamedColorF = genTryAllocNamedColor xrequestF --allocNamedColorDef :: ColormapId -> ColorName -> ColorName -> Cont (K a b) Color allocNamedColorDef cmap cname fallback = tryGet (tryAllocNamedColor cmap cname) (echoStderrK ("Warning, cannot allocate background color \""++cname++ -- backround ?? "\", using \""++fallback++"\" instead.") . allocNamedColor cmap fallback) --allocNamedColorDefPixel :: ColormapId -> ColorName -> ColorName -> Cont (K a b) Pixel allocNamedColorDefPixel cmap cname fallback = allocNamedColorDef cmap cname fallback . (.colorPixel) safe req cmap c = tryM (req cmap c) (error ("Cannot allocate color: "++show c)) pixel :: (a->b->Cont c Color) -> a->b->Cont c Pixel pixel req cmap c = req cmap c . (.colorPixel) allocNamedColor x = safe tryAllocNamedColor x allocNamedColorF = safe tryAllocNamedColorF allocNamedColorPixel x = pixel allocNamedColor x allocNamedColorPixelF = pixel allocNamedColorF allocColor x = safe tryAllocColor x allocColorF = safe tryAllocColorF allocColorPixel x = pixel allocColor x allocColorPixelF = pixel allocColorF querycolor xr cmap pixel = let expected (ColorQueried c) = Just c expected _ = Nothing in xr (QueryColor cmap pixel) expected queryColorF = querycolor xrequestF queryColor x = querycolor xrequest x