From 5ef8b648869d109ea840d20d5d59df1455687d49 Mon Sep 17 00:00:00 2001 From: David Thompson Date: Tue, 8 Jan 2019 21:19:52 -0500 Subject: surface: Add SDL_BlitScaled binding. * sdl2/bindings.scm (sdl-blit-scaled): New procedure. * sdl2/surface.scm (blit-scaled): New procedure. * doc/api.texi (Surfaces): Document it. --- doc/api.texi | 7 +++++++ sdl2/bindings.scm | 3 +++ sdl2/surface.scm | 17 ++++++++++++++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/doc/api.texi b/doc/api.texi index f09cdfd..7e47fd7 100644 --- a/doc/api.texi +++ b/doc/api.texi @@ -994,6 +994,13 @@ Blit the rectangle @var{src-rect} from the surface @var{src} to @var{dst-rect} of the surface @var{dst}. @end deffn +@deffn {Procedure} blit-scaled @var{src} @var{src-rect} @var{dst} @var{dst-rect} +Blit the rectangle @var{src-rect} from the surface @var{src} to +@var{dst-rect} of the surface @var{dst}, scaling the source to fit the +destination. +@end deffn + + @node Rendering @section Rendering diff --git a/sdl2/bindings.scm b/sdl2/bindings.scm index 7c16abb..1f97186 100644 --- a/sdl2/bindings.scm +++ b/sdl2/bindings.scm @@ -946,6 +946,9 @@ RETURN-TYPE and accept arguments of ARG-TYPES." (define-foreign sdl-blit-surface int "SDL_UpperBlit" '(* * * *)) +(define-foreign sdl-blit-scaled + int "SDL_UpperBlitScaled" '(* * * *)) + ;;; ;;; Audio diff --git a/sdl2/surface.scm b/sdl2/surface.scm index a918bd7..3770a17 100644 --- a/sdl2/surface.scm +++ b/sdl2/surface.scm @@ -64,7 +64,8 @@ surface-pitch surface-pixels convert-surface-format - blit-surface)) + blit-surface + blit-scaled)) ;;; @@ -449,3 +450,17 @@ surface DST." ((@@ (sdl2 rect) unwrap-rect) dst-rect) %null-pointer))) (sdl-error "blit-surface" "failed to blit surface ~a to ~a" src dst))) + +(define (blit-scaled src src-rect dst dst-rect) + "Blit the rectangle SRC-RECT from the surface SRC to DST-RECT of the +surface DST, scaling the source to fit the destination." + (unless (zero? + (ffi:sdl-blit-surface (unwrap-surface src) + (if src-rect + ((@@ (sdl2 rect) unwrap-rect) src-rect) + %null-pointer) + (unwrap-surface dst) + (if dst-rect + ((@@ (sdl2 rect) unwrap-rect) dst-rect) + %null-pointer))) + (sdl-error "blit-scaled" "failed to blit surface ~a to ~a" src dst))) -- cgit v1.2.3