Аналог SetShape в X Window System

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

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

Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 00:01:07

Как не прибегая к помощи gtk и qt установить "нужную форму" окна.
PS : интересует возможность написания screenmate для Linux, про amor я знаю :|
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Сквозняк » 14.12.2010 03:02:59

Ты хочешь создать окно с графикой в котором вместо системного курсора будет что-то другое? Если я правильно понял задачу, то тогда нужно создать окно средствами модуля sdl а затем отключить отображение курсора
Код: Выделить всё
SDL_ShowCursor(0);

про amor я знаю
Зато я такую библиотеку не знаю :)
Сквозняк
энтузиаст
 
Сообщения: 1126
Зарегистрирован: 29.06.2006 22:08:32

Re: Аналог SetShape в X Window System

Сообщение FedeX » 14.12.2010 11:45:09

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

используеться расширение Хсервера shape. Вот доки по АПИ расширения:
http://www.xfree86.org/current/shapelib.html
Аватара пользователя
FedeX
постоялец
 
Сообщения: 422
Зарегистрирован: 27.03.2006 09:25:34
Откуда: украина, житомир

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 17:12:46

Заголовочные файлы для 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 нет.
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 17:30:34

В первом приближении ошибок в описании не видно.
Если есть сомнения по Си типам, пользуйтесь модулем ctypes.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 17:52:57

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

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

Добавлено спустя 4 минуты 22 секунды:
Код: Выделить всё
unsigned long, аналога которому в Delphi нет.

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

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 18:27:17

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

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 18:33:59

(C) unsigned long => (Ctypes) ???
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 18:35:50

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

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 18:37:20

LongWord in Delphi or unsigned long in C++
http://www.programmersforum.ru/showthread.php?t=6262 :?:
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 18:40:07

LongWord = Cardinal = culong
На счёт ссылки не понял. Причём это?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 18:51:01

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


В 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
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 18:58:36

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

Re: Аналог SetShape в X Window System

Сообщение coyot.rush » 14.12.2010 20:10:57

Вот что получилось
Код: Выделить всё
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 в С как объявлен?
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Аналог SetShape в X Window System

Сообщение Mr.Smart » 14.12.2010 20:29:17

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

След.

Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2

Рейтинг@Mail.ru