Skip to content

Commit 1211fde

Browse files
committed
updated menu to use new text system
1 parent 46cb5fa commit 1211fde

File tree

6 files changed

+139
-103
lines changed

6 files changed

+139
-103
lines changed

Qor/BasicState.cpp

Lines changed: 24 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -17,22 +17,23 @@ BasicState :: BasicState(Qor* engine):
1717
m_pInput(engine->input()),
1818
m_pRoot(make_shared<Node>()),
1919
m_pPipeline(engine->pipeline()),
20-
m_pResources(engine->resources())
20+
m_pResources(engine->resources()),
2121
//m_pCanvas(make_shared<Canvas>(
2222
// engine->window()->size().x, engine->window()->size().y
2323
//)),
24-
//m_pMenuGUI(make_shared<MenuGUI>(
25-
// engine->session()->profile(0)->controller().get(),
26-
// &m_MenuContext,
27-
// &m_MainMenu,
28-
// m_pPipeline->partitioner(),
29-
// m_pCanvas.get(),
30-
// m_pResources,
31-
// "Good Times",
32-
// engine->window()->size().y / 24.0f,
33-
// nullptr,
34-
// 5
35-
//))
24+
m_pMenuGUI(make_shared<MenuGUI>(
25+
engine->session()->profile(0)->controller().get(),
26+
&m_MenuContext,
27+
&m_MainMenu,
28+
m_pPipeline->partitioner(),
29+
engine->window(),
30+
//m_pCanvas.get(),
31+
m_pResources,
32+
"PressStart2P-Regular.ttf",
33+
engine->window()->size().y / 24.0f,
34+
nullptr,
35+
5
36+
))
3637
//m_pMenuGUI(make_shared<MenuGUI>(
3738
// engine->session()->active_profile(0)->controller().get(),
3839
// &m_MenuContext,
@@ -56,6 +57,8 @@ void BasicState :: preload()
5657
{
5758
m_pCamera = make_shared<Camera>(m_pQor->resources(), m_pQor->window());
5859
m_pRoot->add(m_pCamera->as_node());
60+
m_pRoot->add(m_pMenuGUI);
61+
//m_pRoot->add(m_pCanvas);
5962

6063
//m_pFont = m_pQor->resources()->cache_as<Font>("PressStart2P-Regular.ttf:30");
6164
//m_pText = make_shared<Text>(m_pFont);
@@ -78,14 +81,14 @@ void BasicState :: enter()
7881
m_pCamera->ortho();
7982
m_pPipeline->winding(true);
8083

81-
//m_MainMenu.options().emplace_back("OPTION 1", []{
82-
//});
83-
//m_MainMenu.options().emplace_back("OPTION 2", []{
84-
//});
85-
//m_MainMenu.options().emplace_back("OPTION 3", []{
86-
//});
87-
//m_MenuContext.clear(&m_MainMenu);
88-
//m_pRoot->add(m_pMenuGUI);
84+
m_MainMenu.options().emplace_back("OPTION 1", []{
85+
});
86+
m_MainMenu.options().emplace_back("OPTION 2", []{
87+
});
88+
m_MainMenu.options().emplace_back("OPTION 3", []{
89+
});
90+
m_MenuContext.clear(&m_MainMenu);
91+
m_pRoot->add(m_pMenuGUI);
8992

9093
//LOG("enter");
9194
//m_pRoot->add(Mesh::line(

Qor/BasicState.h

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,9 @@ class BasicState:
5151
//std::shared_ptr<Text> m_pText;
5252

5353
//std::shared_ptr<Canvas> m_pCanvas;
54-
//MenuContext m_MenuContext;
55-
//Menu m_MainMenu;
56-
//std::shared_ptr<MenuGUI> m_pMenuGUI;
54+
MenuContext m_MenuContext;
55+
Menu m_MainMenu;
56+
std::shared_ptr<MenuGUI> m_pMenuGUI;
5757
};
5858

5959
#endif

Qor/Menu.cpp

