factor/basis/x11/X/X.factor

578 lines
16 KiB
Factor

! Copyright (C) 2005, 2006 Eduardo Cavazos and Alex Chapman, 2016 Björn Lindqvist
! http://factorcode.org/license.txt for BSD license.
! Selected parts of /usr/include/X11/X.h
USING: alien.c-types alien.syntax math ;
IN: x11.X
! Resources
TYPEDEF: ulong XID
TYPEDEF: ulong Mask
TYPEDEF: ulong Atom
TYPEDEF: XID Window
TYPEDEF: XID Drawable
TYPEDEF: XID Font
TYPEDEF: XID Pixmap
TYPEDEF: XID Cursor
TYPEDEF: XID Colormap
TYPEDEF: XID GContext
TYPEDEF: XID KeySym
TYPEDEF: uchar KeyCode
! Reserved resource and constant definitions
CONSTANT: ParentRelative 1
CONSTANT: CopyFromParent 0
CONSTANT: PointerWindow 0
CONSTANT: InputFocus 1
CONSTANT: PointerRoot 1
CONSTANT: AnyPropertyType 0
CONSTANT: AnyKey 0
CONSTANT: AnyButton 0
CONSTANT: AllTemporary 0
CONSTANT: CurrentTime 0
CONSTANT: NoSymbol 0
CONSTANT: None 0
! Input Event Masks. Used as event-mask window attribute and as
! arguments to Grab requests. Not to be confused with event names.
: NoEventMask ( -- n ) 0 ; inline
: KeyPressMask ( -- n ) 0 2^ ; inline
: KeyReleaseMask ( -- n ) 1 2^ ; inline
: ButtonPressMask ( -- n ) 2 2^ ; inline
: ButtonReleaseMask ( -- n ) 3 2^ ; inline
: EnterWindowMask ( -- n ) 4 2^ ; inline
: LeaveWindowMask ( -- n ) 5 2^ ; inline
: PointerMotionMask ( -- n ) 6 2^ ; inline
: PointerMotionHintMask ( -- n ) 7 2^ ; inline
: Button1MotionMask ( -- n ) 8 2^ ; inline
: Button2MotionMask ( -- n ) 9 2^ ; inline
: Button3MotionMask ( -- n ) 10 2^ ; inline
: Button4MotionMask ( -- n ) 11 2^ ; inline
: Button5MotionMask ( -- n ) 12 2^ ; inline
: ButtonMotionMask ( -- n ) 13 2^ ; inline
: KeymapStateMask ( -- n ) 14 2^ ; inline
: ExposureMask ( -- n ) 15 2^ ; inline
: VisibilityChangeMask ( -- n ) 16 2^ ; inline
: StructureNotifyMask ( -- n ) 17 2^ ; inline
: ResizeRedirectMask ( -- n ) 18 2^ ; inline
: SubstructureNotifyMask ( -- n ) 19 2^ ; inline
: SubstructureRedirectMask ( -- n ) 20 2^ ; inline
: FocusChangeMask ( -- n ) 21 2^ ; inline
: PropertyChangeMask ( -- n ) 22 2^ ; inline
: ColormapChangeMask ( -- n ) 23 2^ ; inline
: OwnerGrabButtonMask ( -- n ) 24 2^ ; inline
! Event names. Used in "type" field in XEvent structures. Not to be
! confused with event masks above. They start from 2 because 0 and 1
! are reserved in the protocol for errors and replies.
CONSTANT: KeyPress 2
CONSTANT: KeyRelease 3
CONSTANT: ButtonPress 4
CONSTANT: ButtonRelease 5
CONSTANT: MotionNotify 6
CONSTANT: EnterNotify 7
CONSTANT: LeaveNotify 8
CONSTANT: FocusIn 9
CONSTANT: FocusOut 10
CONSTANT: KeymapNotify 11
CONSTANT: Expose 12
CONSTANT: GraphicsExpose 13
CONSTANT: NoExpose 14
CONSTANT: VisibilityNotify 15
CONSTANT: CreateNotify 16
CONSTANT: DestroyNotify 17
CONSTANT: UnmapNotify 18
CONSTANT: MapNotify 19
CONSTANT: MapRequest 20
CONSTANT: ReparentNotify 21
CONSTANT: ConfigureNotify 22
CONSTANT: ConfigureRequest 23
CONSTANT: GravityNotify 24
CONSTANT: ResizeRequest 25
CONSTANT: CirculateNotify 26
CONSTANT: CirculateRequest 27
CONSTANT: PropertyNotify 28
CONSTANT: SelectionClear 29
CONSTANT: SelectionRequest 30
CONSTANT: SelectionNotify 31
CONSTANT: ColormapNotify 32
CONSTANT: ClientMessage 33
CONSTANT: MappingNotify 34
CONSTANT: GenericEvent 35
CONSTANT: LASTEvent 36
! Key masks. Used as modifiers to GrabButton and GrabKey, results of
! QueryPointer, state in various key-, mouse-, and button-related
! events.
: ShiftMask ( -- n ) 1 0 shift ; inline
: LockMask ( -- n ) 1 1 shift ; inline
: ControlMask ( -- n ) 1 2 shift ; inline
: Mod1Mask ( -- n ) 1 3 shift ; inline
: Mod2Mask ( -- n ) 1 4 shift ; inline
: Mod3Mask ( -- n ) 1 5 shift ; inline
: Mod4Mask ( -- n ) 1 6 shift ; inline
: Mod5Mask ( -- n ) 1 7 shift ; inline
! modifier names. Used to build a SetModifierMapping request or
! to read a GetModifierMapping request. These correspond to the
! masks defined above.
CONSTANT: ShiftMapIndex 0
CONSTANT: LockMapIndex 1
CONSTANT: ControlMapIndex 2
CONSTANT: Mod1MapIndex 3
CONSTANT: Mod2MapIndex 4
CONSTANT: Mod3MapIndex 5
CONSTANT: Mod4MapIndex 6
CONSTANT: Mod5MapIndex 7
! button masks. Used in same manner as Key masks above. Not to be
! confused with button names below.
: Button1Mask ( -- n ) 1 8 shift ; inline
: Button2Mask ( -- n ) 1 9 shift ; inline
: Button3Mask ( -- n ) 1 10 shift ; inline
: Button4Mask ( -- n ) 1 11 shift ; inline
: Button5Mask ( -- n ) 1 12 shift ; inline
: AnyModifier ( -- n ) 15 2^ ; ! used in GrabButton, GrabKey
! button names. Used as arguments to GrabButton and as detail in
! ButtonPress and ButtonRelease events. Not to be confused with
! button masks above. Note that 0 is already defined above as
! "AnyButton". */
CONSTANT: Button1 1
CONSTANT: Button2 2
CONSTANT: Button3 3
CONSTANT: Button4 4
CONSTANT: Button5 5
! Notify modes
CONSTANT: NotifyNormal 0
CONSTANT: NotifyGrab 1
CONSTANT: NotifyUngrab 2
CONSTANT: NotifyWhileGrabbed 3
CONSTANT: NotifyHint 1 ! for MotionNotify events
! Notify detail
CONSTANT: NotifyAncestor 0
CONSTANT: NotifyVirtual 1
CONSTANT: NotifyInferior 2
CONSTANT: NotifyNonlinear 3
CONSTANT: NotifyNonlinearVirtual 4
CONSTANT: NotifyPointer 5
CONSTANT: NotifyPointerRoot 6
CONSTANT: NotifyDetailNone 7
! Visibility notify
CONSTANT: VisibilityUnobscured 0
CONSTANT: VisibilityPartiallyObscured 1
CONSTANT: VisibilityFullyObscured 2
! Circulation request
CONSTANT: PlaceOnTop 0
CONSTANT: PlaceOnBottom 1
! protocol families
CONSTANT: FamilyInternet 0 ! IPv4
CONSTANT: FamilyDECnet 1
CONSTANT: FamilyChaos 2
CONSTANT: FamilyInternet6 6 ! IPv6
! authentication families not tied to a specific protocol
CONSTANT: FamilyServerInterpreted 5
! Property notification
CONSTANT: PropertyNewValue 0
CONSTANT: PropertyDelete 1
! Color Map notification
CONSTANT: ColormapUninstalled 0
CONSTANT: ColormapInstalled 1
! GrabPointer, GrabButton, GrabKeyboard, GrabKey Modes
CONSTANT: GrabModeSync 0
CONSTANT: GrabModeAsync 1
! GrabPointer, GrabKeyboard reply status
CONSTANT: GrabSuccess 0
CONSTANT: AlreadyGrabbed 1
CONSTANT: GrabInvalidTime 2
CONSTANT: GrabNotViewable 3
CONSTANT: GrabFrozen 4
! AllowEvents modes
CONSTANT: AsyncPointer 0
CONSTANT: SyncPointer 1
CONSTANT: ReplayPointer 2
CONSTANT: AsyncKeyboard 3
CONSTANT: SyncKeyboard 4
CONSTANT: ReplayKeyboard 5
CONSTANT: AsyncBoth 6
CONSTANT: SyncBoth 7
! Used in SetInputFocus, GetInputFocus
: RevertToNone ( -- n ) None ;
: RevertToPointerRoot ( -- n ) PointerRoot ;
CONSTANT: RevertToParent 2
! *****************************************************************
! * ERROR CODES
! *****************************************************************
CONSTANT: Success 0 ! everything's okay
CONSTANT: BadRequest 1 ! bad request code
CONSTANT: BadValue 2 ! int parameter out of range
CONSTANT: BadWindow 3 ! parameter not a Window
CONSTANT: BadPixmap 4 ! parameter not a Pixmap
CONSTANT: BadAtom 5 ! parameter not an Atom
CONSTANT: BadCursor 6 ! parameter not a Cursor
CONSTANT: BadFont 7 ! parameter not a Font
CONSTANT: BadMatch 8 ! parameter mismatch
CONSTANT: BadDrawable 9 ! parameter not a Pixmap or Window
CONSTANT: BadAccess 10 ! depending on context:
! - key/button already grabbed
! - attempt to free an illegal
! cmap entry
! - attempt to store into a read-only
! color map entry.
! - attempt to modify the access control
! list from other than the local host.
CONSTANT: BadAlloc 11 ! insufficient resources
CONSTANT: BadColor 12 ! no such colormap
CONSTANT: BadGC 13 ! parameter not a GC
CONSTANT: BadIDChoice 14 ! choice not in range or already used
CONSTANT: BadName 15 ! font or color name doesn't exist
CONSTANT: BadLength 16 ! Request length incorrect
CONSTANT: BadImplementation 17 ! server is defective
CONSTANT: FirstExtensionError 128
CONSTANT: LastExtensionError 255
! *****************************************************************
! * WINDOW DEFINITIONS
! *****************************************************************
! Window classes used by CreateWindow
! Note that CopyFromParent is already defined as 0 above
CONSTANT: InputOutput 1
CONSTANT: InputOnly 2
! ConfigureWindow structure
: CWX ( -- n ) 0 2^ ; inline
: CWY ( -- n ) 1 2^ ; inline
: CWWidth ( -- n ) 2 2^ ; inline
: CWHeight ( -- n ) 3 2^ ; inline
: CWBorderWidth ( -- n ) 4 2^ ; inline
: CWSibling ( -- n ) 5 2^ ; inline
: CWStackMode ( -- n ) 6 2^ ; inline
! Bit Gravity
CONSTANT: ForgetGravity 0
CONSTANT: NorthWestGravity 1
CONSTANT: NorthGravity 2
CONSTANT: NorthEastGravity 3
CONSTANT: WestGravity 4
CONSTANT: CenterGravity 5
CONSTANT: EastGravity 6
CONSTANT: SouthWestGravity 7
CONSTANT: SouthGravity 8
CONSTANT: SouthEastGravity 9
CONSTANT: StaticGravity 10
! Window gravity + bit gravity above
CONSTANT: UnmapGravity 0
! Used in CreateWindow for backing-store hint
CONSTANT: NotUseful 0
CONSTANT: WhenMapped 1
CONSTANT: Always 2
! Used in GetWindowAttributes reply
CONSTANT: IsUnmapped 0
CONSTANT: IsUnviewable 1
CONSTANT: IsViewable 2
! Used in ChangeSaveSet
CONSTANT: SetModeInsert 0
CONSTANT: SetModeDelete 1
! Used in ChangeCloseDownMode
CONSTANT: DestroyAll 0
CONSTANT: RetainPermanent 1
CONSTANT: RetainTemporary 2
! Window stacking method (in configureWindow)
CONSTANT: Above 0
CONSTANT: Below 1
CONSTANT: TopIf 2
CONSTANT: BottomIf 3
CONSTANT: Opposite 4
! Circulation direction
CONSTANT: RaiseLowest 0
CONSTANT: LowerHighest 1
! Property modes
CONSTANT: PropModeReplace 0
CONSTANT: PropModePrepend 1
CONSTANT: PropModeAppend 2
! *****************************************************************
! * GRAPHICS DEFINITIONS
! *****************************************************************
! graphics functions, as in GC.alu
CONSTANT: GXclear 0x0
CONSTANT: GXand 0x1
CONSTANT: GXandReverse 0x2
CONSTANT: GXcopy 0x3
CONSTANT: GXandInverted 0x4
CONSTANT: GXnoop 0x5
CONSTANT: GXxor 0x6
CONSTANT: GXor 0x7
CONSTANT: GXnor 0x8
CONSTANT: GXequiv 0x9
CONSTANT: GXinvert 0xa
CONSTANT: GXorReverse 0xb
CONSTANT: GXcopyInverted 0xc
CONSTANT: GXorInverted 0xd
CONSTANT: GXnand 0xe
CONSTANT: GXset 0xf
! LineStyle
CONSTANT: LineSolid 0
CONSTANT: LineOnOffDash 1
CONSTANT: LineDoubleDash 2
! capStyle
CONSTANT: CapNotLast 0
CONSTANT: CapButt 1
CONSTANT: CapRound 2
CONSTANT: CapProjecting 3
! joinStyle
CONSTANT: JoinMiter 0
CONSTANT: JoinRound 1
CONSTANT: JoinBevel 2
! fillStyle
CONSTANT: FillSolid 0
CONSTANT: FillTiled 1
CONSTANT: FillStippled 2
CONSTANT: FillOpaqueStippled 3
! fillRule
CONSTANT: EvenOddRule 0
CONSTANT: WindingRule 1
! subwindow mode
CONSTANT: ClipByChildren 0
CONSTANT: IncludeInferiors 1
! SetClipRectangles ordering
CONSTANT: Unsorted 0
CONSTANT: YSorted 1
CONSTANT: YXSorted 2
CONSTANT: YXBanded 3
! CoordinateMode for drawing routines
CONSTANT: CoordModeOrigin 0 ! relative to the origin
CONSTANT: CoordModePrevious 1 ! relative to previous point
! Polygon shapes
CONSTANT: Complex 0 ! paths may intersect
CONSTANT: Nonconvex 1 ! no paths intersect, but not convex
CONSTANT: Convex 2 ! wholly convex
! Arc modes for PolyFillArc
CONSTANT: ArcChord 0 ! join endpoints of arc
CONSTANT: ArcPieSlice 1 ! join endpoints to center of arc
! GC components: masks used in CreateGC, CopyGC, ChangeGC, OR'ed into
! GC.stateChanges
: GCFunction ( -- n ) 0 2^ ; inline
: GCPlaneMask ( -- n ) 1 2^ ; inline
: GCForeground ( -- n ) 2 2^ ; inline
: GCBackground ( -- n ) 3 2^ ; inline
: GCLineWidth ( -- n ) 4 2^ ; inline
: GCLineStyle ( -- n ) 5 2^ ; inline
: GCCapStyle ( -- n ) 6 2^ ; inline
: GCJoinStyle ( -- n ) 7 2^ ; inline
: GCFillStyle ( -- n ) 8 2^ ; inline
: GCFillRule ( -- n ) 9 2^ ; inline
: GCTile ( -- n ) 10 2^ ; inline
: GCStipple ( -- n ) 11 2^ ; inline
: GCTileStipXOrigin ( -- n ) 12 2^ ; inline
: GCTileStipYOrigin ( -- n ) 13 2^ ; inline
: GCFont ( -- n ) 14 2^ ; inline
: GCSubwindowMode ( -- n ) 15 2^ ; inline
: GCGraphicsExposures ( -- n ) 16 2^ ; inline
: GCClipXOrigin ( -- n ) 17 2^ ; inline
: GCClipYOrigin ( -- n ) 18 2^ ; inline
: GCClipMask ( -- n ) 19 2^ ; inline
: GCDashOffset ( -- n ) 20 2^ ; inline
: GCDashList ( -- n ) 21 2^ ; inline
: GCArcMode ( -- n ) 22 2^ ; inline
! *****************************************************************
! * FONTS
! *****************************************************************
! used in QueryFont -- draw direction
CONSTANT: FontLeftToRight 0
CONSTANT: FontRightToLeft 1
CONSTANT: FontChange 255
! *****************************************************************
! * IMAGING
! *****************************************************************
! ImageFormat -- PutImage, GetImage
CONSTANT: XYBitmap 0 ! depth 1, XYFormat
CONSTANT: XYPixmap 1 ! depth == drawable depth
CONSTANT: ZPixmap 2 ! depth == drawable depth
! *****************************************************************
! * COLOR MAP STUFF
! *****************************************************************
! For CreateColormap
CONSTANT: AllocNone 0 ! create map with no entries
CONSTANT: AllocAll 1 ! allocate entire map writeable
! Flags used in StoreNamedColor, StoreColors
: DoRed ( -- n ) 0 2^ ;
: DoGreen ( -- n ) 1 2^ ;
: DoBlue ( -- n ) 2 2^ ;
! *****************************************************************
! * CURSOR STUFF
! *****************************************************************
! QueryBestSize Class
CONSTANT: CursorShape 0 ! largest size that can be displayed
CONSTANT: TileShape 1 ! size tiled fastest
CONSTANT: StippleShape 2 ! size stippled fastest
! *****************************************************************
! * KEYBOARD/POINTER STUFF
! *****************************************************************
CONSTANT: AutoRepeatModeOff 0
CONSTANT: AutoRepeatModeOn 1
CONSTANT: AutoRepeatModeDefault 2
CONSTANT: LedModeOff 0
CONSTANT: LedModeOn 1
! masks for ChangeKeyboardControl
: KBKeyClickPercent ( -- n ) 0 2^ ;
: KBBellPercent ( -- n ) 1 2^ ;
: KBBellPitch ( -- n ) 2 2^ ;
: KBBellDuration ( -- n ) 3 2^ ;
: KBLed ( -- n ) 4 2^ ;
: KBLedMode ( -- n ) 5 2^ ;
: KBKey ( -- n ) 6 2^ ;
: KBAutoRepeatMode ( -- n ) 7 2^ ;
CONSTANT: MappingSuccess 0
CONSTANT: MappingBusy 1
CONSTANT: MappingFailed 2
CONSTANT: MappingModifier 0
CONSTANT: MappingKeyboard 1
CONSTANT: MappingPointer 2
! *****************************************************************
! * SCREEN SAVER STUFF
! *****************************************************************
CONSTANT: DontPreferBlanking 0
CONSTANT: PreferBlanking 1
CONSTANT: DefaultBlanking 2
CONSTANT: DisableScreenSaver 0
CONSTANT: DisableScreenInterval 0
CONSTANT: DontAllowExposures 0
CONSTANT: AllowExposures 1
CONSTANT: DefaultExposures 2
! for ForceScreenSaver
CONSTANT: ScreenSaverReset 0
CONSTANT: ScreenSaverActive 1
! *****************************************************************
! * HOSTS AND CONNECTIONS
! *****************************************************************
! for ChangeHosts
CONSTANT: HostInsert 0
CONSTANT: HostDelete 1
! for ChangeAccessControl
CONSTANT: EnableAccess 1
CONSTANT: DisableAccess 0
! Display classes used in opening the connection
! Note that the statically allocated ones are even numbered and the
! dynamically changeable ones are odd numbered
CONSTANT: StaticGray 0
CONSTANT: GrayScale 1
CONSTANT: StaticColor 2
CONSTANT: PseudoColor 3
CONSTANT: TrueColor 4
CONSTANT: DirectColor 5
! Byte order used in imageByteOrder and bitmapBitOrder
CONSTANT: LSBFirst 0
CONSTANT: MSBFirst 1