Аналог SetShape в X Window System

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Аналог SetShape в X Window System

Сообщение coyot.rush »

Как не прибегая к помощи gtk и qt установить "нужную форму" окна.
PS : интересует возможность написания screenmate для Linux, про amor я знаю :|
Сквозняк
энтузиаст
Сообщения: 1159
Зарегистрирован: 29.06.2006 22:08:32

Сообщение Сквозняк »

Ты хочешь создать окно с графикой в котором вместо системного курсора будет что-то другое? Если я правильно понял задачу, то тогда нужно создать окно средствами модуля sdl а затем отключить отображение курсора

Код: Выделить всё

SDL_ShowCursor(0);

про amor я знаю
Зато я такую библиотеку не знаю :)
Аватара пользователя
FedeX
постоялец
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Сообщение FedeX »

Вот здесь есть пример как это делать (правда на сишке):
http://cvsweb.xfree86.org/cvsweb/contri ... ams/xeyes/

используеться расширение Хсервера shape. Вот доки по АПИ расширения:
http://www.xfree86.org/current/shapelib.html
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

Заголовочные файлы для fpc есть?
Или подскажите как описать структуру Region для функции

Код: Выделить всё

extern void XShapeCombineRegion (
    Display*   /* display */,
    Window   /* dest */,
    int      /* dest_kind */,
    int      /* x_off */,
    int      /* y_off */,
    Region   /* region */,
    int      /* op */
);

в Xutil.h

Код: Выделить всё

typedef struct _XRegion *Region;
, в Xregion.h

Код: Выделить всё

typedef struct _XRegion {
    long size;
    long numRects;
    BOX *rects;
    BOX extents;
} REGION;

эт оно :?:
BOX вот эта запись

Код: Выделить всё

typedef struct {
    short x1, x2, y1, y2;
} Box, BOX, BoxRec, *BoxPtr;


Получаем

Код: Выделить всё

PBox=^Tbox;
TBox=record
x1:Smalltlnt;
x2:Smalltlnt;
y1:Smalltlnt;
y2"Smalltlnt;
end;

Код: Выделить всё

TRegion=record
size:Longint;
numRects:Longint;
rects:PBox;
extents:TBox;
end;

???
PS
Простые типы данных http://js6.narod.ru/delphi/asked_types_of_data.htm
В С и C++ для целых значений определены типы int, short int (или просто short) и long int (или просто long). Тип int из C/C++ соответствует типу Integer из Delphi, a long из C/C++ — Longint из Delphi. Однако Shortint из C/C++ соответствует в Delphi не Shortint, a Smalltlnt. Эквивалент Shortint из Delphi в C/C++— это signed char. Тип unsigned char в C/C++ соответствует типу Byte из Delphi. В C/C++ существует еще тип unsigned long, аналога которому в Delphi нет.
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

В первом приближении ошибок в описании не видно.
Если есть сомнения по Си типам, пользуйтесь модулем ctypes.
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

Буду пробывать ...

Добавлено спустя 29 минут 24 секунды:
(C) unsigned int => (ctypes) cunsigned ?

Добавлено спустя 4 минуты 22 секунды:

Код: Выделить всё

unsigned long, аналога которому в Delphi нет. 

И чем заменять?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

Угу или cuint.
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

(C) unsigned long => (Ctypes) ???
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

culong
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

LongWord in Delphi or unsigned long in C++
http://www.programmersforum.ru/showthread.php?t=6262 :?:
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

LongWord = Cardinal = culong
На счёт ссылки не понял. Причём это?
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

На счёт ссылки не понял. Причём это?


В C/C++ существует еще тип unsigned long, аналога которому в Delphi нет.

LongWord in Delphi or unsigned long in C++

И кто врет ? Думаю первый источник

Код: Выделить всё

#define ShapeNotifyMask         (1L << 0)
#define ShapeNotify         0

#define ShapeNumberEvents      (ShapeNotify + 1)

Что за 1L<<0 => $FFFFFFFF
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

нет.
1 shl 0 = 1
Аватара пользователя
coyot.rush
постоялец
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Сообщение coyot.rush »