Lines changed: 90 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -33,23 +33,24 @@ MenuGUI :: MenuGUI(
3333
MenuContext* ctx,
3434
Menu* menu,
3535
IPartitioner* partitioner,
36-
Canvas* canvas,
36+
Window* window,
37+
//Canvas* canvas,
3738
Cache<Resource, std::string>* cache,
3839
std::string font,
3940
float font_size,
4041
float* fade,
4142
int max_options_per_screen,
4243
float spacing,
43-
Canvas::Align align,
44+
Text::Align align,
4445
float x,
45-
unsigned flags,
46-
Window* window
46+
unsigned flags
4747
):
4848
m_pController(c),
4949
m_pContext(ctx),
5050
m_pMenu(menu),
5151
m_pPartitioner(partitioner),
52-
m_pCanvas(canvas),
52+
m_pWindow(window),
53+
//m_pCanvas(canvas),
5354
m_pCache(cache),
5455
m_Font(font),
5556
m_FontSize(font_size),
@@ -58,9 +59,11 @@ MenuGUI :: MenuGUI(
5859
m_Spacing(spacing),
5960
m_Align(align),
6061
m_X(x),
61-
m_Flags(flags),
62-
m_pWindow(window)
62+
m_Flags(flags)
6363
{
64+
m_pFont = std::make_shared<Font>(cache->transform(
65+
m_Font + ":" + to_string(int(m_FontSize + 0.5))
66+
), cache);
6467
}
6568

6669
void MenuGUI :: interface_logic(Freq::Time t)
@@ -76,7 +79,8 @@ void MenuGUI :: interface_logic(Freq::Time t)
7679
float spacing = spacing_increase;
7780
float x = m_X;
7881
if(x < -K_EPSILON)
79-
x = m_pCanvas->center().x;
82+
//x = m_pCanvas->center().x;
83+
x = m_pWindow->center().x;
8084
m_Offset = std::max<int>(
8185
0,
8286
m_pContext->state().m_Highlighted - m_MaxOptionsPerScreen / 2
@@ -96,7 +100,7 @@ void MenuGUI :: interface_logic(Freq::Time t)
96100
auto box = Box::xywh(
97101
glm::vec3(
98102
x - 8.0f,
99-
spacing - spacing_increase + m_pCanvas->size().y/2.0f + 8.0f,
103+
spacing - spacing_increase + m_pWindow->size().y/2.0f + 8.0f,
100104
0.0f
101105
),
102106
glm::vec3(
@@ -242,23 +246,23 @@ void MenuGUI :: logic_self(Freq::Time t)
242246

243247
interface_logic(t);
244248

245-
auto cairo = m_pCanvas->context();
249+
//auto cairo = m_pCanvas->context();
246250

247-
// clear
248-
cairo->save();
249-
cairo->set_operator(Cairo::OPERATOR_CLEAR);
250-
cairo->paint();
251-
cairo->restore();
251+
//// clear
252+
//cairo->save();
253+
//cairo->set_operator(Cairo::OPERATOR_CLEAR);
254+
//cairo->paint();
255+
//cairo->restore();
252256

253257
if(not visible())
254258
return;
255259

256-
cairo->set_source_rgba(1.0, 1.0, 1.0, 0.5);
257-
cairo->select_font_face(
258-
m_Font,
259-
Cairo::FONT_SLANT_NORMAL,
260-
Cairo::FONT_WEIGHT_NORMAL
261-
);
260+
//cairo->set_source_rgba(1.0, 1.0, 1.0, 0.5);
261+
//cairo->select_font_face(
262+
// m_Font,
263+
// Cairo::FONT_SLANT_NORMAL,
264+
// Cairo::FONT_WEIGHT_NORMAL
265+
//);
262266
float fade;
263267
if(m_pFade)
264268
fade = *m_pFade;
@@ -275,28 +279,22 @@ void MenuGUI :: logic_self(Freq::Time t)
275279

276280
float x = m_X;
277281
if(x < -K_EPSILON)
278-
x = m_pCanvas->center().x;
282+
x = m_pWindow->center().x;
279283

280284
if(not text.empty())
281285
{
282-
//cairo->set_source_rgba(0.2, 0.2, 0.2, 0.5);
283-
cairo->set_font_size(m_FontSize + 4.0f * fade);
284-
m_pCanvas->text(text, Color(0.2f, 0.5f), vec2(
285-
-textoffset.x + x,
286-
fade * (
287-
-textoffset.y + m_pCanvas->center().y/2.0f + spacing
288-
)
289-
), m_Align);
290-
//cairo->set_source_rgba(
291-
// m_TitleColor.r(),
292-
// m_TitleColor.g(),
293-
// m_TitleColor.b(),
294-
//1.0);
295-
m_pCanvas->text(text, m_TitleColor, vec2(
296-
-textoffset.x + x,
297-
(1.0f-fade) * m_pCanvas->size().y
298-
- textoffset.y + m_pCanvas->center().y/2.0f + spacing
299-
), m_Align);
286+
//cairo->set_font_size(m_FontSize + 4.0f * fade);
287+
//m_pCanvas->text(text, Color(0.2f, 0.5f), vec2(
288+
// -textoffset.x + x,
289+
// fade * (
290+
// -textoffset.y + m_pCanvas->center().y/2.0f + spacing
291+
// )
292+
//), m_Align);
293+
//m_pCanvas->text(text, m_TitleColor, vec2(
294+
// -textoffset.x + x,
295+
// (1.0f-fade) * m_pCanvas->size().y
296+
// - textoffset.y + m_pCanvas->center().y/2.0f + spacing
297+
//), m_Align);
300298
}
301299

302300
//unsigned idx = m_pContext->state().m_Highlighted;
@@ -315,11 +313,29 @@ void MenuGUI :: logic_self(Freq::Time t)
315313
);
316314

317315
if(m_Flags & F_BOX && m_pWindow){
318-
m_pCanvas->color(Color(1.0f, 1.0f, 1.0f, 0.25f));
319-
m_pCanvas->rectangle(x - 8.0f,
320-
0.0f,
321-
x + 256.0f, m_pWindow->size().y);
322-
m_pCanvas->context()->fill();
316+
//m_pCanvas->color(Color(1.0f, 1.0f, 1.0f, 0.25f));
317+
//m_pCanvas->rectangle(x - 8.0f,
318+
// 0.0f,
319+
// x + 256.0f, m_pWindow->size().y);
320+
//m_pCanvas->context()->fill();
321+
}
322+
323+
auto opts_sz = m_pContext->state().m_Menu->options().size();
324+
for(auto& opt: m_OptionText)
325+
opt->detach();
326+
for(auto& opt: m_ShadowText)
327+
opt->detach();
328+
m_OptionText.resize(opts_sz);
329+
m_ShadowText.resize(opts_sz);
330+
for(auto& opt: m_OptionText){
331+
opt = std::make_shared<Text>(m_pFont);
332+
opt->align(m_Align);
333+
add(opt);
334+
}
335+
for(auto& opt: m_ShadowText){
336+
opt = std::make_shared<Text>(m_pFont);
337+
opt->align(m_Align);
338+
add(opt);
323339
}
324340

325341
for(int idx = m_Offset; idx <= endpoint; ++idx)
@@ -333,35 +349,47 @@ void MenuGUI :: logic_self(Freq::Time t)
333349
auto&& opt = m_pContext->state().m_Menu->options().at(idx);
334350

335351
if(m_Flags & F_BOX){
336-
m_pCanvas->color(Color(m_OptionColor * (idx%2?0.25f:0.5f), 0.5f));
337-
m_pCanvas->rectangle(x - 8.0f,
338-
spacing - spacing_increase + m_pCanvas->size().y/2.0f + 8.0f,
339-
x + 256.0f, spacing_increase);
340-
m_pCanvas->context()->fill();
352+
//m_pCanvas->color(Color(m_OptionColor * (idx%2?0.25f:0.5f), 0.5f));
353+
//m_pCanvas->rectangle(x - 8.0f,
354+
// spacing - spacing_increase + m_pCanvas->size().y/2.0f + 8.0f,
355+
// x + 256.0f, spacing_increase);
356+
//m_pCanvas->context()->fill();
341357
}
342-
343-
text = *opt.m_pText;
344-
//cairo->set_source_rgba(1.0, 1.0, 1.0, 0.25 * fade);
345-
cairo->set_font_size(m_FontSize + 4.0f * fade);
346-
m_pCanvas->text(text, Color(1.0f, 0.25f * fade), vec2(
358+
m_OptionText[idx]->set(*opt.m_pText);
359+
m_ShadowText[idx]->set(*opt.m_pText);
360+
//cairo->set_font_size(m_FontSize + 4.0f * fade);
361+
//m_pCanvas->text(text, Color(1.0f, 0.25f * fade), vec2(
362+
// -textoffset.x + x,
363+
// fade * (spacing + textoffset.y + m_pCanvas->size().y/2.0f)
364+
//), m_Align);
365+
m_ShadowText[idx]->color(Color(1.0f, 0.25f * fade));
366+
m_ShadowText[idx]->position(vec3(
347367
-textoffset.x + x,
348-
fade * (spacing + textoffset.y + m_pCanvas->size().y/2.0f)
349-
), m_Align);
368+
fade * (spacing + textoffset.y + m_pWindow->center().y),
369+
-0.1f
370+
));
350371
Color c;
351372
if(m_pContext->state().m_Highlighted == idx)
352373
c = Color(m_HighlightColor, 1.0f * fade);
353374
else
354375
c = Color(m_OptionColor, 1.0f * fade);
355-
m_pCanvas->text(text, c, vec2(
376+
m_OptionText[idx]->color(c);
377+
m_OptionText[idx]->position(vec3(
356378
-textoffset.x + x,
357-
(1.0f-fade) * m_pCanvas->size().y +
358-
spacing - textoffset.y + m_pCanvas->size().y/2.0f
359-
), m_Align);
379+
(1.0f-fade) * m_pWindow->size().y +
380+
spacing - textoffset.y + m_pWindow->center().y,
381+
0.0f
382+
));
383+
//m_pCanvas->text(text, c, vec2(
384+
// -textoffset.x + x,
385+
// (1.0f-fade) * m_pCanvas->size().y +
386+
// spacing - textoffset.y + m_pCanvas->size().y/2.0f
387+
//), m_Align);
360388

361389
spacing += spacing_increase;
362390
//++idx;
363391
}
364-
m_pCanvas->refresh();
392+
//m_pCanvas->refresh();
365393
}
366394

367395
void MenuGUI :: refresh()

Qor/Menu.h

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
#include "Resource.h"
1111
#include "Graphics.h"
1212
#include "IPartitioner.h"
13-
#include "Canvas.h"
14-
class Canvas;
15-
13+
#include "Text.h"
14+
//#include "Canvas.h"
15+
//class Canvas;
1616

1717
class Menu
1818
{
@@ -195,17 +195,18 @@ class MenuGUI:
195195
MenuContext* ctx,
196196
Menu* menu,
197197
IPartitioner* partitioner,
198-
Canvas* canvas,
198+
Window* window,
199+
//Canvas* canvas,
199200
Cache<Resource, std::string>* cache,
200201
std::string m_Font,
201202
float font_size,
202203
float* fade,
203204
int options_per_screen = 4,
204205
float spacing = 1.5f,
205-
Canvas::Align align = Canvas::CENTER,
206+
//Canvas::Align align = Canvas::CENTER,
207+
Text::Align = Text::CENTER,
206208
float x = -1.0f,
207-
unsigned flags = 0u,
208-
Window* window = nullptr
209+
unsigned flags = 0u
209210
);
210211
virtual ~MenuGUI() {}
211212

@@ -245,7 +246,7 @@ class MenuGUI:
245246
MenuContext* m_pContext;
246247
Menu* m_pMenu;
247248
IPartitioner* m_pPartitioner;
248-
Canvas* m_pCanvas;
249+
//Canvas* m_pCanvas;
249250
Cache<Resource, std::string>* m_pCache;
250251
float* m_pFade;
251252
std::string m_Font;
@@ -262,12 +263,16 @@ class MenuGUI:
262263

263264
int m_MaxOptionsPerScreen = 4;
264265
int m_Offset = 0;
265-
Canvas::Align m_Align = Canvas::CENTER;
266+
Text::Align m_Align = Text::CENTER;
266267

267268
float m_X = -1.0f;
268269

269270
unsigned m_Flags = 0;
270271
Window* m_pWindow = nullptr;
272+
273+
std::shared_ptr<Font> m_pFont;
274+
std::vector<std::shared_ptr<Text>> m_OptionText;
275+
std::vector<std::shared_ptr<Text>> m_ShadowText;
271276
};
272277

273278
#endif

0 commit comments

Comments
 (0)