@@ -65,6 +65,7 @@ struct empire_window : public autoconfig_window_t<empire_window> {
65
65
int selected_city = 1 ;
66
66
vec2i min_pos, max_pos;
67
67
vec2i draw_offset;
68
+ vec2i last_mouse_pos;
68
69
int is_scrolling;
69
70
int finished_scroll;
70
71
int trade_column_spacing;
@@ -81,6 +82,7 @@ struct empire_window : public autoconfig_window_t<empire_window> {
81
82
image_desc image, bottom_image, horizontal_bar,
82
83
vertical_bar, cross_bar, trade_amount,
83
84
closed_trade_route_hl, open_trade_route, open_trade_route_hl;
85
+ xstring hovered_object_tooltip;
84
86
// svector<object_trade_info, 16> buying_goods;
85
87
// svector<object_trade_info, 16> selling_goods;
86
88
@@ -132,6 +134,7 @@ struct empire_window : public autoconfig_window_t<empire_window> {
132
134
void draw_city_info (const empire_object *object);
133
135
void draw_trade_resource (e_resource resource, int trade_now, int trade_max, vec2i offset, e_font font);
134
136
void draw_trade_route (int route_id, e_empire_route_state effect);
137
+ void draw_object_tooltip ();
135
138
};
136
139
137
140
empire_window g_empire_window;
@@ -424,6 +427,7 @@ int empire_window::ui_handle_mouse(const mouse *m) {
424
427
const hotkeys *h = hotkey_state ();
425
428
426
429
vec2i position;
430
+ last_mouse_pos = { m->x , m->y };
427
431
if (scroll_get_delta (m, &position, SCROLL_TYPE_EMPIRE)) {
428
432
g_empire_map.scroll_map (position);
429
433
}
@@ -479,6 +483,7 @@ void empire_window::draw_empire_object(const empire_object* obj) {
479
483
480
484
vec2i pos;
481
485
int image_id;
486
+ pcstr tooltip_text = " " ;
482
487
if (scenario_empire_is_expanded ()) {
483
488
pos = obj->expanded .pos ;
484
489
image_id = obj->expanded .image_id ;
@@ -510,17 +515,21 @@ void empire_window::draw_empire_object(const empire_object* obj) {
510
515
int letter_height = get_letter_height ((const uint8_t *)" H" , FONT_SMALL_PLAIN);
511
516
vec2i text_pos = draw_offset + pos + vec2i{0 , -letter_height};
512
517
518
+ tooltip_text = ui::str (text_group, city->name_id );
519
+
513
520
switch (obj->text_align ) {
514
- case 0 : ui::label_colored (ui::str (text_group, city-> name_id ) , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
515
- case 1 : ui::label_colored (ui::str (text_group, city-> name_id ) , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
516
- case 2 : ui::label_colored (ui::str (text_group, city-> name_id ) , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
517
- case 3 : ui::label_colored (ui::str (text_group, city-> name_id ) , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
521
+ case 0 : ui::label_colored (tooltip_text , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
522
+ case 1 : ui::label_colored (tooltip_text , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
523
+ case 2 : ui::label_colored (tooltip_text , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
524
+ case 3 : ui::label_colored (tooltip_text , text_pos, FONT_SMALL_PLAIN, COLOR_FONT_DARK_RED, obj->width ); break ;
518
525
}
526
+
519
527
} else if (obj->type == EMPIRE_OBJECT_TEXT) {
520
528
const full_empire_object* full = empire_get_full_object (obj->id );
521
529
vec2i text_pos = draw_offset + pos;
522
530
523
- ui::label_colored (ui::str (196 , full->city_name_id ), text_pos - vec2i{5 , 0 }, FONT_SMALL_PLAIN, COLOR_FONT_SHITTY_BROWN, 100 );
531
+ tooltip_text = ui::str (196 , full->city_name_id );
532
+ ui::label_colored (tooltip_text, text_pos - vec2i{5 , 0 }, FONT_SMALL_PLAIN, COLOR_FONT_SHITTY_BROWN, 100 );
524
533
return ;
525
534
}
526
535
@@ -544,32 +553,37 @@ void empire_window::draw_empire_object(const empire_object* obj) {
544
553
}
545
554
546
555
image_id = image_id_remap (image_id);
547
- const image_t *img = ui::eimage (image_id, draw_offset + pos);
556
+ const vec2i draw_pos = draw_offset + pos;
557
+ const image_t *img = ui::eimage (image_id, draw_pos);
558
+
559
+ if (last_mouse_pos.x > draw_pos.x && last_mouse_pos.y > draw_pos.y
560
+ && last_mouse_pos.x < draw_pos.x + img->width && last_mouse_pos.y < draw_pos.y + img->height ) {
561
+ hovered_object_tooltip = tooltip_text;
562
+ }
548
563
549
564
if (img && img->animation .speed_id ) {
550
565
int new_animation = empire_object_update_animation (obj, image_id);
551
- ui::eimage ({ PACK_GENERAL, image_id + new_animation }, draw_offset + pos + img->animation .sprite_offset );
566
+ ui::eimage ({ PACK_GENERAL, image_id + new_animation }, draw_pos + img->animation .sprite_offset );
552
567
}
553
568
}
554
569
555
570
void empire_window::draw_map () {
556
- painter ctx = game.painter ();
557
-
558
571
graphics_set_clip_rectangle (min_pos + start_pos, vec2i{max_pos - min_pos} - finish_pos);
559
572
560
573
g_empire_map.set_viewport (max_pos - min_pos - finish_pos);
561
574
562
575
draw_offset = min_pos + start_pos;
563
576
draw_offset = g_empire_map.adjust_scroll (draw_offset);
577
+ hovered_object_tooltip = " " ;
564
578
565
- ImageDraw::img_generic (ctx, image_group ( image) , draw_offset);
579
+ ui::eimage ( image, draw_offset);
566
580
567
581
empire_object_foreach ([this ] (const empire_object *obj) {
568
582
draw_empire_object (obj);
569
583
});
570
584
571
585
scenario_invasion_foreach_warning ([&] (vec2i pos, int image_id) {
572
- ImageDraw::img_generic (ctx, image_id, draw_offset + pos);
586
+ ui::eimage ( image_id, draw_offset + pos);
573
587
});
574
588
575
589
graphics_reset_clip_rectangle ();
@@ -682,49 +696,15 @@ void empire_window::ui_draw_foreground() {
682
696
ui.draw ();
683
697
684
698
draw_object_info ();
699
+ draw_object_tooltip ();
685
700
686
701
ui.end_widget ();
687
702
}
688
703
689
- static void get_tooltip_trade_route_type (tooltip_context* c) {
690
- // auto &data = g_empire_window;
691
- // int selected_object = g_empire_map.selected_object();
692
- // if (!selected_object || empire_object_get(selected_object - 1)->type != EMPIRE_OBJECT_CITY)
693
- // return;
694
- //
695
- // data.selected_city = g_empire.get_city_for_object(selected_object - 1);
696
- // const empire_city* city = g_empire.city(data.selected_city);
697
- // if (city->type != EMPIRE_CITY_PHARAOH || city->is_open)
698
- // return;
699
- //
700
- // int x_offset = (data.min_pos.x + data.max_pos.x + 300) / 2;
701
- // int y_offset = data.max_pos.y - 41;
702
- // int y_offset_max = y_offset + 22 - 2 * city->is_sea_trade;
703
- // if (c->mpos.x >= x_offset && c->mpos.x < x_offset + 32 && c->mpos.y >= y_offset && c->mpos.y < y_offset_max) {
704
- // c->type = TOOLTIP_BUTTON;
705
- // c->text.group = 44;
706
- // c->text.id = 28 + city->is_sea_trade;
707
- // }
708
- }
709
-
710
- static void window_empire_get_tooltip (tooltip_context* c) {
711
- // auto &data = g_empire_window;
712
- // if (data.focus_button_id) {
713
- // c->type = TOOLTIP_BUTTON;
714
- // switch (data.focus_button_id) {
715
- // case 1:
716
- // c->text.id = 1;
717
- // break;
718
- // case 2:
719
- // c->text.id = 2;
720
- // break;
721
- // case 3:
722
- // c->text.id = 70;
723
- // break;
724
- // }
725
- // } else {
726
- // get_tooltip_trade_route_type(c);
727
- // }
704
+ void empire_window::draw_object_tooltip () {
705
+ if (!!hovered_object_tooltip) {
706
+ ui::set_tooltip (hovered_object_tooltip);
707
+ }
728
708
}
729
709
730
710
void window_empire_show () {
@@ -733,7 +713,7 @@ void window_empire_show() {
733
713
[] { g_empire_window.draw_background (); },
734
714
[] { g_empire_window.ui_draw_foreground (); },
735
715
[] (const mouse *m, const hotkeys *h) { g_empire_window.ui_handle_mouse (m); },
736
- window_empire_get_tooltip
716
+ nullptr
737
717
};
738
718
739
719
g_empire_window.init ();
0 commit comments