(svn r13047) -Codechange: remove vp_d

pull/155/head
glx 16 years ago
parent ee3c14b344
commit dacd2c5de8

@ -433,7 +433,7 @@ enum IndustryViewWidgets {
};
/** Information to store about the industry window */
struct indview_d : public vp_d {
struct indview_d {
byte editbox_line; ///< The line clicked to open the edit box
byte clicked_line; ///< The line of the button that has been clicked
byte clicked_button; ///< The button that has been clicked (to raise)
@ -601,8 +601,8 @@ static void IndustryViewWndProc(Window *w, WindowEvent *e)
w->viewport->height += e->we.sizing.diff.y;
w->viewport->virtual_width += e->we.sizing.diff.x;
w->viewport->virtual_height += e->we.sizing.diff.y;
WP(w, vp_d).dest_scrollpos_x -= e->we.sizing.diff.x;
WP(w, vp_d).dest_scrollpos_y -= e->we.sizing.diff.y;
w->viewport->dest_scrollpos_x -= e->we.sizing.diff.x;
w->viewport->dest_scrollpos_y -= e->we.sizing.diff.y;
UpdateViewportPosition(w);
break;

@ -166,27 +166,27 @@ bool DoZoomInOutWindow(int how, Window *w)
vp->virtual_width >>= 1;
vp->virtual_height >>= 1;
WP(w, vp_d).scrollpos_x += vp->virtual_width >> 1;
WP(w, vp_d).scrollpos_y += vp->virtual_height >> 1;
WP(w, vp_d).dest_scrollpos_x = WP(w,vp_d).scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = WP(w,vp_d).scrollpos_y;
w->viewport->scrollpos_x += vp->virtual_width >> 1;
w->viewport->scrollpos_y += vp->virtual_height >> 1;
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
break;
case ZOOM_OUT:
if (vp->zoom == ZOOM_LVL_MAX) return false;
vp->zoom = (ZoomLevel)((int)vp->zoom + 1);
WP(w, vp_d).scrollpos_x -= vp->virtual_width >> 1;
WP(w, vp_d).scrollpos_y -= vp->virtual_height >> 1;
WP(w, vp_d).dest_scrollpos_x = WP(w,vp_d).scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = WP(w,vp_d).scrollpos_y;
w->viewport->scrollpos_x -= vp->virtual_width >> 1;
w->viewport->scrollpos_y -= vp->virtual_height >> 1;
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
vp->virtual_width <<= 1;
vp->virtual_height <<= 1;
break;
}
if (vp != NULL) { // the vp can be null when how == ZOOM_NONE
vp->virtual_left = WP(w, vp_d).scrollpos_x;
vp->virtual_top = WP(w, vp_d).scrollpos_y;
vp->virtual_left = w->viewport->scrollpos_x;
vp->virtual_top = w->viewport->scrollpos_y;
}
w->SetDirty();
/* Update the windows that have zoom-buttons to perhaps disable their buttons */
@ -380,10 +380,10 @@ static void MainWindowWndProc(Window *w, WindowEvent *e)
_scrolling_viewport = false;
}
WP(w, vp_d).scrollpos_x += ScaleByZoom(e->we.scroll.delta.x, vp->zoom);
WP(w, vp_d).scrollpos_y += ScaleByZoom(e->we.scroll.delta.y, vp->zoom);
WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
w->viewport->scrollpos_x += ScaleByZoom(e->we.scroll.delta.x, vp->zoom);
w->viewport->scrollpos_y += ScaleByZoom(e->we.scroll.delta.y, vp->zoom);
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
} break;
case WE_MOUSEWHEEL:

