; German forum: http://www.purebasic.fr/german/archive/viewtopic.php?t=2636&highlight=
; Author: ChaOsKid (updated for PB4.00 by blbltheworm)
; Date: 23. October 2003
; OS: Windows
; Demo: No

MIRROR a SPRITE, use Return or Space to see the effect, Esc for quit
; Spiegeln eines SPRITEs, benutze Return oder Space zum Ansehen des Effekts, Esc für Abbruch

; Die Funktion StretchBlt kopiert eine Bitmap aus einem Speicher-Gerätekontext in einen
; anderen Gerätekontext, wobei die Höhe und die Breite von Quell- und Zielbereich sich
; unterscheiden können und dadurch Vergößerungen und Verkleinerungen ebenso möglich werden
; wie Verzerrungen oder Spiegelungen um die horizonale und/oder vertikale Achse. Alle
; Koordinaten- und Größenangaben werden in Pixeln angegeben.

Breite.l = GetSystemMetrics_(#SM_CXSCREEN) 
Hoehe.l = GetSystemMetrics_(#SM_CYSCREEN) 
hdc.l = GetDC_(0) 
Tiefe.l = GetDeviceCaps_(hdc, #BITSPIXEL) 
ReleaseDC_(0, hdc) 
If InitSPRITE() = 0 Or InitKeyboard() = 0 Or OpenScreen(Breite, Hoehe, Tiefe, "") = 0 
  End 
EndIf 

Procedure MIRRORSPRITE(SPRITEID.l, Direction.l) 
  hdc = StartDrawing(SPRITEOutput(SPRITEID)) 
    Height = SPRITEHeight(SPRITEID) 
    Width = SPRITEWidth(SPRITEID) 
    If Direction 
      StretchBlt_(hdc, 0, Height, Width, -Height, hdc, 0, 0, Width, Height, #SRCCOPY) 
    Else 
      StretchBlt_(hdc, Width, 0, -Width, Height, hdc, 0, 0, Width, Height, #SRCCOPY) 
    EndIf 
  StopDrawing() 
EndProcedure 

Width = 100 
Height = 30 
CreateSPRITE(0,Width,Height) 
StartDrawing(SPRITEOutput(SPRITEID)) 
  DrawingMode(1) 
  FrontColor(RGB(255,255,255)) 
  DrawText(0,0,"1234567890") 
StopDrawing() 
  
Repeat 
  ClearScreen(RGB(0,0,0)) 
  ; Tastaturabfrage 
  If ExamineKeyboard() 
    If KeyboardPushed(#PB_Key_Escape) 
      Quit = 1 
    EndIf 
    If KeyboardReleased(#PB_Key_Space) 
      MIRRORSPRITE(0, 0) 
    EndIf 
    If KeyboardReleased(#PB_Key_Return) 
      MIRRORSPRITE(0, 1) 
    EndIf 
  EndIf 
  DisplayTransparentSPRITE(0, Breite/2-50, Hoehe/2-25) 
  FlipBuffers() 
Until Quit > 0

; IDE Options = PureBasic v4.00 (Windows - x86)
; Folding = -