Skip to content

Commit

Permalink
More samples + corrections
Browse files Browse the repository at this point in the history
  • Loading branch information
ysbaddaden committed Dec 25, 2016
1 parent 967993c commit e8c47f5
Show file tree
Hide file tree
Showing 14 changed files with 393 additions and 97 deletions.
41 changes: 41 additions & 0 deletions samples/04_keyboard.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
require "../sdl"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)

surfaces = {
default: SDL.load_bmp(File.join(__DIR__, "data", "press.bmp")),
up: SDL.load_bmp(File.join(__DIR__, "data", "up.bmp")),
down: SDL.load_bmp(File.join(__DIR__, "data", "down.bmp")),
left: SDL.load_bmp(File.join(__DIR__, "data", "left.bmp")),
right: SDL.load_bmp(File.join(__DIR__, "data", "right.bmp")),
}

bmp = surfaces[:default]

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
when SDL::Event::Keyboard
case event.sym
when .up?
bmp = surfaces[:up]
when .down?
bmp = surfaces[:down]
when .left?
bmp = surfaces[:left]
when .right?
bmp = surfaces[:right]
when .q?
break
else
bmp = surfaces[:default]
end if event.keyup?
end

bmp.blit(window.surface)
window.update
end
26 changes: 26 additions & 0 deletions samples/05_stretching.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
require "../sdl"

def load_bmp(name, window)
path = File.join(__DIR__, "data", name)
SDL.load_bmp(path).convert(window.surface)
end

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)
bmp = load_bmp("stretch.bmp", window)

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
when SDL::Event::Keyboard
if event.keyup? && event.sym.q?
break
end
end

bmp.blit_scaled(window.surface, dstrect: SDL::Rect.new(20, 20, 600, 440))
window.update
end
22 changes: 22 additions & 0 deletions samples/06_image.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }
window = SDL::Window.new("SDL Tutorial", 640, 480)

IMG.init(IMG::Init::PNG)
at_exit { IMG.quit }

png = IMG.load(File.join(__DIR__, "data", "loaded.png"))
png = png.convert(window.surface)

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
end

png.blit(window.surface)
window.update
end
25 changes: 25 additions & 0 deletions samples/07_texture.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

window = SDL::Window.new("SDL Tutorial", 640, 480)
renderer = SDL::Renderer.new(window)

IMG.init(IMG::Init::PNG)
texture = IMG.load(File.join(__DIR__, "data", "loaded.png"), renderer)

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
end

renderer.draw_color = {255, 0, 0, 255}
renderer.clear

renderer.copy(texture, dstrect: {20, 20, 600, 440})

renderer.present
end
36 changes: 36 additions & 0 deletions samples/09_viewport.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)
renderer = SDL::Renderer.new(window)

width, height = window.size
png = IMG.load(File.join(__DIR__, "data", "loaded.png"), renderer)

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
end

# clear sreen in white
renderer.draw_color = {255, 255, 0, 255}
renderer.clear

# top left
renderer.viewport = {20, 20, 290, 210}
renderer.copy(png)

# top left
renderer.viewport = {330, 20, 290, 210}
renderer.copy(png)

# bottom
renderer.viewport = {20, 250, 600, 210}
renderer.copy(png)

renderer.present
end
38 changes: 38 additions & 0 deletions samples/10_colorkey.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

IMG.init(IMG::Init::PNG)
at_exit { IMG.quit }

SDL.set_hint(SDL::Hint::RENDER_SCALE_QUALITY, "1")
window = SDL::Window.new("SDL tutorial", 640, 480)
renderer = SDL::Renderer.new window

background = IMG.load(File.join(__DIR__, "data", "background.png"), renderer)

# image has a colored background, declare the color as transparent:
image = IMG.load(File.join(__DIR__, "data", "foo.png"))
image.color_key = {0, 255, 255}
foo = SDL::Texture.from(image, renderer)

# image has a transparent background color (SDL_image sets the colorkey):
#foo = IMG.load(File.join(__DIR__, "data", "foo2.png"), renderer)

loop do
case event = SDL::Event.poll
when SDL::Event::Quit
break
end

# clear sreen in white
renderer.draw_color = {255, 255, 255, 255}
renderer.clear

renderer.copy(background)
renderer.copy(foo, dstrect: {240, 190, foo.width, foo.height})

renderer.present
end
31 changes: 31 additions & 0 deletions samples/11_sprites.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO); at_exit { SDL.quit }
IMG.init(IMG::Init::PNG); at_exit { IMG.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)
renderer = SDL::Renderer.new(window)