@ -60,7 +60,7 @@ static NewsID _current_news = INVALID_NEWS; ///< points to news item that should
static NewsID _oldest_news = 0; ///< points to first item in fifo queue
static NewsID _latest_news = INVALID_NEWS; ///< points to last item in fifo queue
struct news_d : vp_d {
struct news_d {
uint16 chat_height;
NewsItem *ni;
};

@ -1092,8 +1092,8 @@ static void ScrollMainViewport(int x, int y)
Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
assert(w);
WP(w, vp_d).dest_scrollpos_x += ScaleByZoom(x, w->viewport->zoom);
WP(w, vp_d).dest_scrollpos_y += ScaleByZoom(y, w->viewport->zoom);
w->viewport->dest_scrollpos_x += ScaleByZoom(x, w->viewport->zoom);
w->viewport->dest_scrollpos_y += ScaleByZoom(y, w->viewport->zoom);
}
}
@ -1203,8 +1203,8 @@ void BeforeSaveGame()
const Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
if (w != NULL) {
_saved_scrollpos_x = WP(w, const vp_d).scrollpos_x;
_saved_scrollpos_y = WP(w, const vp_d).scrollpos_y;
_saved_scrollpos_x = w->viewport->scrollpos_x;
_saved_scrollpos_y = w->viewport->scrollpos_y;
_saved_scrollpos_zoom = w->viewport->zoom;
}
}
@ -1316,10 +1316,10 @@ static bool InitializeWindowsAndCaches()
Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
WP(w, vp_d).scrollpos_x = _saved_scrollpos_x;
WP(w, vp_d).scrollpos_y = _saved_scrollpos_y;
WP(w, vp_d).dest_scrollpos_x = _saved_scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = _saved_scrollpos_y;
w->viewport->scrollpos_x = _saved_scrollpos_x;
w->viewport->scrollpos_y = _saved_scrollpos_y;
w->viewport->dest_scrollpos_x = _saved_scrollpos_x;
w->viewport->dest_scrollpos_y = _saved_scrollpos_y;
ViewPort *vp = w->viewport;
vp->zoom = min(_saved_scrollpos_zoom, ZOOM_LVL_MAX);

@ -884,8 +884,8 @@ static void SmallMapWindowProc(Window *w, WindowEvent *e)
_left_button_clicked = false;
pt = RemapCoords(WP(w, smallmap_d).scroll_x, WP(w,smallmap_d).scroll_y, 0);
WP(w2, vp_d).dest_scrollpos_x = pt.x + ((_cursor.pos.x - w->left + 2) << 4) - (w2->viewport->virtual_width >> 1);
WP(w2, vp_d).dest_scrollpos_y = pt.y + ((_cursor.pos.y - w->top - 16) << 4) - (w2->viewport->virtual_height >> 1);
w2->viewport->dest_scrollpos_x = pt.x + ((_cursor.pos.x - w->left + 2) << 4) - (w2->viewport->virtual_width >> 1);
w2->viewport->dest_scrollpos_y = pt.y + ((_cursor.pos.y - w->top - 16) << 4) - (w2->viewport->virtual_height >> 1);
w->SetDirty();
} break;
@ -1138,21 +1138,21 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
case 7: { // location button (move main view to same spot as this view) 'Paste Location'
Window *w2 = FindWindowById(WC_MAIN_WINDOW, 0);
int x = WP(w, vp_d).scrollpos_x; // Where is the main looking at
int y = WP(w, vp_d).scrollpos_y;
int x = w->viewport->scrollpos_x; // Where is the main looking at
int y = w->viewport->scrollpos_y;
/* set this view to same location. Based on the center, adjusting for zoom */
WP(w2, vp_d).dest_scrollpos_x = x - (w2->viewport->virtual_width - w->viewport->virtual_width) / 2;
WP(w2, vp_d).dest_scrollpos_y = y - (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
w2->viewport->dest_scrollpos_x = x - (w2->viewport->virtual_width - w->viewport->virtual_width) / 2;
w2->viewport->dest_scrollpos_y = y - (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
} break;
case 8: { // inverse location button (move this view to same spot as main view) 'Copy Location'
const Window *w2 = FindWindowById(WC_MAIN_WINDOW, 0);
int x = WP(w2, const vp_d).scrollpos_x;
int y = WP(w2, const vp_d).scrollpos_y;
int x = w2->viewport->scrollpos_x;
int y = w2->viewport->scrollpos_y;
WP(w, vp_d).dest_scrollpos_x = x + (w2->viewport->virtual_width - w->viewport->virtual_width) / 2;
WP(w, vp_d).dest_scrollpos_y = y + (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
w->viewport->dest_scrollpos_x = x + (w2->viewport->virtual_width - w->viewport->virtual_width) / 2;
w->viewport->dest_scrollpos_y = y + (w2->viewport->virtual_height - w->viewport->virtual_height) / 2;
} break;
}
break;
@ -1172,10 +1172,10 @@ static void ExtraViewPortWndProc(Window *w, WindowEvent *e)
_scrolling_viewport = false;
}
WP(w, vp_d).scrollpos_x += ScaleByZoom(e->we.scroll.delta.x, vp->zoom);
WP(w, vp_d).scrollpos_y += ScaleByZoom(e->we.scroll.delta.y, vp->zoom);
WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
w->viewport->scrollpos_x += ScaleByZoom(e->we.scroll.delta.x, vp->zoom);
w->viewport->scrollpos_y += ScaleByZoom(e->we.scroll.delta.y, vp->zoom);
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
} break;
case WE_MOUSEWHEEL:
@ -1213,15 +1213,15 @@ void ShowExtraViewPortWindow(TileIndex tile)
const Window *v = FindWindowById(WC_MAIN_WINDOW, 0);
/* center on same place as main window (zoom is maximum, no adjustment needed) */
pt.x = WP(v, vp_d).scrollpos_x + v->viewport->virtual_height / 2;
pt.y = WP(v, vp_d).scrollpos_y + v->viewport->virtual_height / 2;
pt.x = v->viewport->scrollpos_x + v->viewport->virtual_height / 2;
pt.y = v->viewport->scrollpos_y + v->viewport->virtual_height / 2;
} else {
pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TileHeight(tile));
}
WP(w, vp_d).scrollpos_x = pt.x - ((w->widget[4].right - w->widget[4].left) - 1) / 2;
WP(w, vp_d).scrollpos_y = pt.y - ((w->widget[4].bottom - w->widget[4].top) - 1) / 2;
WP(w, vp_d).dest_scrollpos_x = WP(w, vp_d).scrollpos_x;
WP(w, vp_d).dest_scrollpos_y = WP(w, vp_d).scrollpos_y;
w->viewport->scrollpos_x = pt.x - ((w->widget[4].right - w->widget[4].left) - 1) / 2;
w->viewport->scrollpos_y = pt.y - ((w->widget[4].bottom - w->widget[4].top) - 1) / 2;
w->viewport->dest_scrollpos_x = w->viewport->scrollpos_x;
w->viewport->dest_scrollpos_y = w->viewport->scrollpos_y;
}
}

