celestar@9911: /* $Id$ */ celestar@9911: celestar@9911: /** @file zoom.hpp */ celestar@9911: celestar@9911: #ifndef ZOOM_HPP celestar@9911: #define ZOOM_HPP celestar@9911: celestar@9911: enum ZoomLevel { celestar@9911: /* Our possible zoom-levels */ celestar@9911: ZOOM_LVL_NORMAL = 0, celestar@9911: ZOOM_LVL_OUT_2X, celestar@9911: ZOOM_LVL_OUT_4X, celestar@9911: ZOOM_LVL_OUT_8X, celestar@9911: ZOOM_LVL_OUT_16X, celestar@9911: ZOOM_LVL_END, celestar@9911: celestar@9911: /* Here we define in which zoom viewports are */ celestar@9911: ZOOM_LVL_VIEWPORT = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_NEWS = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_INDUSTRY = ZOOM_LVL_OUT_2X, celestar@9911: ZOOM_LVL_TOWN = ZOOM_LVL_OUT_2X, celestar@9911: ZOOM_LVL_AIRCRAFT = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_SHIP = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_TRAIN = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_ROADVEH = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_WORLD_SCREENSHOT = ZOOM_LVL_NORMAL, celestar@9911: celestar@9911: ZOOM_LVL_DETAIL = ZOOM_LVL_OUT_2X, //! All zoomlevels below or equal to this, will result in details on the screen, like road-work, ... celestar@9911: celestar@9911: ZOOM_LVL_MIN = ZOOM_LVL_NORMAL, celestar@9911: ZOOM_LVL_MAX = ZOOM_LVL_OUT_16X, celestar@9911: }; celestar@9911: celestar@9911: extern ZoomLevel _saved_scrollpos_zoom; celestar@9911: celestar@9911: static inline int ScaleByZoom(int value, ZoomLevel zoom) celestar@9911: { celestar@9911: if (zoom == ZOOM_LVL_NORMAL) return value; celestar@9911: int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL; celestar@9911: return (zoom > ZOOM_LVL_NORMAL) ? value << izoom : value >> izoom; celestar@9911: } celestar@9911: celestar@9911: static inline int UnScaleByZoom(int value, ZoomLevel zoom) celestar@9911: { celestar@9911: if (zoom == ZOOM_LVL_NORMAL) return value; celestar@9911: int izoom = (int)zoom - (int)ZOOM_LVL_NORMAL; celestar@9911: return (zoom > ZOOM_LVL_NORMAL) ? value >> izoom : value << izoom; celestar@9911: } celestar@9911: celestar@9911: #endif /* ZOOM_HPP */