fpc/packages/x11/xutil.pp

699 lines
20 KiB
ObjectPascal

{
$Id$
}
Unit XUtil;
{$MODE objfpc}
interface
uses
x,xlib;
{$LinkLib c}
{$LinkLib X11}
{
Bitmask returned by XParseGeometry(). Each bit tells if the corresponding
value (x, y, width, height) was found in the parsed string.
}
Const
NoValue = $0000;
XValue = $0001;
YValue = $0002;
WidthValue = $0004;
HeightValue = $0008;
AllValues = $000F;
XNegative = $0010;
YNegative = $0020;
{
new version containing base_width, base_height, and win_gravity fields;
used with WM_NORMAL_HINTS.
}
Type
long = Cardinal; { Untill we know better. M.}
PLong = ^Long;
PInteger = ^Integer;
Type
TAspectRecord = record
x,y : longint;
end;
TXSizeHints = record
flags : Long; { marks which fields in this structure are defined }
x, y : longint ; { obsolete for new window mgrs, but clients }
width, height: longint ; { should set so old wm's don't mess up }
min_width, min_height : longint ;
max_width, max_height : longint ;
width_inc, height_inc : longint ;
min_aspect, max_aspect : TAspectRecord;
base_width, base_height : longint ; { added by ICCCM version 1 }
win_gravity : longint ; { added by ICCCM version 1 }
end;
PXSizeHints=^TXSizeHints;
{
The next block of definitions are for window manager properties that
clients and applications use for communication.
}
{ flags argument in size hints }
Const
USPosition = 1 shl 0; { user specified x, y }
USSize = 1 shl 1; { user specified width, height }
PPosition = 1 shl 2; { program specified position }
PSize = 1 shl 3; { program specified size }
PMinSize = 1 shl 4; { program specified minimum size }
PMaxSize = 1 shl 5; { program specified maximum size }
PResizeInc = 1 shl 6; { program specified resize increments }
PAspect = 1 shl 7; { program specified min and max aspect ratios }
PBaseSize = 1 shl 8; { program specified base for incrementing }
PWinGravity = 1 shl 9; { program specified window gravity }
{ obsolete }
PAllHints = PPosition or PSize or PMinSize or PMaxSize or PResizeInc or PAspect;
Type
TXWMHints = record
flags : long; { marks which fields in this structure are defined }
input : TBool ; { does this application rely on the window manager to
get keyboard input? }
initial_state : longint ; { see below }
icon_pixmap : TPixmap ; { pixmap to be used as icon }
icon_window : TWindow ; { window to be used as icon }
icon_x, icon_y : longint ; { initial position of icon }
icon_mask : TPixmap ; { icon mask bitmap }
window_group : TXID ; { id of related window group }
{ this structure may be extended in the future }
end;
PXWMHints = ^TXWMHints;
{ definition for flags of XWMHints }
Const
InputHint = 1 shl 0;
StateHint = 1 shl 1;
IconPixmapHint = 1 shl 2;
IconWindowHint = 1 shl 3;
IconPositionHint = 1 shl 4;
IconMaskHint = 1 shl 5;
WindowGroupHint = 1 shl 6;
AllHints = InputHint or StateHint or IconPixmapHint or IconWindowHint or
IconPositionHint or IconMaskHint or WindowGroupHint;
XUrgencyHint = 1 shl 8;
{ definitions for initial window state }
WithdrawnState = 0; { for windows that are not mapped }
NormalState = 1; { most applications want to start this way }
IconicState = 3; { application wants to start as an icon }
{ Obsolete states no longer defined by ICCCM }
DontCareState = 0; { don't know or care }
ZoomState = 2; { application wants to start zoomed }
InactiveState = 4; { application believes it is seldom used; }
{ some wm's may put it on inactive menu }
{
new structure for manipulating TEXT properties; used with WM_NAME,
WM_ICON_NAME, WM_CLIENT_MACHINE, and WM_COMMAND.
}
type
TXTextProperty = record
value : pchar; { same as Property routines }
encoding : TAtom; { prop type }
format : longint ; { prop data format: 8, 16, or 32 }
nitems : Cardinal; { number of data items in value }
end;
PXTextProperty = ^TXTextProperty;
Const
XNoMemory =-1;
XLocaleNotSupported =-2;
XConverterNotFound =-3;
Type
TXICCEncodingStyle = longint;
Const
XStringStyle = 0; { STRING }
XCompoundTextStyle = 1; { COMPOUND_TEXT }
XTextStyle = 2; { text in owner's encoding (current locale)}
XStdICCTextStyle = 3; { STRING, else COMPOUND_TEXT }
Type
TXIconSize = record
min_width, min_height,
max_width, max_height,
width_inc, height_inc : longint;
end;
PXIconSize = ^TXIconSize;
PPXIconSize = ^PXIconSize;
type
TXClassHint = record
res_name,
res_class : pchar;
end;
PXClassHint = ^TXClassHint;
{
* These macros are used to give some sugar to the image routines so that
* naive people are more comfortable with them.
}
{
XDestroyImage(ximage) \
((*((ximage)->f.destroy_image))((ximage)))
XGetPixel(ximage, x, y) \
((*((ximage)->f.get_pixel))((ximage), (x), (y)))
XPutPixel(ximage, x, y, pixel) \
((*((ximage)->f.put_pixel))((ximage), (x), (y), (pixel)))
XSubImage(ximage, x, y, width, height) \
((*((ximage)->f.sub_image))((ximage), (x), (y), (width), (height)))
XAddPixel(ximage, value) \
((*((ximage)->f.add_pixel))((ximage), (value)))
}
{
* Compose sequence status structure, used in calling XLookupString.
}
TXComposeStatus = record
compose_ptr : TXPointer ; { state table pointer }
chars_matched : longint ; { match state }
end;
PXComposeStatus = ^TXComposeStatus;
{
* Keysym macros, used on Keysyms to test for classes of symbols
}
{
IsKeypadKey(keysym) \
(((KeySym)(keysym) >= XK_KP_Space) && ((KeySym)(keysym) <= XK_KP_Equal))
IsPrivateKeypadKey(keysym) \
(((KeySym)(keysym) >= 0x11000000) && ((KeySym)(keysym) <= 0x1100FFFF))
IsCursorKey(keysym) \
(((KeySym)(keysym) >= XK_Home) && ((KeySym)(keysym) < XK_Select))
IsPFKey(keysym) \
(((KeySym)(keysym) >= XK_KP_F1) && ((KeySym)(keysym) <= XK_KP_F4))
IsFunctionKey(keysym) \
(((KeySym)(keysym) >= XK_F1) && ((KeySym)(keysym) <= XK_F35))
IsMiscFunctionKey(keysym) \
(((KeySym)(keysym) >= XK_Select) && ((KeySym)(keysym) <= XK_Break))
IsModifierKey(keysym) \
((((KeySym)(keysym) >= XK_Shift_L) && ((KeySym)(keysym) <= XK_Hyper_R)) \
or or ((KeySym)(keysym) == XK_Mode_switch) \
or or ((KeySym)(keysym) == XK_Num_Lock))
}
{
* opaque reference to Region data type
}
type
{
typedef struct _XRegion *Region;
}
TRegion = Pointer;
{ Return values from XRectInRegion() }
Const
RectangleOut =0;
RectangleIn =1;
RectanglePart=2;
{
* Information used by the visual utility routines to find desired visual
* type from the many visuals a display may support.
}
Type
TXVisualInfo = record
visual : PVisual;
visualid : TVisualID ;
screen : longint;
depth : longint;
c_class : longint;
red_mask : cardinal;
green_mask : cardinal;
blue_mask : Cardinal;
colormap_size : longint;
bits_per_rgb : longint;
end;
PXVisualInfo = ^TXVisualInfo;
Const
VisualNoMask = $0;
VisualIDMask = $1;
VisualScreenMask = $2;
VisualDepthMask = $4;
VisualClassMask = $8;
VisualRedMaskMask = $10;
VisualGreenMaskMask = $20;
VisualBlueMaskMask = $40;
VisualColormapSizeMask = $80;
VisualBitsPerRGBMask = $100;
VisualAllMask = $1FF;
{
* This defines a window manager property that clients may use to
* share standard color maps of type RGB_COLOR_MAP:
}
Type
TXStandardColormap = record
colormap : TColormap ;
red_max : Cardinal;
red_mult : Cardinal;
green_max : Cardinal;
green_mult : Cardinal;
blue_max : Cardinal;
blue_mult : Cardinal;
base_pixel : Cardinal;
visualid : TVisualID; { added by ICCCM version 1 }
killid : TXID ; { added by ICCCM version 1 }
end;
PXStandardColormap = ^TXStandardColormap;
PPXStandardColormap = ^PXStandardColormap;
Const
ReleaseByFreeingColormap = 1; { for killid field above }
{ return codes for XReadBitmapFile and XWriteBitmapFile }
BitmapSuccess =0;
BitmapOpenFailed =1;
BitmapFileInvalid =2;
BitmapNoMemory =3;
{***************************************************************
* Context Management
***************************************************************}
const
{ Associative lookup table return codes }
XCSUCCESS =0; { No error. }
XCNOMEM =1; { Out of memory }
XCNOENT =2; { No entry in table }
type
TXContext = longint;
{
XUniqueContext() ((XContext) XrmUniqueQuark())
XStringToContext(string) ((XContext) XrmStringToQuark(string))
}
function XGetVisualInfo(display: PDisplay; vinfo_mask: LongInt;
vinfo_template: PXVisualInfo; var nitems_return: longint): PXVisualInfo;
cdecl; external;
{ The following declarations are alphabetized. }
function XAllocClassHint: PXClassHint; cdecl; external;
function XAllocIconSize: PXIconSize; cdecl; external;
function XAllocSizeHints: PXSizeHints; cdecl; external;
function XAllocStandardColormap: PXStandardColormap; cdecl; external;
function XAllocWMHints: PXWMHints; cdecl; external;
procedure XClipBox(r: TRegion; rect_return: PXRectangle); cdecl; external;
function XCreateRegion: TRegion; cdecl; external;
function XDefaultString: PChar; cdecl; external;
function XDeleteContext(display: PDisplay; rid: TXID;
context: TXContext): LongInt; cdecl; external;
procedure XDestroyRegion(r: TRegion); cdecl; external;
function XEmptyRegion(r: TRegion): TBool; cdecl; external;
function XEqualRegion(r1, r2: TRegion): TBool; cdecl; external;
function XFindContext(display: PDisplay; rid: TXID; context: TXContext;
data_return: PXPointer): LongInt; cdecl; external;
function XGetClassHint(display: PDisplay; w: TWindow;
class_hints_return: PXClassHint): TStatus; cdecl; external;
function XGetIconSizes(display: PDisplay; w: TWindow;
size_list_return: PPXIconSize; count_return: PInteger): TStatus;
cdecl; external;
function XGetNormalHints(display: PDisplay; w: TWindow;
hints_return: PXSizeHints): TStatus; cdecl; external;
function XGetRGBColormaps(display: PDisplay; w: TWindow;
stdcmap_return: PPXStandardColormap; count_return: PInteger;
_property: TAtom): TStatus; cdecl; external;
function XGetSizeHints(display: PDisplay; w: TWindow;
hints_return: PXSizeHints; _property: TAtom): TStatus; cdecl; external;
function XGetStandardColormap(display: PDisplay; w: TWindow;
colormap_return: PXStandardColormap; _property: TAtom): TStatus;
cdecl; external;
(*
extern Status XGetTextProperty(
#if NeedFunctionPrototypes
Display* { display },
Window { window },
XTextProperty* { text_prop_return },
Atom { property }
#endif
);
extern XVisualInfo *XGetVisualInfo(
#if NeedFunctionPrototypes
Display* { display },
long { vinfo_mask },
XVisualInfo* { vinfo_template },
int* { nitems_return }
#endif
);
extern Status XGetWMClientMachine(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XTextProperty* { text_prop_return }
#endif
);
extern XWMHints *XGetWMHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w }
#endif
);
extern Status XGetWMIconName(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XTextProperty* { text_prop_return }
#endif
);
extern Status XGetWMName(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XTextProperty* { text_prop_return }
#endif
);*)
function XGetWMNormalHints(display: PDisplay; w: TWindow;
hints_return: PXSizeHints; supplied_return: PLong): TStatus; cdecl; external;
(*
extern Status XGetWMSizeHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XSizeHints* { hints_return },
long* { supplied_return },
Atom { property }
#endif
);
extern Status XGetZoomHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XSizeHints* { zhints_return }
#endif
); *)
function XIntersectRegion(sra, srb, dr_return: TRegion): LongInt; cdecl; external;
(*
extern void XConvertCase(
#if NeedFunctionPrototypes
KeySym { sym },
KeySym* { lower },
KeySym* { upper }
#endif
); *)
function XLookupString(event_struct: PXKeyEvent; buffer_return: PChar;
bytes_buffer: LongInt; keysym_return: PKeySym;
status_in_out: PXComposeStatus): LongInt; cdecl; external;
(*
extern Status XMatchVisualInfo(
#if NeedFunctionPrototypes
Display* { display },
int { screen },
int { depth },
int { class },
XVisualInfo* { vinfo_return }
#endif
);
extern XOffsetRegion(
#if NeedFunctionPrototypes
Region { r },
int { dx },
int { dy }
#endif
);
extern Bool XPointInRegion(
#if NeedFunctionPrototypes
Region { r },
int { x },
int { y }
#endif
);
extern Region XPolygonRegion(
#if NeedFunctionPrototypes
XPoint* { points },
int { n },
int { fill_rule }
#endif
);
extern longint XRectInRegion(
#if NeedFunctionPrototypes
Region { r },
int { x },
int { y },
unsigned int { width },
unsigned int { height }
#endif
);
extern longint XSaveContext(
#if NeedFunctionPrototypes
Display* { display },
XID { rid },
XContext { context },
_Xconst char* { data }
#endif
);
extern XSetClassHint(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XClassHint* { class_hints }
#endif
);
extern XSetIconSizes(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XIconSize* { size_list },
int { count }
#endif
); *)
procedure XSetNormalHints(display: PDisplay; w: TWindow;
hints: PXSizeHints); cdecl; external;
(*
extern void XSetRGBColormaps(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XStandardColormap* { stdcmaps },
int { count },
Atom { property }
#endif
);
extern XSetSizeHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XSizeHints* { hints },
Atom { property }
#endif
); *)
function XSetStandardProperties(display: PDisplay; w: TWindow;
const window_name, icon_name: PChar; icon_pixmap: TPixmap;
argv: PPChar; argc: LongInt; hints: PXSizeHints): LongInt;
cdecl; external;
procedure XSetTextProperty(display: PDisplay; w: TWindow;
text_prop: PXTextProperty; AProperty: TAtom); cdecl; external;
procedure XSetWMClientMachine(display: PDisplay; w: TWindow;
text_prop: PXTextProperty); cdecl; external;
function XSetWMHints(display: PDisplay; w: TWindow;
wm_hints: PXWMHints): LongInt; cdecl; external;
procedure XSetWMIconName(display: PDisplay; w: TWindow;
text_prop: PXTextProperty); cdecl; external;
procedure XSetWMName(display: PDisplay; w: TWindow;
text_prop: PXTextProperty); cdecl; external;
procedure XSetWMNormalHints(display: PDisplay; w: TWindow;
hints: PXSizeHints); cdecl; external;
procedure XSetWMProperties(display: PDisplay; w: TWindow;
window_name, icon_name: PXTextProperty; argv: PPChar; argc: LongInt;
normal_hints: PXSizeHints; wm_hints: PXWMHints; class_hints: PXClassHint);
cdecl; external;
(*
extern void XmbSetWMProperties(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
_Xconst char* { window_name },
_Xconst char* { icon_name },
char** { argv },
int { argc },
XSizeHints* { normal_hints },
XWMHints* { wm_hints },
XClassHint* { class_hints }
#endif
);
extern void XSetWMSizeHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XSizeHints* { hints },
Atom { property }
#endif
); *)
function XSetRegion(display: PDisplay; gc: TGC; r: TRegion): LongInt; cdecl; external;
(*
extern void XSetStandardColormap(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XStandardColormap* { colormap },
Atom { property }
#endif
);
extern XSetZoomHints(
#if NeedFunctionPrototypes
Display* { display },
Window { w },
XSizeHints* { zhints }
#endif
); *)
function XShrinkRegion(r: TRegion; dx, dy: LongInt): LongInt; cdecl; external;
(*
extern Status XStringListToTextProperty(
#if NeedFunctionPrototypes
char** { list },
int { count },
XTextProperty* { text_prop_return }
#endif
); *)
function XSubtractRegion(sra, srb, dr_return: TRegion): LongInt; cdecl; external;
(*
extern longint XmbTextListToTextProperty(
#if NeedFunctionPrototypes
Display* { display },
char** { list },
int { count },
XICCEncodingStyle { style },
XTextProperty* { text_prop_return }
#endif
);
extern longint XwcTextListToTextProperty(
#if NeedFunctionPrototypes
Display* { display },
wchar_t** { list },
int { count },
XICCEncodingStyle { style },
XTextProperty* { text_prop_return }
#endif
);
extern void XwcFreeStringList(
#if NeedFunctionPrototypes
wchar_t** { list }
#endif
);
extern Status XTextPropertyToStringList(
#if NeedFunctionPrototypes
XTextProperty* { text_prop },
char*** { list_return },
int* { count_return }
#endif
);
extern longint XmbTextPropertyToTextList(
#if NeedFunctionPrototypes
Display* { display },
XTextProperty* { text_prop },
char*** { list_return },
int* { count_return }
#endif
);
extern longint XwcTextPropertyToTextList(
#if NeedFunctionPrototypes
Display* { display },
XTextProperty* { text_prop },
wchar_t*** { list_return },
int* { count_return }
#endif
);*)
function XUnionRectWithRegion(rectangle: PXRectangle;
src_region, dest_region_return: TRegion): LongInt; cdecl; external;
function XUnionRegion(sra, srb, dr_return: TRegion): LongInt; cdecl; external;
(*
extern longint XWMGeometry(
#if NeedFunctionPrototypes
Display* { display },
int { screen_number },
_Xconst char* { user_geometry },
_Xconst char* { default_geometry },
unsigned int { border_width },
XSizeHints* { hints },
int* { x_return },
int* { y_return },
int* { width_return },
int* { height_return },
int* { gravity_return }
#endif
); *)
function XXorRegion(sra, srb, dr_return: TRegion): LongInt; cdecl; external;
Implementation
end.
{
$Log$
Revision 1.3 2000-12-23 22:48:33 sg
* Converted declaration of XSetWMProperties (merged from fixbranch)
Revision 1.2 2000/07/13 11:33:34 michael
+ removed logs
}