Вот что получилось

Код: Выделить всё

unit xshape;
interface
uses
ctypes,x,xlib;

{$IFDEF FPC}
{$PACKRECORDS C}
{$ENDIF}

 
 {type
     XShapeEvent = record
          _type : longint;
          serial : dword;
          send_event : CBool;
          display : ^Display;
          window : TWindow;
          kind : longint;
          x : longint;
          y : longint;
          width : dword;
          height : dword;
          time : Time;
          shaped : cBool;
       end;}
   
    type
    TBox=record
    x1:SmallInt;
    x2:SmallInt;
    y1:SmallInt;
    y2:SmallInt;
    end;
       
    PBox=^Tbox;

    TRegion=record
    size:Longint;
    numRects:Longint;
    rects:PBox;
    extents:TBox;
    end;

 

const
LibXShape='libXext.so';

SHAPE_MAJOR_VERSION  =   1; //current version numbers
SHAPE_MINOR_VERSION  =   1;
ShapeSet        =   0;
ShapeUnion        =   1;
ShapeIntersect        =   2;
ShapeSubtract        =   3;
ShapeInvert        =   4;

ShapeBounding        =  0;
ShapeClip        =   1;
ShapeInput        =   2;

ShapeNotifyMask   =(1 shl 0);
ShapeNotify     =    0;

ShapeNumberEvents    =   (ShapeNotify + 1);

function  XShapeQueryExtension (
    Display    :   PDisplay;
    event_base :   longint;
    error_base :   longint
):cBool;cdecl;external LibXShape;


function XShapeQueryVersion (
    display : PDisplay;
    major_version :longint;
    minor_version :longint
):TStatus;cdecl;external LibXShape;

procedure XShapeCombineRegion (
    display :    PDisplay;
    dest :TWindow;
    dest_kind:longint;
    x_off:longint;
    y_off:longint;
    ShapeRegion:TRegion;
    op:longint
);cdecl;external LibXShape;

procedure XShapeCombineRectangles (
    display:PDisplay;
    dest:TWindow;
    dest_kind:longint;
    x_off:longint;
    y_off:longint;
    rectangles:TXRectangle;
    n_rects:longint;
    op:longint;
    ordering:longint
);cdecl;external LibXShape;

procedure XShapeCombineMask (
    display:PDisplay;
    dest:TWindow;
    dest_kind:longint;
    x_off:longint;
    y_off:longint;
    src:TPixmap;
    op:longint
);cdecl;external LibXShape;

procedure XShapeCombineShape (
    display:PDisplay;
    dest:TWindow;
    dest_kind:longint;
    x_off:longint;
    y_off:longint;
    src:TWindow;
    src_kind:longint;
    op:longint
);cdecl;external LibXShape;

procedure XShapeOffsetShape (
    display:PDisplay;
    dest:TWindow;
    dest_kind:longint;
    x_off:longint;
    y_off:longint
);cdecl;external LibXShape;

function  XShapeQueryExtents (
    display:PDisplay;
    window:TWindow;
    bounding_shaped:cBool;
    x_bounding:longint;
    y_bounding:longint;
    w_bounding:cunsigned;
    h_bounding:cunsigned;
    clip_shaped:cBool;      
    x_clip:longint;
    y_clip:longint;
    w_clip:cunsigned;
    h_clip:cunsigned
):TStatus;cdecl;external LibXShape;

procedure XShapeSelectInput (
    display:PDisplay;
    window:TWindow;
    mask:culong
);cdecl;external LibXShape;

function XShapeInputSelected (
    display:PDisplay;
    window:TWindow
):dword;cdecl;external LibXShape;

function XShapeGetRectangles (
    display:PDisplay;
    window:TWindow;
    kind:longint;
    count:longint;
    ordering:longint
):PXRectangle;cdecl;external LibXShape;

implementation


end.

PS : Time в С как объявлен?
Mr.Smart
долгожитель
Сообщения: 1796
Зарегистрирован: 29.03.2008 00:01:11
Откуда: из леса!

Сообщение Mr.Smart »

time_t?
если он то как Integer
Ответить