1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/*
* Author: Sven Gothel <sgothel@jausoft.com>
* Copyright Gothel Software e.K.
*
* SPDX-License-Identifier: MIT
*
* This Source Code Form is subject to the terms of the MIT License
* If a copy of the MIT was not distributed with this file,
* you can obtain one at https://opensource.org/license/mit/.
*/
#include <gamp/Gamp.hpp>
#include <cstdio>
#include <cmath>
#include <memory>
#include <jau/basic_types.hpp>
#include <jau/float_types.hpp>
#include <jau/fraction_type.hpp>
#include <jau/io/file_util.hpp>
#include <gamp/Gamp.hpp>
#include <gamp/render/RenderContext.hpp>
#include "../demos/RedSquareES2.hpp"
#include "../demos/GLLauncher01.hpp"
using namespace jau::math;
using namespace jau::math::util;
using namespace gamp::wt;
using namespace gamp::wt::event;
class Example : public RedSquareES2 {
private:
class MyKeyListener : public KeyListener {
private:
RedSquareES2& m_parent;
public:
MyKeyListener(RedSquareES2& p) : m_parent(p) {}
void keyPressed(KeyEvent& e, const KeyboardTracker& kt) override {
jau::fprintf_td(e.when().to_ms(), stdout, "KeyPressed: %s; keys %zu\n", e.toString().c_str(), kt.pressedKeyCodes().count());
if( e.keySym() == VKeyCode::VK_ESCAPE ) {
WindowSRef win = e.source().lock();
if( win ) {
win->dispose(e.when());
}
} else if( e.keySym() == VKeyCode::VK_PAUSE || e.keySym() == VKeyCode::VK_P ) {
m_parent.animating() = !m_parent.animating();
} else if( e.keySym() == VKeyCode::VK_W ) {
WindowSRef win = e.source().lock();
jau::fprintf_td(e.when().to_ms(), stdout, "Source: %s\n", win ? win->toString().c_str() : "null");
}
}
void keyReleased(KeyEvent& e, const KeyboardTracker& kt) override {
jau::fprintf_td(e.when().to_ms(), stdout, "KeyRelease: %s; keys %zu\n", e.toString().c_str(), kt.pressedKeyCodes().count());
}
};
typedef std::shared_ptr<MyKeyListener> MyKeyListenerRef;
MyKeyListenerRef m_kl;
public:
Example()
: RedSquareES2(),
m_kl(std::make_shared<MyKeyListener>(*this)) { }
bool init(const WindowSRef& win, const jau::fraction_timespec& when) override {
if( !RedSquareES2::init(win, when) ) {
return false;
}
win->addKeyListener(m_kl);
return true;
}
void dispose(const WindowSRef& win, const jau::fraction_timespec& when) override {
win->removeKeyListener(m_kl);
RedSquareES2::dispose(win, when);
}
};
int main(int argc, char *argv[]) // NOLINT(bugprone-exception-escape)
{
return launch("RedSquareES2.hpp",
GLLaunchProps{.profile=GLProfile(GLProfile::GLES2), .contextFlags=gamp::render::RenderContextFlags::verbose},
std::make_shared<Example>(), argc, argv);
}
|