@ -591,9 +591,9 @@ void Vehicle::PreDestructor()
}
Window *w = FindWindowById(WC_MAIN_WINDOW, 0);
if (w != NULL && WP(w, vp_d).follow_vehicle == this->index) {
if (w != NULL && w->viewport->follow_vehicle == this->index) {
ScrollMainWindowTo(this->x_pos, this->y_pos, true); // lock the main view on the vehicle's last position
WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
w->viewport->follow_vehicle = INVALID_VEHICLE;
}
}

@ -738,7 +738,7 @@ void ChangeVehicleViewWindow(VehicleID from_index, VehicleID to_index)
if (w != NULL) {
w->window_number = to_index;
WP(w, vp_d).follow_vehicle = to_index;
w->viewport->follow_vehicle = to_index;
w->SetDirty();
w = FindWindowById(WC_VEHICLE_ORDERS, from_index);
@ -2091,7 +2091,7 @@ static void VehicleViewWndProc(Window *w, WindowEvent *e)
const Window *mainwindow = FindWindowById(WC_MAIN_WINDOW, 0);
/* code to allow the main window to 'follow' the vehicle if the ctrl key is pressed */
if (_ctrl_pressed && mainwindow->viewport->zoom == ZOOM_LVL_NORMAL) {
WP(mainwindow, vp_d).follow_vehicle = v->index;
mainwindow->viewport->follow_vehicle = v->index;
} else {
ScrollMainWindowTo(v->x_pos, v->y_pos);
}

@ -156,7 +156,7 @@ static Point MapXYZToViewport(const ViewPort *vp, uint x, uint y, uint z)
void DeleteWindowViewport(Window *w)
{
w->viewport->width = 0;
free(w->viewport);
w->viewport = NULL;
}
@ -177,7 +177,7 @@ void InitializeWindowViewport(Window *w, int x, int y,
{
assert(w->viewport == NULL);
ViewPort *vp = &(WP(w, vp_d).vp_data);
ViewportData *vp = CallocT<ViewportData>(1);
vp->left = x + w->left;
vp->top = y + w->top;
@ -194,21 +194,21 @@ void InitializeWindowViewport(Window *w, int x, int y,
if (follow_flags & 0x80000000) {
const Vehicle *veh;
WP(w, vp_d).follow_vehicle = (VehicleID)(follow_flags & 0xFFFF);
veh = GetVehicle(WP(w, vp_d).follow_vehicle);
vp->follow_vehicle = (VehicleID)(follow_flags & 0xFFFF);
veh = GetVehicle(vp->follow_vehicle);
pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
} else {
uint x = TileX(follow_flags) * TILE_SIZE;
uint y = TileY(follow_flags) * TILE_SIZE;
WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
vp->follow_vehicle = INVALID_VEHICLE;
pt = MapXYZToViewport(vp, x, y, GetSlopeZ(x, y));
}
WP(w, vp_d).scrollpos_x = pt.x;
WP(w, vp_d).scrollpos_y = pt.y;
WP(w, vp_d).dest_scrollpos_x = pt.x;
WP(w, vp_d).dest_scrollpos_y = pt.y;
vp->scrollpos_x = pt.x;
vp->scrollpos_y = pt.y;
vp->dest_scrollpos_x = pt.x;
vp->dest_scrollpos_y = pt.y;
w->viewport = vp;
vp->virtual_left = 0;//pt.x;
@ -426,9 +426,7 @@ Point GetTileBelowCursor()
Point GetTileZoomCenterWindow(bool in, Window * w)
{
int x, y;
ViewPort * vp;
vp = w->viewport;
ViewPort *vp = w->viewport;
if (in) {
x = ((_cursor.pos.x - vp->left) >> 1) + (vp->width >> 2);
@ -1581,33 +1579,33 @@ void UpdateViewportPosition(Window *w)
{
const ViewPort *vp = w->viewport;
if (WP(w, vp_d).follow_vehicle != INVALID_VEHICLE) {
const Vehicle* veh = GetVehicle(WP(w, vp_d).follow_vehicle);
if (w->viewport->follow_vehicle != INVALID_VEHICLE) {
const Vehicle* veh = GetVehicle(w->viewport->follow_vehicle);
Point pt = MapXYZToViewport(vp, veh->x_pos, veh->y_pos, veh->z_pos);
SetViewportPosition(w, pt.x, pt.y);
} else {
/* Ensure the destination location is within the map */
ClampViewportToMap(vp, WP(w, vp_d).dest_scrollpos_x, WP(w, vp_d).dest_scrollpos_y);
ClampViewportToMap(vp, w->viewport->dest_scrollpos_x, w->viewport->dest_scrollpos_y);
int delta_x = WP(w, vp_d).dest_scrollpos_x - WP(w, vp_d).scrollpos_x;
int delta_y = WP(w, vp_d).dest_scrollpos_y - WP(w, vp_d).scrollpos_y;
int delta_x = w->viewport->dest_scrollpos_x - w->viewport->scrollpos_x;
int delta_y = w->viewport->dest_scrollpos_y - w->viewport->scrollpos_y;
if (delta_x != 0 || delta_y != 0) {
if (_patches.smooth_scroll) {
int max_scroll = ScaleByMapSize1D(512);
/* Not at our desired positon yet... */
WP(w, vp_d).scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll);
WP(w, vp_d).scrollpos_y += Clamp(delta_y / 4, -max_scroll, max_scroll);
w->viewport->scrollpos_x += Clamp(delta_x / 4, -max_scroll, max_scroll);
w->viewport->scrollpos_y += Clamp(delta_y / 4, -max_scroll, max_scroll);
} else {
WP(w, vp_d).scrollpos_x = WP(w, vp_d).dest_scrollpos_x;
WP(w, vp_d).scrollpos_y = WP(w, vp_d).dest_scrollpos_y;
w->viewport->scrollpos_x = w->viewport->dest_scrollpos_x;
w->viewport->scrollpos_y = w->viewport->dest_scrollpos_y;
}
}
ClampViewportToMap(vp, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
ClampViewportToMap(vp, w->viewport->scrollpos_x, w->viewport->scrollpos_y);
SetViewportPosition(w, WP(w, vp_d).scrollpos_x, WP(w, vp_d).scrollpos_y);
SetViewportPosition(w, w->viewport->scrollpos_x, w->viewport->scrollpos_y);
}
}
@ -2066,18 +2064,18 @@ bool ScrollWindowTo(int x , int y, Window *w, bool instant)
{
/* The slope cannot be acquired outside of the map, so make sure we are always within the map. */
Point pt = MapXYZToViewport(w->viewport, x, y, GetSlopeZ(Clamp(x, 0, MapSizeX()), Clamp(y, 0, MapSizeY())));
WP(w, vp_d).follow_vehicle = INVALID_VEHICLE;
w->viewport->follow_vehicle = INVALID_VEHICLE;
if (WP(w, vp_d).dest_scrollpos_x == pt.x && WP(w, vp_d).dest_scrollpos_y == pt.y)
if (w->viewport->dest_scrollpos_x == pt.x && w->viewport->dest_scrollpos_y == pt.y)
return false;
if (instant) {
WP(w, vp_d).scrollpos_x = pt.x;
WP(w, vp_d).scrollpos_y = pt.y;
w->viewport->scrollpos_x = pt.x;
w->viewport->scrollpos_y = pt.y;
}
WP(w, vp_d).dest_scrollpos_x = pt.x;
WP(w, vp_d).dest_scrollpos_y = pt.y;
w->viewport->dest_scrollpos_x = pt.x;
w->viewport->dest_scrollpos_y = pt.y;
return true;
}

@ -1713,9 +1713,9 @@ static bool HandleViewportScroll()
return true;
}
if (WP(w, vp_d).follow_vehicle != INVALID_VEHICLE && w == FindWindowById(WC_MAIN_WINDOW, 0)) {
if (w == FindWindowById(WC_MAIN_WINDOW, 0) && w->viewport->follow_vehicle != INVALID_VEHICLE) {
/* If the main window is following a vehicle, then first let go of it! */
const Vehicle *veh = GetVehicle(WP(w, vp_d).follow_vehicle);
const Vehicle *veh = GetVehicle(w->viewport->follow_vehicle);
ScrollMainWindowTo(veh->x_pos, veh->y_pos, true); /* This also resets follow_vehicle */
return true;
}
@ -1915,14 +1915,14 @@ static void HandleAutoscroll()
/* here allows scrolling in both x and y axis */
#define scrollspeed 3
if (x - 15 < 0) {
WP(w, vp_d).dest_scrollpos_x += ScaleByZoom((x - 15) * scrollspeed, vp->zoom);
w->viewport->dest_scrollpos_x += ScaleByZoom((x - 15) * scrollspeed, vp->zoom);
} else if (15 - (vp->width - x) > 0) {
WP(w, vp_d).dest_scrollpos_x += ScaleByZoom((15 - (vp->width - x)) * scrollspeed, vp->zoom);
w->viewport->dest_scrollpos_x += ScaleByZoom((15 - (vp->width - x)) * scrollspeed, vp->zoom);
}
if (y - 15 < 0) {
WP(w, vp_d).dest_scrollpos_y += ScaleByZoom((y - 15) * scrollspeed, vp->zoom);
w->viewport->dest_scrollpos_y += ScaleByZoom((y - 15) * scrollspeed, vp->zoom);
} else if (15 - (vp->height - y) > 0) {
WP(w, vp_d).dest_scrollpos_y += ScaleByZoom((15 - (vp->height - y)) * scrollspeed, vp->zoom);
w->viewport->dest_scrollpos_y += ScaleByZoom((15 - (vp->height - y)) * scrollspeed, vp->zoom);
}
#undef scrollspeed
}

@ -271,6 +271,17 @@ struct ResizeInfo {
};
/**
* Data structure for a window viewport
*/
struct ViewportData : ViewPort {
VehicleID follow_vehicle;
int32 scrollpos_x;
int32 scrollpos_y;
int32 dest_scrollpos_x;
int32 dest_scrollpos_y;
};
/**
* Data structure for an opened window
*/
struct Window : ZeroedMemoryAllocator {
@ -306,7 +317,7 @@ public:
byte caption_color; ///< Background color of the window caption, contains PlayerID
ViewPort *viewport; ///< Pointer to viewport, if present
ViewportData *viewport; ///< Pointer to viewport data, if present
const Widget *original_widget; ///< Original widget layout, copied from WindowDesc
Widget *widget; ///< Widgets of the window
uint widget_count; ///< Number of widgets of the window
@ -540,16 +551,6 @@ struct depot_d {
};
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(depot_d));
struct vp_d {
VehicleID follow_vehicle;
int32 scrollpos_x;
int32 scrollpos_y;
int32 dest_scrollpos_x;
int32 dest_scrollpos_y;
ViewPort vp_data; ///< Screen position and zoom of the viewport
};
assert_compile(WINDOW_CUSTOM_SIZE >= sizeof(vp_d));
enum SortListFlags {
VL_NONE = 0, ///< no sort
VL_DESC = 1 << 0, ///< sort descending or ascending

Loading…
Cancel
Save