@@ -33,23 +33,24 @@ MenuGUI :: MenuGUI(
33
33
MenuContext* ctx,
34
34
Menu* menu,
35
35
IPartitioner* partitioner,
36
- Canvas* canvas,
36
+ Window* window,
37
+ // Canvas* canvas,
37
38
Cache<Resource, std::string>* cache,
38
39
std::string font,
39
40
float font_size,
40
41
float * fade,
41
42
int max_options_per_screen,
42
43
float spacing,
43
- Canvas ::Align align,
44
+ Text ::Align align,
44
45
float x,
45
- unsigned flags,
46
- Window* window
46
+ unsigned flags
47
47
):
48
48
m_pController (c),
49
49
m_pContext(ctx),
50
50
m_pMenu(menu),
51
51
m_pPartitioner(partitioner),
52
- m_pCanvas(canvas),
52
+ m_pWindow(window),
53
+ // m_pCanvas(canvas),
53
54
m_pCache(cache),
54
55
m_Font(font),
55
56
m_FontSize(font_size),
@@ -58,9 +59,11 @@ MenuGUI :: MenuGUI(
58
59
m_Spacing(spacing),
59
60
m_Align(align),
60
61
m_X(x),
61
- m_Flags(flags),
62
- m_pWindow(window)
62
+ m_Flags(flags)
63
63
{
64
+ m_pFont = std::make_shared<Font>(cache->transform (
65
+ m_Font + " :" + to_string (int (m_FontSize + 0.5 ))
66
+ ), cache);
64
67
}
65
68
66
69
void MenuGUI :: interface_logic(Freq::Time t)
@@ -76,7 +79,8 @@ void MenuGUI :: interface_logic(Freq::Time t)
76
79
float spacing = spacing_increase;
77
80
float x = m_X;
78
81
if (x < -K_EPSILON)
79
- x = m_pCanvas->center ().x ;
82
+ // x = m_pCanvas->center().x;
83
+ x = m_pWindow->center ().x ;
80
84
m_Offset = std::max<int >(
81
85
0 ,
82
86
m_pContext->state ().m_Highlighted - m_MaxOptionsPerScreen / 2
@@ -96,7 +100,7 @@ void MenuGUI :: interface_logic(Freq::Time t)
96
100
auto box = Box::xywh (
97
101
glm::vec3 (
98
102
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 ,
100
104
0 .0f
101
105
),
102
106
glm::vec3 (
@@ -242,23 +246,23 @@ void MenuGUI :: logic_self(Freq::Time t)
242
246
243
247
interface_logic (t);
244
248
245
- auto cairo = m_pCanvas->context ();
249
+ // auto cairo = m_pCanvas->context();
246
250
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();
252
256
253
257
if (not visible ())
254
258
return ;
255
259
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
+ // );
262
266
float fade;
263
267
if (m_pFade)
264
268
fade = *m_pFade;
@@ -275,28 +279,22 @@ void MenuGUI :: logic_self(Freq::Time t)
275
279
276
280
float x = m_X;
277
281
if (x < -K_EPSILON)
278
- x = m_pCanvas ->center ().x ;
282
+ x = m_pWindow ->center ().x ;
279
283
280
284
if (not text.empty ())
281
285
{
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);
300
298
}
301
299
302
300
// unsigned idx = m_pContext->state().m_Highlighted;
@@ -315,11 +313,29 @@ void MenuGUI :: logic_self(Freq::Time t)
315
313
);
316
314
317
315
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);
323
339
}
324
340
325
341
for (int idx = m_Offset; idx <= endpoint; ++idx)
@@ -333,35 +349,47 @@ void MenuGUI :: logic_self(Freq::Time t)
333
349
auto && opt = m_pContext->state ().m_Menu ->options ().at (idx);
334
350
335
351
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();
341
357
}
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 (
347
367
-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
+ ));
350
371
Color c;
351
372
if (m_pContext->state ().m_Highlighted == idx)
352
373
c = Color (m_HighlightColor, 1 .0f * fade);
353
374
else
354
375
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 (
356
378
-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);
360
388
361
389
spacing += spacing_increase;
362
390
// ++idx;
363
391
}
364
- m_pCanvas->refresh ();
392
+ // m_pCanvas->refresh();
365
393
}
366
394
367
395
void MenuGUI :: refresh()
0 commit comments