src/smallmap_gui.cpp
branchnoai
changeset 9694 e72987579514
parent 9686 d3c195c226f9
child 9701 d1ac22c62f64
equal deleted inserted replaced
9693:31fcaa5375a1 9694:e72987579514
    28 #include "variables.h"
    28 #include "variables.h"
    29 #include "blitter/factory.hpp"
    29 #include "blitter/factory.hpp"
    30 
    30 
    31 static const Widget _smallmap_widgets[] = {
    31 static const Widget _smallmap_widgets[] = {
    32 {  WWT_CLOSEBOX,   RESIZE_NONE,    13,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
    32 {  WWT_CLOSEBOX,   RESIZE_NONE,    13,     0,    10,     0,    13, STR_00C5,                STR_018B_CLOSE_WINDOW},
    33 {   WWT_CAPTION,  RESIZE_RIGHT,    13,    11,   433,     0,    13, STR_00B0_MAP,            STR_018C_WINDOW_TITLE_DRAG_THIS},
    33 {   WWT_CAPTION,  RESIZE_RIGHT,    13,    11,   337,     0,    13, STR_00B0_MAP,            STR_018C_WINDOW_TITLE_DRAG_THIS},
    34 { WWT_STICKYBOX,     RESIZE_LR,    13,   434,   445,     0,    13, 0x0,                     STR_STICKY_BUTTON},
    34 { WWT_STICKYBOX,     RESIZE_LR,    13,   338,   349,     0,    13, 0x0,                     STR_STICKY_BUTTON},
    35 {     WWT_PANEL,     RESIZE_RB,    13,     0,   445,    14,   257, 0x0,                     STR_NULL},
    35 {     WWT_PANEL,     RESIZE_RB,    13,     0,   349,    14,   157, 0x0,                     STR_NULL},
    36 {     WWT_INSET,     RESIZE_RB,    13,     2,   443,    16,   255, 0x0,                     STR_NULL},
    36 {     WWT_INSET,     RESIZE_RB,    13,     2,   347,    16,   155, 0x0,                     STR_NULL},
    37 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   380,   401,   258,   279, SPR_IMG_SHOW_COUNTOURS,  STR_0191_SHOW_LAND_CONTOURS_ON_MAP},
    37 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   284,   305,   158,   179, SPR_IMG_SHOW_COUNTOURS,  STR_0191_SHOW_LAND_CONTOURS_ON_MAP},
    38 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   402,   423,   258,   279, SPR_IMG_SHOW_VEHICLES,   STR_0192_SHOW_VEHICLES_ON_MAP},
    38 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   306,   327,   158,   179, SPR_IMG_SHOW_VEHICLES,   STR_0192_SHOW_VEHICLES_ON_MAP},
    39 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   424,   445,   258,   279, SPR_IMG_INDUSTRY,        STR_0193_SHOW_INDUSTRIES_ON_MAP},
    39 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   328,   349,   158,   179, SPR_IMG_INDUSTRY,        STR_0193_SHOW_INDUSTRIES_ON_MAP},
    40 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   380,   401,   280,   301, SPR_IMG_SHOW_ROUTES,     STR_0194_SHOW_TRANSPORT_ROUTES_ON},
    40 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   284,   307,   180,   201, SPR_IMG_SHOW_ROUTES,     STR_0194_SHOW_TRANSPORT_ROUTES_ON},
    41 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   402,   423,   280,   301, SPR_IMG_PLANTTREES,      STR_0195_SHOW_VEGETATION_ON_MAP},
    41 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   306,   327,   180,   201, SPR_IMG_PLANTTREES,      STR_0195_SHOW_VEGETATION_ON_MAP},
    42 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   424,   445,   280,   301, SPR_IMG_COMPANY_GENERAL, STR_0196_SHOW_LAND_OWNERS_ON_MAP},
    42 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   328,   349,   180,   201, SPR_IMG_COMPANY_GENERAL, STR_0196_SHOW_LAND_OWNERS_ON_MAP},
    43 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   358,   379,   258,   279, SPR_IMG_SMALLMAP,        STR_SMALLMAP_CENTER},
    43 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   262,   283,   158,   179, SPR_IMG_SMALLMAP,        STR_SMALLMAP_CENTER},
    44 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   358,   379,   280,   301, SPR_IMG_TOWN,            STR_0197_TOGGLE_TOWN_NAMES_ON_OFF},
    44 {    WWT_IMGBTN,   RESIZE_LRTB,    13,   262,   283,   180,   201, SPR_IMG_TOWN,            STR_0197_TOGGLE_TOWN_NAMES_ON_OFF},
    45 {     WWT_PANEL,    RESIZE_RTB,    13,     0,   357,   258,   301, 0x0,                     STR_NULL},
    45 {     WWT_PANEL,    RESIZE_RTB,    13,     0,   261,   158,   201, 0x0,                     STR_NULL},
    46 {     WWT_PANEL,    RESIZE_RTB,    13,     0,   433,   302,   313, 0x0,                     STR_NULL},
    46 {     WWT_PANEL,    RESIZE_RTB,    13,     0,   337,   202,   213, 0x0,                     STR_NULL},
    47 { WWT_RESIZEBOX,   RESIZE_LRTB,    13,   434,   445,   302,   313, 0x0,                     STR_RESIZE_BUTTON},
    47 { WWT_RESIZEBOX,   RESIZE_LRTB,    13,   338,   349,   202,   213, 0x0,                     STR_RESIZE_BUTTON},
    48 {  WIDGETS_END},
    48 {  WIDGETS_END},
    49 };
    49 };
    50 
    50 
    51 static int _smallmap_type;
    51 static int _smallmap_type;
    52 static bool _smallmap_show_towns = true;
    52 static bool _smallmap_show_towns = true;
   191 	blitter->SetPixelIfEmpty(d, 3, 0, val8[3]);
   191 	blitter->SetPixelIfEmpty(d, 3, 0, val8[3]);
   192 }
   192 }
   193 
   193 
   194 #define MKCOLOR(x) TO_LE32X(x)
   194 #define MKCOLOR(x) TO_LE32X(x)
   195 
   195 
   196 /* Height encodings; 16 levels XXX - needs updating for more/finer heights! */
   196 /**
   197 static const uint32 _map_height_bits[16] = {
   197  * Height encodings; MAX_TILE_HEIGHT + 1 levels, from 0 to MAX_TILE_HEIGHT
       
   198  */
       
   199 static const uint32 _map_height_bits[] = {
   198 	MKCOLOR(0x5A5A5A5A),
   200 	MKCOLOR(0x5A5A5A5A),
   199 	MKCOLOR(0x5A5B5A5B),
   201 	MKCOLOR(0x5A5B5A5B),
   200 	MKCOLOR(0x5B5B5B5B),
   202 	MKCOLOR(0x5B5B5B5B),
   201 	MKCOLOR(0x5B5C5B5C),
   203 	MKCOLOR(0x5B5C5B5C),
   202 	MKCOLOR(0x5C5C5C5C),
   204 	MKCOLOR(0x5C5C5C5C),
   210 	MKCOLOR(0x1F1F1F1F),
   212 	MKCOLOR(0x1F1F1F1F),
   211 	MKCOLOR(0x1F271F27),
   213 	MKCOLOR(0x1F271F27),
   212 	MKCOLOR(0x27272727),
   214 	MKCOLOR(0x27272727),
   213 	MKCOLOR(0x27272727),
   215 	MKCOLOR(0x27272727),
   214 };
   216 };
       
   217 assert_compile(lengthof(_map_height_bits) == MAX_TILE_HEIGHT + 1);
   215 
   218 
   216 struct AndOr {
   219 struct AndOr {
   217 	uint32 mor;
   220 	uint32 mor;
   218 	uint32 mand;
   221 	uint32 mand;
   219 };
   222 };
   313 		} else {
   316 		} else {
   314 			tt = GetBridgeTransportType(tile);
   317 			tt = GetBridgeTransportType(tile);
   315 		}
   318 		}
   316 		switch (tt) {
   319 		switch (tt) {
   317 			case TRANSPORT_RAIL: t = MP_RAILWAY; break;
   320 			case TRANSPORT_RAIL: t = MP_RAILWAY; break;
   318 			case TRANSPORT_ROAD: t = MP_STREET;  break;
   321 			case TRANSPORT_ROAD: t = MP_ROAD;    break;
   319 			default:             t = MP_WATER;   break;
   322 			default:             t = MP_WATER;   break;
   320 		}
   323 		}
   321 	}
   324 	}
   322 	return t;
   325 	return t;
   323 }
   326 }
   907 		} break;
   910 		} break;
   908 	}
   911 	}
   909 }
   912 }
   910 
   913 
   911 static const WindowDesc _smallmap_desc = {
   914 static const WindowDesc _smallmap_desc = {
   912 	WDP_AUTO, WDP_AUTO, 446, 314,
   915 	WDP_AUTO, WDP_AUTO, 350, 214, 446, 314,
   913 	WC_SMALLMAP, WC_NONE,
   916 	WC_SMALLMAP, WC_NONE,
   914 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
   917 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_STICKY_BUTTON | WDF_RESIZABLE,
   915 	_smallmap_widgets,
   918 	_smallmap_widgets,
   916 	SmallMapWindowProc
   919 	SmallMapWindowProc
   917 };
   920 };
   923 	w = AllocateWindowDescFront(&_smallmap_desc, 0);
   926 	w = AllocateWindowDescFront(&_smallmap_desc, 0);
   924 	if (w == NULL) return;
   927 	if (w == NULL) return;
   925 
   928 
   926 	LowerWindowWidget(w, _smallmap_type + 5);
   929 	LowerWindowWidget(w, _smallmap_type + 5);
   927 	SetWindowWidgetLoweredState(w, 12, _smallmap_show_towns);
   930 	SetWindowWidgetLoweredState(w, 12, _smallmap_show_towns);
   928 	w->resize.width = 350;
       
   929 	w->resize.height = 250;
       
   930 
   931 
   931 	SmallMapCenterOnCurrentPos(w);
   932 	SmallMapCenterOnCurrentPos(w);
   932 }
   933 }
   933 
   934 
   934 /* Extra ViewPort Window Stuff */
   935 /* Extra ViewPort Window Stuff */
   935 static const Widget _extra_view_port_widgets[] = {
   936 static const Widget _extra_view_port_widgets[] = {
   936 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,     0,    13, STR_00C5,                         STR_018B_CLOSE_WINDOW},
   937 {   WWT_CLOSEBOX,   RESIZE_NONE,    14,     0,    10,    0,   13, STR_00C5,                         STR_018B_CLOSE_WINDOW},
   937 {    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   287,     0,    13, STR_EXTRA_VIEW_PORT_TITLE,        STR_018C_WINDOW_TITLE_DRAG_THIS},
   938 {    WWT_CAPTION,  RESIZE_RIGHT,    14,    11,   287,    0,   13, STR_EXTRA_VIEW_PORT_TITLE,        STR_018C_WINDOW_TITLE_DRAG_THIS},
   938 {  WWT_STICKYBOX,     RESIZE_LR,    14,   288,   299,     0,    13, 0x0,                              STR_STICKY_BUTTON},
   939 {  WWT_STICKYBOX,     RESIZE_LR,    14,   288,   299,    0,   13, 0x0,                              STR_STICKY_BUTTON},
   939 {      WWT_PANEL,     RESIZE_RB,    14,     0,   299,    14,   233, 0x0,                              STR_NULL},
   940 {      WWT_PANEL,     RESIZE_RB,    14,     0,   299,   14,   33, 0x0,                              STR_NULL},
   940 {      WWT_INSET,     RESIZE_RB,    14,     2,   297,    16,   231, 0x0,                              STR_NULL},
   941 {      WWT_INSET,     RESIZE_RB,    14,     2,   297,   16,   31, 0x0,                              STR_NULL},
   941 { WWT_PUSHIMGBTN,     RESIZE_TB,    14,     0,    21,   234,   255, SPR_IMG_ZOOMIN,                   STR_017F_ZOOM_THE_VIEW_IN},
   942 { WWT_PUSHIMGBTN,     RESIZE_TB,    14,     0,    21,   34,   55, SPR_IMG_ZOOMIN,                   STR_017F_ZOOM_THE_VIEW_IN},
   942 { WWT_PUSHIMGBTN,     RESIZE_TB,    14,    22,    43,   234,   255, SPR_IMG_ZOOMOUT,                  STR_0180_ZOOM_THE_VIEW_OUT},
   943 { WWT_PUSHIMGBTN,     RESIZE_TB,    14,    22,    43,   34,   55, SPR_IMG_ZOOMOUT,                  STR_0180_ZOOM_THE_VIEW_OUT},
   943 { WWT_PUSHTXTBTN,     RESIZE_TB,    14,    44,   171,   234,   255, STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW, STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT},
   944 { WWT_PUSHTXTBTN,     RESIZE_TB,    14,    44,   171,   34,   55, STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW, STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT},
   944 { WWT_PUSHTXTBTN,     RESIZE_TB,    14,   172,   298,   234,   255, STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN, STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT},
   945 { WWT_PUSHTXTBTN,     RESIZE_TB,    14,   172,   298,   34,   55, STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN, STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT},
   945 {      WWT_PANEL,    RESIZE_RTB,    14,   299,   299,   234,   255, 0x0,                              STR_NULL},
   946 {      WWT_PANEL,    RESIZE_RTB,    14,   299,   299,   34,   55, 0x0,                              STR_NULL},
   946 {      WWT_PANEL,    RESIZE_RTB,    14,     0,   287,   256,   267, 0x0,                              STR_NULL},
   947 {      WWT_PANEL,    RESIZE_RTB,    14,     0,   287,   56,   67, 0x0,                              STR_NULL},
   947 {  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   288,   299,   256,   267, 0x0,                              STR_RESIZE_BUTTON},
   948 {  WWT_RESIZEBOX,   RESIZE_LRTB,    14,   288,   299,   56,   67, 0x0,                              STR_RESIZE_BUTTON},
   948 {   WIDGETS_END},
   949 {   WIDGETS_END},
   949 };
   950 };
   950 
   951 
   951 static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
   952 static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
   952 {
   953 {
   953 	switch (e->event) {
   954 	switch (e->event) {
   954 	case WE_CREATE: /* Disable zoom in button */
   955 	case WE_CREATE: /* Disable zoom in button */
       
   956 		/* New viewport start at (zero,zero) */
       
   957 		AssignWindowViewport(w, 3, 17, w->widget[4].right - w->widget[4].left - 1, w->widget[4].bottom - w->widget[4].top - 1, 0, ZOOM_LVL_VIEWPORT);
       
   958 
   955 		DisableWindowWidget(w, 5);
   959 		DisableWindowWidget(w, 5);
   956 		break;
   960 		break;
   957 
   961 
   958 	case WE_PAINT:
   962 	case WE_PAINT:
   959 		// set the number in the title bar
   963 		// set the number in the title bar
  1022 			break;
  1026 			break;
  1023 	}
  1027 	}
  1024 }
  1028 }
  1025 
  1029 
  1026 static const WindowDesc _extra_view_port_desc = {
  1030 static const WindowDesc _extra_view_port_desc = {
  1027 	WDP_AUTO, WDP_AUTO, 300, 268,
  1031 	WDP_AUTO, WDP_AUTO, 300, 68, 300, 268,
  1028 	WC_EXTRA_VIEW_PORT, WC_NONE,
  1032 	WC_EXTRA_VIEW_PORT, WC_NONE,
  1029 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
  1033 	WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE,
  1030 	_extra_view_port_widgets,
  1034 	_extra_view_port_widgets,
  1031 	ExtraViewPortWndProc
  1035 	ExtraViewPortWndProc
  1032 };
  1036 };
  1042 	w = AllocateWindowDescFront(&_extra_view_port_desc, i);
  1046 	w = AllocateWindowDescFront(&_extra_view_port_desc, i);
  1043 	if (w != NULL) {
  1047 	if (w != NULL) {
  1044 		int x, y;
  1048 		int x, y;
  1045 		/* the main window with the main view */
  1049 		/* the main window with the main view */
  1046 		v = FindWindowById(WC_MAIN_WINDOW, 0);
  1050 		v = FindWindowById(WC_MAIN_WINDOW, 0);
  1047 		/* New viewport start ats (zero,zero) */
       
  1048 		AssignWindowViewport(w, 3, 17, 294, 214, 0 , ZOOM_LVL_VIEWPORT);
       
  1049 
  1051 
  1050 		/* center on same place as main window (zoom is maximum, no adjustment needed) */
  1052 		/* center on same place as main window (zoom is maximum, no adjustment needed) */
  1051 		x = WP(v, vp_d).scrollpos_x;
  1053 		x = WP(v, vp_d).scrollpos_x;
  1052 		y = WP(v, vp_d).scrollpos_y;
  1054 		y = WP(v, vp_d).scrollpos_y;
  1053 		WP(w, vp_d).scrollpos_x = x + (v->viewport->virtual_width  - (294)) / 2;
  1055 		WP(w, vp_d).scrollpos_x = x + (v->viewport->virtual_width  - (w->widget[4].right - w->widget[4].left) - 1) / 2;
  1054 		WP(w, vp_d).scrollpos_y = y + (v->viewport->virtual_height - (214)) / 2;
  1056 		WP(w, vp_d).scrollpos_y = y + (v->viewport->virtual_height - (w->widget[4].bottom - w->widget[4].top) - 1) / 2;
  1055 		WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
  1057 		WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
  1056 		WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
  1058 		WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
  1057 	}
  1059 	}
  1058 }
  1060 }