-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSource.cpp
97 lines (84 loc) · 3.29 KB
/
Source.cpp
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
88
89
90
91
92
93
94
95
96
97
#include <SFML/Graphics.hpp>
#include <SFML/Window.hpp>
#include <Windows.h>
#include <thread>
#include <mutex>
#include "Settings.h"
#include "SFMLElements.hpp"
SFML::Elements sfml_elements;
sf::RenderWindow window(sf::VideoMode(sfml_elements.sfml_settings.window_width,
sfml_elements.sfml_settings.window_height), "Text Editor", sf::Style::None);
sf::Cursor curs;
//int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
int main() {
sfml_elements.Initialize(window);
std::pair<int, int> prev_pos;
bool is_pressed = false;
int new_cursor = 0, prev_cursor = 0;
while (window.isOpen()) {
sf::Event event;
while (window.pollEvent(event)) {
sfml_elements.HandleText(event, window);
switch (event.type) {
case sf::Event::Closed: {
window.close();
break;
}
case sf::Event::MouseButtonPressed: {
if (sfml_elements.CheckPressed(window)) break;
if (event.mouseButton.button == sf::Mouse::Left && sf::Mouse::getPosition(window).y < 30) {
auto mb = event.mouseButton;
if (!is_pressed) {
prev_pos = std::make_pair(mb.x, mb.y);
is_pressed = true;
}
}
break;
}
case sf::Event::MouseMoved: {
if (sfml_elements.CheckHowered(window)) new_cursor = 1;
else if (sf::Mouse::getPosition(window).y >= 30 && sf::Mouse::getPosition(window).x >= 35 + 25 &&
sf::Mouse::getPosition(window).y <= sfml_elements.getLastY() + 20 &&
sf::Mouse::getPosition(window).x <= 35 + 25 + sfml_elements.sfml_settings.window_width - 100) new_cursor = 2;
else new_cursor = 0;
auto mm = event.mouseMove;
if (is_pressed) {
std::pair<int, int> diff = {
prev_pos.first - mm.x,
prev_pos.second - mm.y
};
window.setPosition(sf::Vector2i(window.getPosition().x - diff.first, window.getPosition().y - diff.second));
}
break;
}
case sf::Event::MouseButtonReleased: {
if (event.mouseButton.button == sf::Mouse::Left) {
sfml_elements.CheckReleased(window);
if (is_pressed)
is_pressed = false;
}
break;
}
case sf::Event::MouseWheelScrolled: {
sfml_elements.Scroll(event.mouseWheelScroll.delta);
break;
}
}
}
if (new_cursor != prev_cursor) {
if (new_cursor == 0) {
curs.loadFromSystem(curs.Arrow);
} else if (new_cursor == 1) {
curs.loadFromSystem(curs.Hand);
} else if (new_cursor == 2) {
curs.loadFromSystem(curs.Text);
}
window.setMouseCursor(curs);
prev_cursor = new_cursor;
}
window.clear(sf::Color(40, 44, 52));
sfml_elements.Draw(window);
window.display();
}
return 0;
}