hedgewars/SDLh.pas
changeset 6282 de449b2d9607
parent 6281 dc9c44f47e75
child 6283 6ec7bf51e04f
equal deleted inserted replaced
6281:dc9c44f47e75 6282:de449b2d9607
    18 
    18 
    19 {$INCLUDE "options.inc"}
    19 {$INCLUDE "options.inc"}
    20 
    20 
    21 unit SDLh;
    21 unit SDLh;
    22 interface
    22 interface
       
    23 {$IFDEF SDL13}uses math;{$ENDIF}
    23 
    24 
    24 {$IFDEF LINUX}
    25 {$IFDEF LINUX}
    25   {$DEFINE UNIX}
    26   {$DEFINE UNIX}
    26 {$ENDIF}
    27 {$ENDIF}
    27 {$IFDEF FREEBSD}
    28 {$IFDEF FREEBSD}
   105     SDL_INIT_EVENTTHREAD = $01000000;
   106     SDL_INIT_EVENTTHREAD = $01000000;
   106 {$ENDIF}
   107 {$ENDIF}
   107     SDL_INIT_NOPARACHUTE = $00100000;
   108     SDL_INIT_NOPARACHUTE = $00100000;
   108     SDL_INIT_EVERYTHING  = $0000FFFF;
   109     SDL_INIT_EVERYTHING  = $0000FFFF;
   109 
   110 
       
   111     SDL_ALLEVENTS        = $FFFFFFFF;
   110     SDL_APPINPUTFOCUS    = $02;
   112     SDL_APPINPUTFOCUS    = $02;
   111     SDL_BUTTON_WHEELUP   = 4;
   113     SDL_BUTTON_WHEELUP   = 4;
   112     SDL_BUTTON_WHEELDOWN = 5;
   114     SDL_BUTTON_WHEELDOWN = 5;
   113 
   115 
   114 {$IFDEF SDL13}
   116 {$IFDEF SDL13}
   134     SDL_JOYAXISMOTION     = $600;
   136     SDL_JOYAXISMOTION     = $600;
   135     SDL_JOYBALLMOTION     = $601;
   137     SDL_JOYBALLMOTION     = $601;
   136     SDL_JOYHATMOTION      = $602;
   138     SDL_JOYHATMOTION      = $602;
   137     SDL_JOYBUTTONDOWN     = $603;
   139     SDL_JOYBUTTONDOWN     = $603;
   138     SDL_JOYBUTTONUP       = $604;
   140     SDL_JOYBUTTONUP       = $604;
   139     //TODO: implement otheer event types
   141     SDL_FINGERDOWN        = $700;
       
   142     SDL_FINGERUP          = $701;
       
   143     SDL_FINGERMOTION      = $702;
       
   144     SDL_TOUCHBUTTONDOWN   = $703;
       
   145     SDL_TOUCHBUTTONUP     = $704;
       
   146     SDL_DOLLARGESTURE     = $800;
       
   147     SDL_DOLLARRECORD      = $801;
       
   148     SDL_MULTIGESTURE      = $802;
       
   149     SDL_CLIPBOARDUPDATE   = $900;
   140     SDL_USEREVENT         = $8000;
   150     SDL_USEREVENT         = $8000;
   141     SDL_LASTEVENT         = $FFFF;
   151     SDL_LASTEVENT         = $FFFF;
       
   152     // no compatibility events $7000
   142 
   153 
   143     // SDL_Surface flags
   154     // SDL_Surface flags
   144     SDL_SWSURFACE   = $00000000;  //*< Not used */
   155     SDL_SWSURFACE   = $00000000;  //*< Not used */
   145     SDL_PREALLOC    = $00000001;  //*< Surface uses preallocated memory */
   156     SDL_PREALLOC    = $00000001;  //*< Surface uses preallocated memory */
   146     SDL_RLEACCEL    = $00000002;  //*< Surface is RLE encoded */
   157     SDL_RLEACCEL    = $00000002;  //*< Surface is RLE encoded */
   226     SDL_SRCALPHA    = $00010000;
   237     SDL_SRCALPHA    = $00010000;
   227     SDL_ANYFORMAT   = $00100000;
   238     SDL_ANYFORMAT   = $00100000;
   228     SDL_HWPALETTE   = $20000000;
   239     SDL_HWPALETTE   = $20000000;
   229     SDL_DOUBLEBUF   = $40000000;
   240     SDL_DOUBLEBUF   = $40000000;
   230     SDL_FULLSCREEN  = $80000000;
   241     SDL_FULLSCREEN  = $80000000;
   231 
       
   232     SDL_ALLEVENTS = $FFFFFFFF;
       
   233 {$ENDIF}
   242 {$ENDIF}
   234 
   243 
   235 {$IFDEF ENDIAN_LITTLE}
   244 {$IFDEF ENDIAN_LITTLE}
   236     RMask = $000000FF;
   245     RMask = $000000FF;
   237     GMask = $0000FF00;
   246     GMask = $0000FF00;
   425         sym: LongInt;
   434         sym: LongInt;
   426         modifier: Smallint;
   435         modifier: Smallint;
   427         unicode: LongInt;
   436         unicode: LongInt;
   428         end;
   437         end;
   429 
   438 
       
   439     TSDL_MouseWheelEvent = record
       
   440         type_: LongInt;
       
   441         windowID: LongInt;
       
   442         which: Byte;
       
   443         x, y: LongInt;
       
   444         end;
       
   445 
   430     TSDL_WindowEvent = record
   446     TSDL_WindowEvent = record
   431         type_: LongInt;
   447         type_: LongInt;
   432         windowID: LongInt;
   448         windowID: LongInt;
   433         event: byte;
   449         event: byte;
   434         padding1, padding2, padding3: byte;
   450         padding1, padding2, padding3: byte;
   435         data1, data2: LongInt;
   451         data1, data2: LongInt;
       
   452         end;
       
   453 
       
   454     // available in sdl12 but not exposed
       
   455     TSDL_TextEditingEvent = record
       
   456         type_: LongInt;
       
   457         windowID: LongInt;
       
   458         text: array[0..31] of Byte;
       
   459         start, lenght: LongInt;
       
   460         end;
       
   461 
       
   462     // available in sdl12 but not exposed
       
   463     TSDL_TextInputEvent = record
       
   464         type_: LongInt;
       
   465         windowID: LongInt;
       
   466         text: array[0..31] of Byte;
       
   467         end;
       
   468 
       
   469     TSDL_TouchFingerEvent = record
       
   470         type_: LongInt;
       
   471         windowId: LongInt;
       
   472         touchId: LongWord;
       
   473         fingerId: LongWord;
       
   474         state, padding1, padding2, padding3: Byte;
       
   475         x,y: Word;
       
   476         dx,dy: ShortInt;
       
   477         pressure: Word;
       
   478         end;
       
   479 
       
   480     TSDL_TouchButtonEvent = record
       
   481         type_: LongInt;
       
   482         windowId: LongInt;
       
   483         touchId: LongWord;
       
   484         state, button, padding1, padding2: Byte;
       
   485         end;
       
   486 
       
   487     TSDL_MultiGestureEvent = record
       
   488         type_: LongInt;
       
   489         windowId: LongInt;
       
   490         touchId: LongWord;
       
   491         dTheta,dDist,x,y: float;
       
   492         numFingers, padding: ShortInt;
       
   493         end;
       
   494 
       
   495     TSDL_DollarGestureEvent = record
       
   496         type_: LongInt;
       
   497         windowId: LongInt;
       
   498         touchId: LongWord;
       
   499         gesturedId: LongWord;
       
   500         numFingers: LongInt;
       
   501         error: float;
       
   502         end;
       
   503 
       
   504     TSDL_SysWMEvent = record
       
   505         type_: LongInt;
       
   506         msg: pointer;
   436         end;
   507         end;
   437 {$ELSE}
   508 {$ELSE}
   438     TSDL_KeySym = record
   509     TSDL_KeySym = record
   439         scancode: Byte;
   510         scancode: Byte;
   440         sym: Longword;
   511         sym: Longword;
   467         state: byte;
   538         state: byte;
   468 {$ENDIF}
   539 {$ENDIF}
   469         keysym: TSDL_KeySym;
   540         keysym: TSDL_KeySym;
   470         end;
   541         end;
   471 
   542 
   472 //TODO: implement SDL_TextEditingEvent + SDL_TextInputEvent for sdl13
       
   473 
       
   474     // this structure is wrong but the correct version makes the game hang
       
   475     TSDL_MouseMotionEvent = record
   543     TSDL_MouseMotionEvent = record
       
   544 {$IFDEF SDL13}
       
   545         type_: LongInt;
       
   546         windowID: LongInt;
       
   547         state, padding1, padding2, padding3: byte;
       
   548         x, y, z, xrel, yrel : LongInt;
       
   549 {$ELSE}
       
   550         type_: byte;
   476         which: byte;
   551         which: byte;
   477         state: byte;
   552         state: byte;
   478 {$IFDEF SDL13}
       
   479         type_: LongInt;
       
   480         windowID: LongInt;
       
   481         padding1, padding2: byte;
       
   482         x, y, z, xrel, yrel : LongInt;
       
   483         pressure, pressure_max, pressure_min,
       
   484         rotation, tilt, cursor: LongInt;
       
   485 {$ELSE}
       
   486         type_: byte;
       
   487         x, y, xrel, yrel : word;
   553         x, y, xrel, yrel : word;
   488 {$ENDIF}
   554 {$ENDIF}
   489         end;
   555         end;
   490 
   556 
   491     TSDL_MouseButtonEvent = record
   557     TSDL_MouseButtonEvent = record
   501         state: byte;
   567         state: byte;
   502         x, y: word;
   568         x, y: word;
   503 {$ENDIF}
   569 {$ENDIF}
   504         end;
   570         end;
   505 
   571 
   506 {$IFDEF SDL13}
       
   507     TSDL_MouseWheelEvent = record
       
   508         type_: LongInt;
       
   509         windowID: LongInt;
       
   510         which: Byte;
       
   511         x, y: LongInt;
       
   512         end;
       
   513 
       
   514 //TODO: implement SDL_ProximityEvent
       
   515 {$ENDIF}
       
   516 
       
   517     TSDL_JoyAxisEvent = record
   572     TSDL_JoyAxisEvent = record
   518         type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
   573         type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
   519         which: Byte;
   574         which: Byte;
   520         axis: Byte;
   575         axis: Byte;
   521 {$IFDEF SDL13}
   576 {$IFDEF SDL13}
   556 {$IFDEF SDL13}
   611 {$IFDEF SDL13}
   557         padding1: Byte;
   612         padding1: Byte;
   558 {$ENDIF}
   613 {$ENDIF}
   559         end;
   614         end;
   560 
   615 
   561 //TODO: implement SDL_TouchButtonEvent, SDL_MultiGestureEvent, SDL_DollarGestureEvent
       
   562 
       
   563     TSDL_QuitEvent = record
   616     TSDL_QuitEvent = record
   564         type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
   617         type_: {$IFDEF SDL13}LongInt{$ELSE}Byte{$ENDIF};
   565         end;
   618         end;
   566 
   619 
   567     TSDL_UserEvent = record
   620     TSDL_UserEvent = record
   581         case LongInt of
   634         case LongInt of
   582             SDL_FIRSTEVENT: (type_: LongInt);
   635             SDL_FIRSTEVENT: (type_: LongInt);
   583             SDL_WINDOWEVENT: (window: TSDL_WindowEvent);
   636             SDL_WINDOWEVENT: (window: TSDL_WindowEvent);
   584             SDL_KEYDOWN,
   637             SDL_KEYDOWN,
   585             SDL_KEYUP: (key: TSDL_KeyboardEvent);
   638             SDL_KEYUP: (key: TSDL_KeyboardEvent);
   586             SDL_TEXTEDITING,
   639             SDL_TEXTEDITING: (edit: TSDL_TextEditingEvent);
   587             SDL_TEXTINPUT: (edit: byte);
   640             SDL_TEXTINPUT: (tedit: TSDL_TextInputEvent);
   588             SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
   641             SDL_MOUSEMOTION: (motion: TSDL_MouseMotionEvent);
   589             SDL_MOUSEBUTTONDOWN,
   642             SDL_MOUSEBUTTONDOWN,
   590             SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
   643             SDL_MOUSEBUTTONUP: (button: TSDL_MouseButtonEvent);
   591             SDL_MOUSEWHEEL: (wheel: TSDL_MouseWheelEvent);
   644             SDL_MOUSEWHEEL: (wheel: TSDL_MouseWheelEvent);
   592             SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
   645             SDL_JOYAXISMOTION: (jaxis: TSDL_JoyAxisEvent);
   594             SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
   647             SDL_JOYHATMOTION: (jhat: TSDL_JoyHatEvent);
   595             SDL_JOYBUTTONDOWN,
   648             SDL_JOYBUTTONDOWN,
   596             SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
   649             SDL_JOYBUTTONUP: (jbutton: TSDL_JoyButtonEvent);
   597             SDL_QUITEV: (quit: TSDL_QuitEvent);
   650             SDL_QUITEV: (quit: TSDL_QuitEvent);
   598             SDL_USEREVENT: (user: TSDL_UserEvent);
   651             SDL_USEREVENT: (user: TSDL_UserEvent);
       
   652             SDL_SYSWMEVENT: (syswm: TSDL_SysWMEvent);
       
   653             SDL_FINGERDOWN,
       
   654             SDL_FINGERUP,
       
   655             SDL_FINGERMOTION: (tfinger: TSDL_TouchFingerEvent);
       
   656             SDL_TOUCHBUTTONUP,
       
   657             SDL_TOUCHBUTTONDOWN: (tbutton: TSDL_TouchButtonEvent);
       
   658             SDL_MULTIGESTURE: (mgesture: TSDL_MultiGestureEvent);
       
   659             SDL_DOLLARGESTURE: (dgesture: TSDL_DollarGestureEvent);
   599             SDL_ALLEVENTS: (foo: shortstring);
   660             SDL_ALLEVENTS: (foo: shortstring);
   600             //TODO: implement other events
       
   601 {$ELSE}
   661 {$ELSE}
   602         case Byte of
   662         case Byte of
   603             SDL_NOEVENT: (type_: byte);
   663             SDL_NOEVENT: (type_: byte);
   604             SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
   664             SDL_ACTIVEEVENT: (active: TSDL_ActiveEvent);
   605             SDL_KEYDOWN,
   665             SDL_KEYDOWN,