summaryrefslogtreecommitdiff
path: root/protocols/Wayland/Protocols/Core/WLOutput.hs
blob: e0c0d372ea4984f4bca5b6887797ebf3df787c91 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
{-# LANGUAGE DuplicateRecordFields #-}
{-# LANGUAGE TypeFamilies #-}

module Wayland.Protocols.Core.WLOutput
  ( Subpixel(..)
  , Transform(..)
  , Mode(..)
  , Geometry(..)
  , Request(..)
  , Event(..)
  , Handle(..)
  ) where

import Data.Data (Typeable)
import Wayland.Server (ResourceClass(..), RequestClass, InterfaceDesc(..), MessageDesc(..), ArgumentDesc(..), Nullability(..), ObjectID)

newtype Handle = Handle ObjectID
  deriving (Show, Eq, Ord)

instance ResourceClass Handle where
  type ResourceEvent   Handle = Event
  type ResourceRequest Handle = Request
  objectID (Handle h) = h
  interface _ = InterfaceDesc { ifName     = "wl_output"
                              , ifVersion  = 4
                              , ifRequests = [ MessageDesc { msgName         = "release"
                                                           , msgSignature    = []
                                                           , msgSince        = 3
                                                           , msgIsDestructor = True
                                                           }
                                             ]
                              , ifEvents = [ MessageDesc { msgName         = "geometry"
                                                         , msgSignature    = [ ArgumentInt
                                                                             , ArgumentInt
                                                                             , ArgumentInt
                                                                             , ArgumentInt
                                                                             , ArgumentInt
                                                                             , ArgumentString NotNull
                                                                             , ArgumentString NotNull
                                                                             , ArgumentInt
                                                                             ]
                                                         , msgSince        = 1
                                                         , msgIsDestructor = False
                                                         }
                                           , MessageDesc { msgName         = "mode"
                                                         , msgSignature    = [ ArgumentUInt
                                                                             , ArgumentInt
                                                                             , ArgumentInt
                                                                             , ArgumentInt
                                                                             ]
                                                         , msgSince        = 1
                                                         , msgIsDestructor = False
                                                         }
                                           , MessageDesc { msgName         = "done"
                                                         , msgSignature    = []
                                                         , msgSince        = 2
                                                         , msgIsDestructor = False
                                                         }
                                           , MessageDesc { msgName         = "scale"
                                                         , msgSignature    = [ ArgumentInt ]
                                                         , msgSince        = 2
                                                         , msgIsDestructor = False
                                                         }
                                           , MessageDesc { msgName         = "name"
                                                         , msgSignature    = [ ArgumentString NotNull ]
                                                         , msgSince        = 4
                                                         , msgIsDestructor = False
                                                         }
                                           , MessageDesc { msgName         = "description"
                                                         , msgSignature    = [ ArgumentString NotNull ]
                                                         , msgSince        = 4
                                                         , msgIsDestructor = False
                                                         }
                                           ]
                              }

data Subpixel
  = SubpixelUnknown
  | SubpixelNone
  | SubpixelHorizontalRgb
  | SubpixelHorizontalBgr
  | SubpixelVerticalRgb
  | SubpixelVerticalBgr

data Transform
  = TransformNormal
  | TransformNormal90
  | TransformNormal180
  | TransformNormal270
  | TransformFlipped
  | TransformFlipped90
  | TransformFlipped180
  | TransformFlipped270

data Mode
  = Mode { current   :: Bool
         , preferred :: Bool }

data Geometry
  = Geometry { x              :: Int
             , y              :: Int
             , physicalWidth  :: Int
             , physicalHeight :: Int
             , subpixel       :: Subpixel
             , make           :: String
             , model          :: String
             , transform      :: Transform }

data Request
  = ReqRelease Handle
  deriving (Typeable, Show)

instance RequestClass Request

data Event
  = EvGeometry    Geometry
  | EvMode        Mode
  | EvScale       Int
  | EvName        String
  | EvDescription String
  | EvDone