annotate mlk-client/main.cpp @ 212:e50f51702df4

client: add basic button prototype, closes #908 @1h
author David Demelier <markand@malikania.fr>
date Fri, 04 Jan 2019 18:26:04 +0100
parents ac99f440ee44
children 61580ff3138a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
1 /*
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
2 * main.cpp -- main client file
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
3 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
4 * Copyright (c) 2013-2018 David Demelier <markand@malikania.fr>
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
5 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
6 * Permission to use, copy, modify, and/or distribute this software for any
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
7 * purpose with or without fee is hereby granted, provided that the above
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
8 * copyright notice and this permission notice appear in all copies.
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
9 *
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
17 */
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
18
212
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
19 #include <chrono>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
20 #include <iostream>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
21 #include <thread>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
22
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
23 #include <malikania/client/color.hpp>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
24 #include <malikania/client/button.hpp>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
25 #include <malikania/client/window.hpp>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
26 #include <malikania/client/painter.hpp>
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
27
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
28 using namespace std::chrono_literals;
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
29
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
30 int main(int argc, char** argv)
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
31 {
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
32 mlk::client::window win(1920/2, 1080/2);
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
33 mlk::client::painter painter(win);
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
34 mlk::client::button button("click me");
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
35
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
36 button.set_size({200, 64});
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
37 button.set_position({50, 50});
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
38 button.set_on_press([] {
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
39 std::cout << "je suis clické" << std::endl;
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
40 });
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
41
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
42 for (;;) {
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
43 while (auto ev = win.poll()) {
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
44 if (std::get_if<mlk::client::quit_event>(&ev))
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
45 goto end;
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
46 else
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
47 button.handle_event(ev);
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
48 }
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
49
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
50 painter.set_drawing_color(mlk::client::color::from_hex(0xffffffff));
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
51 painter.clear();
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
52 button.draw(painter);
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
53 painter.present();
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
54
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
55 std::this_thread::sleep_for(50ms);
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
56 }
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
57
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
58 end:
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
59 return 0;
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
60 }
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
61
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
62 #if 0
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
63
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
64 #include <cerrno>
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
65 #include <cstring>
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
66 #include <fstream>
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
67 #include <iostream>
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
68 #include <iterator>
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
69
211
ac99f440ee44 client: add more javascript bindings
David Demelier <markand@malikania.fr>
parents: 210
diff changeset
70 #include <malikania/client/js/context.hpp>
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
71
212
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
72 // Simple javascript startup file. Don't delete.
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
73
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
74 int main(int argc, char** argv)
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
75 {
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
76 -- argc;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
77 ++ argv;
191
bfc6b9c9081a Client: widget store position and size
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
78
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
79 if (argc == 0) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
80 std::cerr << "usage: mlk-client main.js" << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
81 return 1;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
82 }
191
bfc6b9c9081a Client: widget store position and size
David Demelier <markand@malikania.fr>
parents: 182
diff changeset
83
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
84 try {
211
ac99f440ee44 client: add more javascript bindings
David Demelier <markand@malikania.fr>
parents: 210
diff changeset
85 mlk::client::js::context ctx;
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
86 std::ifstream input(argv[0]);
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
87 std::string script(
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
88 std::istreambuf_iterator<char>(input.rdbuf()),
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
89 std::istreambuf_iterator<char>()
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
90 );
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
91
210
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
92 if (!input)
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
93 throw std::runtime_error(std::strerror(errno));
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
94 if (duk_peval_string(ctx, script.c_str()))
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
95 throw mlk::js::duk::get_stack(ctx, -1);
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
96 } catch (const mlk::js::duk::stack_info& ex) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
97 std::cerr << argv[0] << ":" << ex.get_line_number() << ": " << ex.what() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
98 std::cerr << ex.get_stack() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
99 return 1;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
100 } catch (const std::exception& ex) {
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
101 std::cerr << "abort: " << ex.what() << std::endl;
1599919b5de6 client: allow starting a Javascript file
David Demelier <markand@malikania.fr>
parents: 208
diff changeset
102 return 1;
200
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
103 }
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
104
0a285d62ace7 windows: initial VS2017 support
David Demelier <markand@malikania.fr>
parents: 193
diff changeset
105 return 0;
182
3107ce017c3a Misc: switch back to SDL
David Demelier <markand@malikania.fr>
parents:
diff changeset
106 }
212
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
107
e50f51702df4 client: add basic button prototype, closes #908 @1h
David Demelier <markand@malikania.fr>
parents: 211
diff changeset
108 #endif