1 /**
2  * ae.demo.drawsprite.main
3  *
4  * License:
5  *   This Source Code Form is subject to the terms of
6  *   the Mozilla Public License, v. 2.0. If a copy of
7  *   the MPL was not distributed with this file, You
8  *   can obtain one at http://mozilla.org/MPL/2.0/.
9  *
10  * Authors:
11  *   Vladimir Panteleev <ae@cy.md>
12  */
13 
14 module ae.demo.drawsprite.main;
15 
16 import ae.ui.app.application;
17 import ae.ui.app.main;
18 import ae.ui.shell.shell;
19 import ae.ui.shell.sdl2.shell;
20 import ae.ui.video.sdl2.video;
21 import ae.ui.video.renderer;
22 import ae.utils.fps;
23 import ae.utils.graphics.image;
24 
25 final class MyApplication : Application
26 {
27 	override string getName() { return "Demo/DrawSprite"; }
28 	override string getCompanyName() { return "CyberShadow"; }
29 
30 	Shell shell;
31 	FPSCounter fps;
32 	Image!BGRX image;
33 	enum SCALE_BASE = 0x10000;
34 
35 	ImageTextureSource source;
36 
37 	override void render(Renderer s)
38 	{
39 		fps.tick(&shell.setCaption);
40 
41 		//auto canvas = s.lock();
42 		//scope(exit) s.unlock();
43 
44 		xy_t x0 = (s.width  - image.w) / 2;
45 		xy_t y0 = (s.height - image.h) / 2;
46 		//image.blitTo(canvas, x0, y0);
47 		s.draw(cast(int)x0, cast(int)y0, source, 0, 0, cast(int)image.w, cast(int)image.h);
48 	}
49 
50 	override int run(string[] args)
51 	{
52 		import std.file : read;
53 		image = read("lena.bmp")
54 			.parseBMP!BGR()
55 			.colorMap!(c => BGRX(c.b, c.g, c.r))
56 			.copy();
57 		source = new ImageTextureSource;
58 		source.image = image;
59 
60 		shell = new SDL2Shell(this);
61 		shell.video = new SDL2Video();
62 		shell.run();
63 		shell.video.shutdown();
64 		return 0;
65 	}
66 
67 	override void handleQuit()
68 	{
69 		shell.quit();
70 	}
71 }
72 
73 shared static this()
74 {
75 	createApplication!MyApplication();
76 }