diff --git a/src/smallmap_gui.cpp b/src/smallmap_gui.cpp --- a/src/smallmap_gui.cpp +++ b/src/smallmap_gui.cpp @@ -22,7 +22,6 @@ #include "blitter/factory.hpp" #include "tunnelbridge_map.h" #include "strings_func.h" -#include "zoom_func.h" #include "core/endian_func.hpp" #include "vehicle_base.h" #include "sound_func.h" @@ -1132,167 +1131,6 @@ void ShowSmallMap() AllocateWindowDescFront(&_smallmap_desc, 0); } -/** Widget numbers of the extra viewport window. */ -enum ExtraViewportWindowWidgets { - EVW_CLOSE, - EVW_CAPTION, - EVW_STICKY, - EVW_BACKGROUND, - EVW_VIEWPORT, - EVW_ZOOMIN, - EVW_ZOOMOUT, - EVW_MAIN_TO_VIEW, - EVW_VIEW_TO_MAIN, - EVW_SPACER, - EVW_RESIZE, -}; - -/* Extra ViewPort Window Stuff */ -static const NWidgetPart _nested_extra_view_port_widgets[] = { - NWidget(NWID_HORIZONTAL), - NWidget(WWT_CLOSEBOX, COLOUR_GREY, EVW_CLOSE), - NWidget(WWT_CAPTION, COLOUR_GREY, EVW_CAPTION), SetDataTip(STR_EXTRA_VIEW_PORT_TITLE, STR_TOOLTIP_WINDOW_TITLE_DRAG_THIS), - NWidget(WWT_STICKYBOX, COLOUR_GREY, EVW_STICKY), - EndContainer(), - NWidget(WWT_PANEL, COLOUR_GREY, EVW_BACKGROUND), - NWidget(NWID_VIEWPORT, INVALID_COLOUR, EVW_VIEWPORT), SetPadding(2, 2, 2, 2), SetResize(1, 1), SetFill(true, true), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, EVW_ZOOMIN), SetDataTip(SPR_IMG_ZOOMIN, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_IN), - NWidget(WWT_PUSHIMGBTN, COLOUR_GREY, EVW_ZOOMOUT), SetDataTip(SPR_IMG_ZOOMOUT, STR_TOOLBAR_TOOLTIP_ZOOM_THE_VIEW_OUT), - NWidget(NWID_HORIZONTAL, NC_EQUALSIZE), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, EVW_MAIN_TO_VIEW), SetFill(true, true), SetResize(1, 0), - SetDataTip(STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW, STR_EXTRA_VIEW_MOVE_MAIN_TO_VIEW_TT), - NWidget(WWT_PUSHTXTBTN, COLOUR_GREY, EVW_VIEW_TO_MAIN), SetFill(true, true), SetResize(1, 0), - SetDataTip(STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN, STR_EXTRA_VIEW_MOVE_VIEW_TO_MAIN_TT), - EndContainer(), - EndContainer(), - NWidget(NWID_HORIZONTAL), - NWidget(WWT_PANEL, COLOUR_GREY, EVW_SPACER), SetFill(true, true), SetResize(1, 0), EndContainer(), - NWidget(WWT_RESIZEBOX, COLOUR_GREY, EVW_RESIZE), - EndContainer(), -}; - -class ExtraViewportWindow : public Window -{ -public: - ExtraViewportWindow(const WindowDesc *desc, int window_number, TileIndex tile) : Window() - { - this->InitNested(desc, window_number); - - NWidgetViewport *nvp = this->GetWidget(EVW_VIEWPORT); - nvp->InitializeViewport(this, 0, ZOOM_LVL_NORMAL); - this->DisableWidget(EVW_ZOOMIN); - - Point pt; - if (tile == INVALID_TILE) { - /* the main window with the main view */ - const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - - /* center on same place as main window (zoom is maximum, no adjustment needed) */ - pt.x = w->viewport->scrollpos_x + w->viewport->virtual_height / 2; - pt.y = w->viewport->scrollpos_y + w->viewport->virtual_height / 2; - } else { - pt = RemapCoords(TileX(tile) * TILE_SIZE + TILE_SIZE / 2, TileY(tile) * TILE_SIZE + TILE_SIZE / 2, TileHeight(tile)); - } - - this->viewport->scrollpos_x = pt.x - (nvp->pos_x - ((nvp->current_x - 1) / 2)); - this->viewport->scrollpos_y = pt.y - (nvp->pos_y - ((nvp->current_y - 1) / 2)); - this->viewport->dest_scrollpos_x = this->viewport->scrollpos_x; - this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y; - } - - virtual void SetStringParameters(int widget) const - { - switch (widget) { - case EVW_CAPTION: - /* set the number in the title bar */ - SetDParam(0, this->window_number + 1); - break; - } - } - - virtual void OnPaint() - { - this->DrawWidgets(); - } - - virtual void OnClick(Point pt, int widget) - { - switch (widget) { - case EVW_ZOOMIN: DoZoomInOutWindow(ZOOM_IN, this); break; - case EVW_ZOOMOUT: DoZoomInOutWindow(ZOOM_OUT, this); break; - - case EVW_MAIN_TO_VIEW: { // location button (move main view to same spot as this view) 'Paste Location' - Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - int x = this->viewport->scrollpos_x; // Where is the main looking at - int y = this->viewport->scrollpos_y; - - /* set this view to same location. Based on the center, adjusting for zoom */ - w->viewport->dest_scrollpos_x = x - (w->viewport->virtual_width - this->viewport->virtual_width) / 2; - w->viewport->dest_scrollpos_y = y - (w->viewport->virtual_height - this->viewport->virtual_height) / 2; - w->viewport->follow_vehicle = INVALID_VEHICLE; - } break; - - case EVW_VIEW_TO_MAIN: { // inverse location button (move this view to same spot as main view) 'Copy Location' - const Window *w = FindWindowById(WC_MAIN_WINDOW, 0); - int x = w->viewport->scrollpos_x; - int y = w->viewport->scrollpos_y; - - this->viewport->dest_scrollpos_x = x + (w->viewport->virtual_width - this->viewport->virtual_width) / 2; - this->viewport->dest_scrollpos_y = y + (w->viewport->virtual_height - this->viewport->virtual_height) / 2; - } break; - } - } - - virtual void OnResize(Point delta) - { - if (this->viewport != NULL) { - NWidgetViewport *nvp = this->GetWidget(EVW_VIEWPORT); - nvp->UpdateViewportCoordinates(this); - } - } - - virtual void OnScroll(Point delta) - { - const ViewPort *vp = IsPtInWindowViewport(this, _cursor.pos.x, _cursor.pos.y); - if (vp == NULL) return; - - this->viewport->scrollpos_x += ScaleByZoom(delta.x, vp->zoom); - this->viewport->scrollpos_y += ScaleByZoom(delta.y, vp->zoom); - this->viewport->dest_scrollpos_x = this->viewport->scrollpos_x; - this->viewport->dest_scrollpos_y = this->viewport->scrollpos_y; - } - - virtual void OnMouseWheel(int wheel) - { - ZoomInOrOutToCursorWindow(wheel < 0, this); - } - - virtual void OnInvalidateData(int data = 0) - { - /* Only handle zoom message if intended for us (msg ZOOM_IN/ZOOM_OUT) */ - HandleZoomMessage(this, this->viewport, EVW_ZOOMIN, EVW_ZOOMOUT); - } -}; - -static const WindowDesc _extra_view_port_desc( - WDP_AUTO, WDP_AUTO, 300, 68, 300, 268, - WC_EXTRA_VIEW_PORT, WC_NONE, - WDF_STD_TOOLTIPS | WDF_STD_BTN | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS | WDF_STICKY_BUTTON | WDF_RESIZABLE, - NULL, _nested_extra_view_port_widgets, lengthof(_nested_extra_view_port_widgets) -); - -void ShowExtraViewPortWindow(TileIndex tile) -{ - int i = 0; - - /* find next free window number for extra viewport */ - while (FindWindowById(WC_EXTRA_VIEW_PORT, i) != NULL) i++; - - new ExtraViewportWindow(&_extra_view_port_desc, i, tile); -} - /** * Scrolls the main window to given coordinates. * @param x x coordinate