PageRenderTime 19ms CodeModel.GetById 5ms RepoModel.GetById 1ms app.codeStats 0ms

/src/GFX/Rotozoom.xs

http://github.com/PerlGameDev/SDL
Unknown | 217 lines | 181 code | 36 blank | 0 comment | 0 complexity | f082199464450ceb5eca1d045d4ad68e MD5 | raw file
Possible License(s): AGPL-1.0, GPL-2.0
  1. #include "EXTERN.h"
  2. #include "perl.h"
  3. #include "XSUB.h"
  4. #include "ppport.h"
  5. #ifndef aTHX_
  6. #define aTHX_
  7. #endif
  8. #include <SDL.h>
  9. #ifdef HAVE_SDL_GFX_ROTOZOOM
  10. #include <SDL_rotozoom.h>
  11. #ifndef _SDL_gfxPrimitives_h
  12. #include <SDL_gfxPrimitives.h>
  13. #endif
  14. #ifndef SDL_GFXPRIMITIVES_MAJOR
  15. #define SDL_GFXPRIMITIVES_MAJOR 0
  16. #endif
  17. #ifndef SDL_GFXPRIMITIVES_MINOR
  18. #define SDL_GFXPRIMITIVES_MINOR 0
  19. #endif
  20. #ifndef SDL_GFXPRIMITIVES_MICRO
  21. #define SDL_GFXPRIMITIVES_MICRO 0
  22. #endif
  23. #endif
  24. MODULE = SDL::GFX::Rotozoom PACKAGE = SDL::GFX::Rotozoom PREFIX = gfx_roto_
  25. =for documentation
  26. The Following are XS bindings to the SDL_gfx Library
  27. Described here:
  28. See: L<http:/*www.ferzkopp.net/joomla/content/view/19/14/> */
  29. =cut
  30. #ifdef HAVE_SDL_GFX_ROTOZOOM
  31. SDL_Surface *
  32. gfx_roto_surface(src, angle, zoom, smooth)
  33. SDL_Surface * src
  34. double angle
  35. double zoom
  36. int smooth
  37. PREINIT:
  38. char *CLASS = "SDL::Surface";
  39. CODE:
  40. RETVAL = rotozoomSurface(src, angle, zoom, smooth);
  41. OUTPUT:
  42. RETVAL
  43. #if (SDL_GFXPRIMITIVES_MAJOR >= 2) && (SDL_GFXPRIMITIVES_MINOR >= 0) && (SDL_GFXPRIMITIVES_MICRO >= 13)
  44. SDL_Surface *
  45. gfx_roto_surface_xy(src, angle, zoomx, zoomy, smooth)
  46. SDL_Surface * src
  47. double angle
  48. double zoomx
  49. double zoomy
  50. int smooth
  51. PREINIT:
  52. char *CLASS = "SDL::Surface";
  53. CODE:
  54. RETVAL = rotozoomSurfaceXY(src, angle, zoomx, zoomy, smooth);
  55. OUTPUT:
  56. RETVAL
  57. #else
  58. SDL_Surface *
  59. gfx_roto_surface_xy(src, angle, zoomx, zoomy, smooth)
  60. SDL_Surface * src
  61. double angle
  62. double zoomx
  63. double zoomy
  64. int smooth
  65. PREINIT:
  66. char *CLASS = "SDL::Surface";
  67. CODE:
  68. warn("SDL_gfx >= 2.0.14 needed for SDL::GFX::Rotozoom::surface_xy( src, angle, zoomx, zoomy, smooth )");
  69. XSRETURN_UNDEF;
  70. OUTPUT:
  71. RETVAL
  72. #endif
  73. AV *
  74. gfx_roto_surface_size(width, height, angle, zoom)
  75. int width
  76. int height
  77. double angle
  78. double zoom
  79. CODE:
  80. int dstwidth,dstheight;
  81. rotozoomSurfaceSize(width, height, angle, zoom, &dstwidth, &dstheight);
  82. RETVAL = newAV();
  83. sv_2mortal((SV*)RETVAL);
  84. av_push(RETVAL,newSViv(dstwidth));
  85. av_push(RETVAL,newSViv(dstheight));
  86. OUTPUT:
  87. RETVAL
  88. AV *
  89. gfx_roto_surface_size_xy(width, height, angle, zoomx, zoomy)
  90. int width
  91. int height
  92. double angle
  93. double zoomx
  94. double zoomy
  95. CODE:
  96. int dstwidth,dstheight;
  97. rotozoomSurfaceSizeXY(width, height, angle, zoomx, zoomy, &dstwidth, &dstheight);
  98. RETVAL = newAV();
  99. sv_2mortal((SV*)RETVAL);
  100. av_push(RETVAL,newSViv(dstwidth));
  101. av_push(RETVAL,newSViv(dstheight));
  102. OUTPUT:
  103. RETVAL
  104. SDL_Surface *
  105. gfx_roto_zoom_surface(src, zoomx, zoomy, smooth)
  106. SDL_Surface * src
  107. double zoomx
  108. double zoomy
  109. int smooth
  110. PREINIT:
  111. char *CLASS = "SDL::Surface";
  112. CODE:
  113. RETVAL = zoomSurface(src, zoomx, zoomy, smooth);
  114. OUTPUT:
  115. RETVAL
  116. AV *
  117. gfx_roto_zoom_surface_size(width, height, zoomx, zoomy)
  118. int width
  119. int height
  120. double zoomx
  121. double zoomy
  122. CODE:
  123. int dstwidth,dstheight;
  124. zoomSurfaceSize(width, height, zoomx, zoomy, &dstwidth, &dstheight);
  125. RETVAL = newAV();
  126. sv_2mortal((SV*)RETVAL);
  127. av_push(RETVAL,newSViv(dstwidth));
  128. av_push(RETVAL,newSViv(dstheight));
  129. OUTPUT:
  130. RETVAL
  131. #if (SDL_GFXPRIMITIVES_MAJOR >= 2) && (SDL_GFXPRIMITIVES_MINOR >= 0) && (SDL_GFXPRIMITIVES_MICRO >= 14)
  132. SDL_Surface *
  133. gfx_roto_shrink_surface(src, factorx, factory)
  134. SDL_Surface * src
  135. float factorx
  136. float factory
  137. PREINIT:
  138. char *CLASS = "SDL::Surface";
  139. CODE:
  140. RETVAL = shrinkSurface(src, factorx, factory);
  141. OUTPUT:
  142. RETVAL
  143. #else
  144. SDL_Surface *
  145. gfx_roto_shrink_surface(src, factorx, factory)
  146. SDL_Surface * src
  147. int factorx
  148. int factory
  149. PREINIT:
  150. char *CLASS = "SDL::Surface";
  151. CODE:
  152. warn("SDL_gfx >= 2.0.14 needed for SDL::GFX::Rotozoom::shrink_surface( src, factorx, factory )");
  153. XSRETURN_UNDEF;
  154. OUTPUT:
  155. RETVAL
  156. #endif
  157. #if (SDL_GFXPRIMITIVES_MAJOR >= 2) && (SDL_GFXPRIMITIVES_MINOR >= 0) && (SDL_GFXPRIMITIVES_MICRO >= 17)
  158. SDL_Surface *
  159. gfx_roto_rotate_surface_90_degrees(pSurf, numClockwiseTurns)
  160. SDL_Surface* pSurf
  161. int numClockwiseTurns
  162. PREINIT:
  163. char *CLASS = "SDL::Surface";
  164. CODE:
  165. RETVAL = rotateSurface90Degrees(pSurf, numClockwiseTurns);
  166. OUTPUT:
  167. RETVAL
  168. #else
  169. SDL_Surface *
  170. gfx_roto_rotate_surface_90_degrees(pSurf, numClockwiseTurns)
  171. SDL_Surface* pSurf
  172. int numClockwiseTurns
  173. PREINIT:
  174. char *CLASS = "SDL::Surface";
  175. CODE:
  176. warn("SDL_gfx >= 2.0.17 needed for SDL::GFX::Rotozoom::rotate_surface_90_degrees( src, numclockwiseturns )");
  177. XSRETURN_UNDEF;
  178. OUTPUT:
  179. RETVAL
  180. #endif
  181. #endif