Freeciv-3.3: /fast/freeciv/nightly/main/client/gui-gtk-3.22/mapctrl.c Source File

Freeciv-3.3

Loading...
Searching...
No Matches
mapctrl.c
Go to the documentation of this file.
1/***********************************************************************
2 Freeciv - Copyright (C) 1996 - A Kjeldberg, L Gregersen, P Unold
3 This program is free software; you can redistribute it and/or modify
4 it under the terms of the GNU General Public License as published by
5 the Free Software Foundation; either version 2, or (at your option)
6 any later version.
7
8 This program is distributed in the hope that it will be useful,
9 but WITHOUT ANY WARRANTY; without even the implied warranty of
10 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 GNU General Public License for more details.
12***********************************************************************/
13
14#ifdef HAVE_CONFIG_H
15#include <fc_config.h>
16#endif
17
18#include <gtk/gtk.h>
19
20/* utility */
21#include "fcintl.h"
22#include "support.h"
23
24/* common */
25#include "combat.h"
26#include "game.h"
27#include "map.h"
28#include "player.h"
29#include "unit.h"
30
31#include "overview_common.h"
32
33/* client */
34#include "client_main.h"
35#include "climap.h"
36#include "climisc.h"
37#include "control.h"
38#include "editor.h"
39#include "tilespec.h"
40#include "text.h"
41#include "zoom.h"
42
43/* client/agents */
44#include "cma_core.h"
45
46/* client/gui-gtk-3.22 */
47#include "chatline.h"
48#include "citydlg.h"
49#include "colors.h"
50#include "dialogs.h"
51#include "editgui.h"
52#include "graphics.h"
53#include "gui_main.h"
54#include "infradlg.h"
55#include "inputdlg.h"
56#include "mapview.h"
57#include "menu.h"
58#include "rallypointdlg.h"
59
60#include "mapctrl.h"
61
62 struct tmousepos { int x, y; };
63 extern gint cur_x, cur_y;
64
65/**********************************************************************/
68 static gboolean popit_button_release(GtkWidget *w, GdkEventButton *ev)
69{
70 gtk_grab_remove(w);
71 gdk_seat_ungrab(gdk_device_get_seat(ev->device));
72 gtk_widget_destroy(w);
73
74 return FALSE;
75}
76
77/**********************************************************************/
83 static void popupinfo_positioning_callback(GtkWidget *w, GtkAllocation *alloc,
84 gpointer data)
85{
86 struct tmousepos *mousepos = data;
87 float x, y;
88 struct tile *ptile;
89
90 ptile = canvas_pos_to_tile(mousepos->x, mousepos->y, map_zoom);
91 if (tile_to_canvas_pos(&x, &y, map_zoom, ptile)) {
92 gint minx, miny, maxy;
93
94 gdk_window_get_origin(gtk_widget_get_window(map_canvas), &minx, &miny);
95 maxy = miny + gtk_widget_get_allocated_height(map_canvas);
96
97 if (x > mapview.width / 2) {
98 /* right part of the map */
99 x += minx;
100 y += miny + (tileset_tile_height(tileset) - alloc->height)/2;
101
102 y = CLIP(miny, y, maxy - alloc->height);
103
104 gtk_window_move(GTK_WINDOW(w), x - alloc->width, y);
105 } else {
106 /* left part of the map */
107 x += minx + tileset_tile_width(tileset);
108 y += miny + (tileset_tile_height(tileset) - alloc->height)/2;
109
110 y = CLIP(miny, y, maxy - alloc->height);
111
112 gtk_window_move(GTK_WINDOW(w), x, y);
113 }
114 }
115}
116
117/**********************************************************************/
121 static void popit(GdkEventButton *ev, struct tile *ptile)
122{
123 GtkWidget *p;
124 static struct tmousepos mousepos;
125 struct unit *punit;
126
127 if (TILE_UNKNOWN != client_tile_get_known(ptile)) {
128 p = gtk_window_new(GTK_WINDOW_POPUP);
129 gtk_container_set_border_width(GTK_CONTAINER(p), 4);
130 gtk_window_set_transient_for(GTK_WINDOW(p), GTK_WINDOW(toplevel));
131 gtk_container_add(GTK_CONTAINER(p), gtk_label_new(popup_info_text(ptile)));
132
133 punit = find_visible_unit(ptile);
134
135 if (punit) {
136 mapdeco_set_gotoroute(punit);
137 if (punit->goto_tile) {
138 mapdeco_set_crosshair(punit->goto_tile, TRUE);
139 }
140 }
141 mapdeco_set_crosshair(ptile, TRUE);
142
143 g_signal_connect(p, "destroy",
144 G_CALLBACK(popupinfo_popdown_callback), NULL);
145
146 mousepos.x = ev->x;
147 mousepos.y = ev->y;
148
149 g_signal_connect(p, "size-allocate",
150 G_CALLBACK(popupinfo_positioning_callback),
151 &mousepos);
152
153 gtk_widget_show_all(p);
154 gdk_seat_grab(gdk_device_get_seat(ev->device), gtk_widget_get_window(p),
155 GDK_SEAT_CAPABILITY_ALL_POINTING,
156 TRUE, NULL, (GdkEvent *)ev, NULL, NULL);
157 gtk_grab_add(p);
158
159 g_signal_connect_after(p, "button_release_event",
160 G_CALLBACK(popit_button_release), NULL);
161 }
162}
163
164/**********************************************************************/
167 void popupinfo_popdown_callback(GtkWidget *w, gpointer data)
168{
169 mapdeco_clear_crosshairs();
170 mapdeco_clear_gotoroutes();
171}
172
173/**********************************************************************/
176 static void name_new_city_popup_callback(gpointer data, gint response,
177 const char *input)
178{
179 int idx = GPOINTER_TO_INT(data);
180
181 switch (response) {
182 case GTK_RESPONSE_OK:
183 finish_city(index_to_tile(&(wld.map), idx), input);
184 break;
185 case GTK_RESPONSE_CANCEL:
186 case GTK_RESPONSE_DELETE_EVENT:
187 cancel_city(index_to_tile(&(wld.map), idx));
188 break;
189 }
190}
191
192/**********************************************************************/
197 void popup_newcity_dialog(struct unit *punit, const char *suggestname)
198{
199 input_dialog_create(GTK_WINDOW(toplevel), /*"shellnewcityname" */
200 _("Build New City"),
201 _("What should we call our new city?"), suggestname,
202 name_new_city_popup_callback,
203 GINT_TO_POINTER(tile_index(unit_tile(punit))));
204}
205
206/**********************************************************************/
210 void set_turn_done_button_state(bool state)
211{
212 gtk_widget_set_sensitive(turn_done_button, state);
213
214 update_turn_done_tooltip();
215}
216
217/**********************************************************************/
221 gboolean butt_release_mapcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
222{
223 if (editor_is_active()) {
224 return handle_edit_mouse_button_release(ev);
225 }
226
227 if (ev->button == 1 || ev->button == 3) {
228 release_goto_button(ev->x, ev->y);
229 }
230 if (ev->button == 3 && (rbutton_down || hover_state != HOVER_NONE)) {
231 release_right_button(ev->x, ev->y,
232 (ev->state & GDK_SHIFT_MASK) != 0);
233 }
234
235 return TRUE;
236}
237
238/**********************************************************************/
242 gboolean butt_down_mapcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
243{
244 struct city *pcity = NULL;
245 struct tile *ptile = NULL;
246
247 if (editor_is_active()) {
248 return handle_edit_mouse_button_press(ev);
249 }
250
251 if (!can_client_change_view()) {
252 return TRUE;
253 }
254
255 gtk_widget_grab_focus(map_canvas);
256 ptile = canvas_pos_to_tile(ev->x, ev->y, mouse_zoom);
257 pcity = ptile ? tile_city(ptile) : NULL;
258
259 switch (ev->button) {
260
261 case 1: /* LEFT mouse button */
262
263 /* <SHIFT> + <CONTROL> + LMB : Adjust workers. */
264 if ((ev->state & GDK_SHIFT_MASK) && (ev->state & GDK_CONTROL_MASK)) {
265 adjust_workers_button_pressed(ev->x, ev->y);
266 } else if (ev->state & GDK_CONTROL_MASK) {
267 /* <CONTROL> + LMB : Quickselect a sea unit. */
268 action_button_pressed(ev->x, ev->y, SELECT_SEA);
269 } else if (ptile && (ev->state & GDK_SHIFT_MASK)) {
270 /* <SHIFT> + LMB: Append focus unit. */
271 action_button_pressed(ev->x, ev->y, SELECT_APPEND);
272 } else if (ptile && (ev->state & GDK_MOD1_MASK)) {
273 /* <ALT> + LMB: popit (same as middle-click) */
274 /* FIXME: we need a general mechanism for letting freeciv work with
275 * 1- or 2-button mice. */
276 popit(ev, ptile);
277 } else if (tiles_hilited_cities) {
278 /* LMB in Area Selection mode. */
279 if (ptile) {
280 toggle_tile_hilite(ptile);
281 }
282 } else if (rally_set_tile(ptile)) {
283 /* Nothing here, rally_set_tile() already did what we wanted */
284 } else if (infra_placement_mode()) {
285 infra_placement_set_tile(ptile);
286 } else {
287 /* Plain LMB click. */
288 action_button_pressed(ev->x, ev->y, SELECT_POPUP);
289 }
290 break;
291
292 case 2: /* MIDDLE mouse button */
293
294 /* <CONTROL> + MMB: Wake up sentries. */
295 if (ev->state & GDK_CONTROL_MASK) {
296 wakeup_button_pressed(ev->x, ev->y);
297 } else if (ptile) {
298 /* Plain Middle click. */
299 popit(ev, ptile);
300 }
301 break;
302
303 case 3: /* RIGHT mouse button */
304
305 /* <CONTROL> + <ALT> + RMB : insert city or tile chat link. */
306 /* <CONTROL> + <ALT> + <SHIFT> + RMB : insert unit chat link. */
307 if (ptile && (ev->state & GDK_MOD1_MASK)
308 && (ev->state & GDK_CONTROL_MASK)) {
309 inputline_make_chat_link(ptile, (ev->state & GDK_SHIFT_MASK) != 0);
310 } else if ((ev->state & GDK_SHIFT_MASK) && (ev->state & GDK_MOD1_MASK)) {
311 /* <SHIFT> + <ALT> + RMB : Show/hide workers. */
312 key_city_overlay(ev->x, ev->y);
313 } else if ((ev->state & GDK_SHIFT_MASK) && (ev->state & GDK_CONTROL_MASK)
314 && pcity != NULL) {
315 /* <SHIFT + CONTROL> + RMB: Paste Production. */
316 clipboard_paste_production(pcity);
317 cancel_tile_hiliting();
318 } else if (ev->state & GDK_SHIFT_MASK
319 && clipboard_copy_production(ptile)) {
320 /* <SHIFT> + RMB on city/unit: Copy Production. */
321 /* If nothing to copy, fall through to rectangle selection. */
322
323 /* Already done the copy */
324 } else if (ev->state & GDK_CONTROL_MASK) {
325 /* <CONTROL> + RMB : Quickselect a land unit. */
326 action_button_pressed(ev->x, ev->y, SELECT_LAND);
327 } else {
328 /* Plain RMB click. Area selection. */
329 /* A foolproof user will depress button on canvas,
330 * release it on another widget, and return to canvas
331 * to find rectangle still active.
332 */
333 if (rectangle_active) {
334 release_right_button(ev->x, ev->y,
335 (ev->state & GDK_SHIFT_MASK) != 0);
336 return TRUE;
337 }
338 if (hover_state == HOVER_NONE) {
339 anchor_selection_rectangle(ev->x, ev->y);
340 rbutton_down = TRUE; /* causes rectangle updates */
341 }
342 }
343 break;
344
345 default:
346 break;
347 }
348
349 return TRUE;
350}
351
352/**********************************************************************/
355 void create_line_at_mouse_pos(void)
356{
357 int x, y;
358 GdkSeat *seat = gdk_display_get_default_seat(gtk_widget_get_display(toplevel));
359 GdkDevice *pointer = gdk_seat_get_pointer(seat);
360 GdkWindow *window;
361
362 if (!pointer) {
363 return;
364 }
365
366 window = gdk_device_get_window_at_position(pointer, &x, &y);
367 if (window) {
368 if (window == gtk_widget_get_window(map_canvas)) {
369 update_line(x, y);
370 } else if (window == gtk_widget_get_window(overview_canvas)) {
371 overview_update_line(x, y);
372 }
373 }
374}
375
376/**********************************************************************/
380 void update_rect_at_mouse_pos(void)
381{
382 int x, y;
383 GdkWindow *window;
384 GdkDevice *pointer;
385 GdkModifierType mask;
386 GdkSeat *seat = gdk_display_get_default_seat(gtk_widget_get_display(toplevel));
387
388 pointer = gdk_seat_get_pointer(seat);
389 if (!pointer) {
390 return;
391 }
392
393 window = gdk_device_get_window_at_position(pointer, &x, &y);
394 if (window && window == gtk_widget_get_window(map_canvas)) {
395 gdk_device_get_state(pointer, window, NULL, &mask);
396 if (mask & GDK_BUTTON3_MASK) {
397 update_selection_rectangle(x, y);
398 }
399 }
400}
401
402/**********************************************************************/
406 gboolean move_mapcanvas(GtkWidget *w, GdkEventMotion *ev, gpointer data)
407{
408 if (GUI_GTK_OPTION(mouse_over_map_focus)
409 && !gtk_widget_has_focus(map_canvas)) {
410 gtk_widget_grab_focus(map_canvas);
411 }
412
413 if (editor_is_active()) {
414 return handle_edit_mouse_move(ev);
415 }
416
417 cur_x = ev->x;
418 cur_y = ev->y;
419 update_line(ev->x, ev->y);
420 if (rbutton_down && (ev->state & GDK_BUTTON3_MASK)) {
421 update_selection_rectangle(ev->x, ev->y);
422 }
423
424 if (keyboardless_goto_button_down && hover_state == HOVER_NONE) {
425 maybe_activate_keyboardless_goto(ev->x, ev->y);
426 }
427 control_mouse_cursor(canvas_pos_to_tile(ev->x, ev->y, mouse_zoom));
428
429 return TRUE;
430}
431
432/**********************************************************************/
435 gboolean leave_mapcanvas(GtkWidget *widget, GdkEventCrossing *event)
436{
437 if (gtk_notebook_get_current_page(GTK_NOTEBOOK(top_notebook))
438 != gtk_notebook_page_num(GTK_NOTEBOOK(top_notebook), map_widget)) {
439 /* Map is not currently topmost tab. Do not use tile specific cursors. */
440 update_mouse_cursor(CURSOR_DEFAULT);
441 return TRUE;
442 }
443
444 /* Bizarrely, this function can be called even when we don't "leave"
445 * the map canvas, for instance, it gets called any time the mouse is
446 * clicked. */
447 if (!map_is_empty()
448 && event->x >= 0 && event->y >= 0
449 && event->x < mapview.width && event->y < mapview.height) {
450 control_mouse_cursor(canvas_pos_to_tile(event->x, event->y,
451 mouse_zoom));
452 } else {
453 update_mouse_cursor(CURSOR_DEFAULT);
454 }
455
456 update_unit_info_label(get_units_in_focus());
457 return TRUE;
458}
459
460/**********************************************************************/
463 gboolean move_overviewcanvas(GtkWidget *w, GdkEventMotion *ev, gpointer data)
464{
465 overview_update_line(ev->x, ev->y);
466
467 return TRUE;
468}
469
470/**********************************************************************/
473 gboolean butt_down_overviewcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
474{
475 int xtile, ytile;
476
477 if (ev->type != GDK_BUTTON_PRESS) {
478 return TRUE; /* Double-clicks? Triple-clicks? No thanks! */
479 }
480
481 overview_to_map_pos(&xtile, &ytile, ev->x, ev->y);
482
483 if (can_client_change_view() && (ev->button == 3)) {
484 center_tile_mapcanvas(map_pos_to_tile(&(wld.map), xtile, ytile));
485 } else if (can_client_issue_orders() && (ev->button == 1)) {
486 do_map_click(map_pos_to_tile(&(wld.map), xtile, ytile),
487 (ev->state & GDK_SHIFT_MASK) ? SELECT_APPEND : SELECT_POPUP);
488 }
489
490 return TRUE;
491}
492
493/**********************************************************************/
496 void center_on_unit(void)
497{
498 request_center_focus_unit();
499}
can_client_issue_orders
bool can_client_issue_orders(void)
Definition client_main.c:1264
can_client_change_view
bool can_client_change_view(void)
Definition client_main.c:1312
client_main.h
client_tile_get_known
enum known_type client_tile_get_known(const struct tile *ptile)
Definition climap.c:36
climap.h
climisc.h
cma_core.h
combat.h
incite_cost
char * incite_cost
Definition comments.c:74
do_map_click
void do_map_click(struct tile *ptile, enum quickselect_type qtype)
Definition control.c:2880
get_units_in_focus
struct unit_list * get_units_in_focus(void)
Definition control.c:177
request_center_focus_unit
void request_center_focus_unit(void)
Definition control.c:2721
hover_state
enum cursor_hover_state hover_state
Definition control.c:89
finish_city
void finish_city(struct tile *ptile, const char *name)
Definition control.c:4062
find_visible_unit
struct unit * find_visible_unit(struct tile *ptile)
Definition control.c:804
control_mouse_cursor
void control_mouse_cursor(struct tile *ptile)
Definition control.c:1189
cancel_city
void cancel_city(struct tile *ptile)
Definition control.c:4081
control.h
SELECT_LAND
@ SELECT_LAND
Definition control.h:38
SELECT_APPEND
@ SELECT_APPEND
Definition control.h:38
SELECT_SEA
@ SELECT_SEA
Definition control.h:38
SELECT_POPUP
@ SELECT_POPUP
Definition control.h:38
HOVER_NONE
@ HOVER_NONE
Definition control.h:26
punit
struct unit struct city struct unit struct tile struct extra_type const struct act_prob *act_probs int actor_unit_id struct unit struct unit * punit
Definition dialogs_g.h:74
editor_is_active
bool editor_is_active(void)
Definition editor.c:346
editor.h
event
enum event_type event
Definition events.c:81
fcintl.h
_
#define _(String)
Definition fcintl.h:67
wld
struct world wld
Definition game.c:63
game.h
inputline_make_chat_link
void inputline_make_chat_link(struct tile *ptile, bool unit)
Definition chatline.c:475
handle_edit_mouse_button_release
gboolean handle_edit_mouse_button_release(GdkEventButton *ev)
Definition editgui.c:956
handle_edit_mouse_button_press
gboolean handle_edit_mouse_button_press(GdkEventButton *ev)
Definition editgui.c:940
handle_edit_mouse_move
gboolean handle_edit_mouse_move(GdkEventMotion *ev)
Definition editgui.c:971
top_notebook
GtkWidget * top_notebook
Definition gui_main.c:129
turn_done_button
GtkWidget * turn_done_button
Definition gui_main.c:149
overview_canvas
GtkWidget * overview_canvas
Definition gui_main.c:111
toplevel
GtkWidget * toplevel
Definition gui_main.c:125
map_canvas
GtkWidget * map_canvas
Definition gui_main.c:107
map_widget
GtkWidget * map_widget
Definition gui_main.c:130
update_turn_done_tooltip
void update_turn_done_tooltip(void)
Definition gui_main.c:1130
GUI_GTK_OPTION
#define GUI_GTK_OPTION(optname)
Definition gui_main.h:25
infra_placement_mode
bool infra_placement_mode(void)
Definition infradlg.c:155
infra_placement_set_tile
void infra_placement_set_tile(struct tile *ptile)
Definition infradlg.c:163
input_dialog_create
GtkWidget * input_dialog_create(GtkWindow *parent, const char *dialogname, const char *text, const char *postinputtest, input_dialog_callback_t response_callback, gpointer response_cli_data)
Definition inputdlg.c:66
butt_release_mapcanvas
gboolean butt_release_mapcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
Definition mapctrl.c:221
move_overviewcanvas
gboolean move_overviewcanvas(GtkWidget *w, GdkEventMotion *ev, gpointer data)
Definition mapctrl.c:463
butt_down_overviewcanvas
gboolean butt_down_overviewcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
Definition mapctrl.c:473
cur_y
gint cur_y
Definition mapctrl.c:63
popup_newcity_dialog
void popup_newcity_dialog(struct unit *punit, const char *suggestname)
Definition mapctrl.c:197
center_on_unit
void center_on_unit(void)
Definition mapctrl.c:496
create_line_at_mouse_pos
void create_line_at_mouse_pos(void)
Definition mapctrl.c:355
popit_button_release
static gboolean popit_button_release(GtkWidget *w, GdkEventButton *ev)
Definition mapctrl.c:68
butt_down_mapcanvas
gboolean butt_down_mapcanvas(GtkWidget *w, GdkEventButton *ev, gpointer data)
Definition mapctrl.c:242
move_mapcanvas
gboolean move_mapcanvas(GtkWidget *w, GdkEventMotion *ev, gpointer data)
Definition mapctrl.c:406
popit
static void popit(GdkEventButton *ev, struct tile *ptile)
Definition mapctrl.c:121
cur_x
gint cur_x
Definition gui_main.c:184
set_turn_done_button_state
void set_turn_done_button_state(bool state)
Definition mapctrl.c:210
leave_mapcanvas
gboolean leave_mapcanvas(GtkWidget *widget, GdkEventCrossing *event)
Definition mapctrl.c:435
popupinfo_positioning_callback
static void popupinfo_positioning_callback(GtkWidget *w, GtkAllocation *alloc, gpointer data)
Definition mapctrl.c:83
popupinfo_popdown_callback
void popupinfo_popdown_callback(GtkWidget *w, gpointer data)
Definition mapctrl.c:167
name_new_city_popup_callback
static void name_new_city_popup_callback(gpointer data, gint response, const char *input)
Definition mapctrl.c:176
update_rect_at_mouse_pos
void update_rect_at_mouse_pos(void)
Definition mapctrl.c:380
update_unit_info_label
void update_unit_info_label(struct unit_list *punits)
Definition mapview.c:275
update_mouse_cursor
void update_mouse_cursor(enum cursor_type new_cursor_type)
Definition mapview.c:257
rally_set_tile
bool rally_set_tile(struct tile *ptile)
Definition rallypointdlg.c:133
editgui.h
infradlg.h
inputdlg.h
rallypointdlg.h
chatline.h
citydlg.h
colors.h
dialogs.h
graphics.h
gui_main.h
mapctrl.h
mapview.h
menu.h
index_to_tile
struct tile * index_to_tile(const struct civ_map *imap, int mindex)
Definition map.c:462
map_pos_to_tile
struct tile * map_pos_to_tile(const struct civ_map *nmap, int map_x, int map_y)
Definition map.c:425
map_is_empty
bool map_is_empty(void)
Definition map.c:148
map.h
update_line
void update_line(int canvas_x, int canvas_y)
Definition mapctrl_common.c:665
maybe_activate_keyboardless_goto
void maybe_activate_keyboardless_goto(int canvas_x, int canvas_y)
Definition mapctrl_common.c:507
adjust_workers_button_pressed
void adjust_workers_button_pressed(int canvas_x, int canvas_y)
Definition mapctrl_common.c:597
rbutton_down
bool rbutton_down
Definition mapctrl_common.c:55
rectangle_active
bool rectangle_active
Definition mapctrl_common.c:56
release_goto_button
void release_goto_button(int canvas_x, int canvas_y)
Definition mapctrl_common.c:487
tiles_hilited_cities
bool tiles_hilited_cities
Definition mapctrl_common.c:60
action_button_pressed
void action_button_pressed(int canvas_x, int canvas_y, enum quickselect_type qtype)
Definition mapctrl_common.c:570
wakeup_button_pressed
void wakeup_button_pressed(int canvas_x, int canvas_y)
Definition mapctrl_common.c:585
release_right_button
void release_right_button(int canvas_x, int canvas_y, bool shift)
Definition mapctrl_common.c:321
keyboardless_goto_button_down
bool keyboardless_goto_button_down
Definition mapctrl_common.c:69
key_city_overlay
void key_city_overlay(int canvas_x, int canvas_y)
Definition mapctrl_common.c:359
update_selection_rectangle
void update_selection_rectangle(float canvas_x, float canvas_y)
Definition mapctrl_common.c:201
overview_update_line
void overview_update_line(int overview_x, int overview_y)
Definition mapctrl_common.c:697
anchor_selection_rectangle
void anchor_selection_rectangle(int canvas_x, int canvas_y)
Definition mapctrl_common.c:87
cancel_tile_hiliting
void cancel_tile_hiliting(void)
Definition mapctrl_common.c:309
clipboard_paste_production
void clipboard_paste_production(struct city *pcity)
Definition mapctrl_common.c:424
clipboard_copy_production
bool clipboard_copy_production(struct tile *ptile)
Definition mapctrl_common.c:379
toggle_tile_hilite
void toggle_tile_hilite(struct tile *ptile)
Definition mapctrl_common.c:336
mapdeco_set_crosshair
void mapdeco_set_crosshair(const struct tile *ptile, bool crosshair)
Definition mapview_common.c:3362
mapview
struct view mapview
Definition mapview_common.c:75
canvas_pos_to_tile
struct tile * canvas_pos_to_tile(float canvas_x, float canvas_y, float zoom)
Definition mapview_common.c:763
mapdeco_set_gotoroute
void mapdeco_set_gotoroute(const struct unit *punit)
Definition mapview_common.c:3485
mapdeco_clear_gotoroutes
void mapdeco_clear_gotoroutes(void)
Definition mapview_common.c:3541
center_tile_mapcanvas
void center_tile_mapcanvas(const struct tile *ptile)
Definition mapview_common.c:1237
mapdeco_clear_crosshairs
void mapdeco_clear_crosshairs(void)
Definition mapview_common.c:3397
tile_to_canvas_pos
bool tile_to_canvas_pos(float *canvas_x, float *canvas_y, float zoom, const struct tile *ptile)
Definition mapview_common.c:706
overview_to_map_pos
void overview_to_map_pos(int *map_x, int *map_y, int overview_x, int overview_y)
Definition overview_common.c:358
overview_common.h
player.h
CLIP
#define CLIP(lower, current, upper)
Definition shared.h:57
mask
struct sprite int int int int struct sprite * mask
Definition sprite_g.h:32
y
struct sprite int int y
Definition sprite_g.h:31
x
struct sprite int x
Definition sprite_g.h:31
city
Definition city.h:320
tile
Definition tile.h:50
tileset
Definition tilespec.c:481
tmousepos
Definition mapctrl.c:62
tmousepos::x
int x
Definition mapctrl.c:62
tmousepos::y
int y
Definition mapctrl.c:62
unit
Definition unit.h:140
unit::goto_tile
struct tile * goto_tile
Definition unit.h:157
view::height
int height
Definition mapview_common.h:38
view::width
int width
Definition mapview_common.h:38
widget
Definition widget.h:112
world::map
struct civ_map map
Definition world_object.h:38
support.h
TRUE
#define TRUE
Definition support.h:46
FALSE
#define FALSE
Definition support.h:47
popup_info_text
const char * popup_info_text(struct tile *ptile)
Definition text.c:147
text.h
tile_city
struct city * tile_city(const struct tile *ptile)
Definition tile.c:83
tile_index
#define tile_index(_pt_)
Definition tile.h:89
TILE_UNKNOWN
@ TILE_UNKNOWN
Definition tile.h:36
tileset_tile_height
int tileset_tile_height(const struct tileset *t)
Definition tilespec.c:765
tileset_tile_width
int tileset_tile_width(const struct tileset *t)
Definition tilespec.c:753
tilespec.h
CURSOR_DEFAULT
@ CURSOR_DEFAULT
Definition tilespec.h:302
unit.h
unit_tile
#define unit_tile(_pu)
Definition unit.h:397
mouse_zoom
float mouse_zoom
Definition zoom.c:28
map_zoom
float map_zoom
Definition zoom.c:25
zoom.h