image = IMG.load(File.join(__DIR__, "data", "sprites.png"))
image.color_key = {0, 255, 255}
sprite = SDL::Texture.from(image, renderer)

width, height = renderer.output_size

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
end

renderer.draw_color = {255, 255, 255, 255}
renderer.clear

renderer.copy(sprite, {0, 0, 100, 100}, {0, 0, 100, 100})
renderer.copy(sprite, {100, 0, 100, 100}, {width - 100, 0, 100, 100})
renderer.copy(sprite, {0, 100, 100, 100}, {0, height - 100, 100, 100})
renderer.copy(sprite, {100, 100, 100, 100}, {width - 100, height - 100, 100, 100})

renderer.present
end
45 changes: 45 additions & 0 deletions samples/12_color_modulation.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
require "../src/sdl"
require "../src/image"

SDL.init(SDL::Init::VIDEO); at_exit { SDL.quit }
IMG.init(IMG::Init::PNG); at_exit { IMG.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)
renderer = SDL::Renderer.new(window)

image = IMG.load(File.join(__DIR__, "data", "full.png"), renderer)
r = g = b = 255

loop do
case event = SDL::Event.wait
when SDL::Event::Quit
break
when SDL::Event::Keyboard
case event.sym
when .a?
r += 32
when .z?
g += 32
when .e?
b += 32
when .q?
r -= 32
when .s?
g -= 32
when .d?
b -= 32
end if event.keyup?
end

r = r.clamp(0, 255)
g = g.clamp(0, 255)
b = b.clamp(0, 255)

renderer.draw_color = {255, 255, 255, 255}
renderer.clear

image.color_mod = {r, g, b}
renderer.copy(image)

renderer.present
end
6 changes: 6 additions & 0 deletions samples/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# SDL2 samples

Adapted from the tutorials found at <http://lazyfoo.net/tutorials/SDL/index.php>

BPM and PNG images aren't included, to avoid bloating the repository. Download
and extract them as see fit.
23 changes: 23 additions & 0 deletions samples/bmp.cr
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
require "../sdl"

SDL.init(SDL::Init::VIDEO)
at_exit { SDL.quit }

window = SDL::Window.new("SDL tutorial", 640, 480)
bmp = SDL.load_bmp(File.join(__DIR__, "data", "hello_world.bmp"))

loop do
event = SDL::Event.wait

case event
when SDL::Event::Quit
break
when SDL::Event::Keyboard
if event.mod.lctrl? && event.sym.q?
break
end
end

bmp.blit(window.surface)
window.update
end
46 changes: 23 additions & 23 deletions src/image.cr
Original file line number Diff line number Diff line change
Expand Up @@ -83,30 +83,30 @@ module IMG
end
{% end %}

class File
def initialize(path)
@rwops = SDL::RWops.new(path, "rb")
end
#class File
# def initialize(path)
# @rwops = SDL::RWops.new(path, "rb")
# end

# Loads the file as a `SDL::Surface`.
def load
surface = LibIMG.load_rw(@rwops, 1)
raise Error.new("IMG_Load_RW") unless surface
SDL::Surface.new(surface)
end
# # Loads the file as a `SDL::Surface`.
# def load
# surface = LibIMG.load_rw(@rwops, 1)
# raise Error.new("IMG_Load_RW") unless surface
# SDL::Surface.new(surface)
# end

# Loads the file as a `SDL::Texture` for *renderer*.
def load(renderer : SDL::Renderer)
texture = LibIMG.load_texture_rw(renderer, @rwops, 1)
raise Error.new("IMG_LoadTexture_RW") unless texture
SDL::Texture.new(texture)
end
# # Loads the file as a `SDL::Texture` for *renderer*.
# def load(renderer : SDL::Renderer)
# texture = LibIMG.load_texture_rw(renderer, @rwops, 1)
# raise Error.new("IMG_LoadTexture_RW") unless texture
# SDL::Texture.new(texture)
# end

{% for type in Type.constants %}
# Returns true if the file is a {{type.id}} file.
def {{type.downcase.id}}?
LibIMG.is_{{type.downcase.id}}(@rwops) == 1
end
{% end %}
end
# {% for type in Type.constants %}
# # Returns true if the file is a {{type.id}} file.
# def {{type.downcase.id}}?
# LibIMG.is_{{type.downcase.id}}(@rwops) == 1
# end
# {% end %}
#end
end
Loading

0 comments on commit e8c47f5

Please sign in to comment.