tron@2186: /* $Id$ */ tron@2186: rubidium@8720: /** @file viewport_func.h Functions related to (drawing on) viewports. */ belugas@6919: rubidium@8720: #ifndef VIEWPORT_FUNC_H rubidium@8720: #define VIEWPORT_FUNC_H truelight@0: rubidium@8721: #include "gfx_type.h" rubidium@8720: #include "viewport_type.h" rubidium@8615: #include "vehicle_type.h" rubidium@8760: #include "strings_type.h" truelight@0: tron@1990: void SetSelectionRed(bool); tron@1990: rubidium@6573: void InitViewports(); Darkvater@5122: void DeleteWindowViewport(Window *w); rubidium@8720: void AssignWindowViewport(Window *w, int x, int y, int width, int height, uint32 follow_flags, ZoomLevel zoom); tron@2116: ViewPort *IsPtInWindowViewport(const Window *w, int x, int y); rubidium@6573: Point GetTileBelowCursor(); Darkvater@5044: void UpdateViewportPosition(Window *w); Darkvater@5044: Darkvater@5044: bool DoZoomInOutWindow(int how, Window *w); darkvater@152: void ZoomInOrOutToCursorWindow(bool in, Window * w); darkvater@152: Point GetTileZoomCenterWindow(bool in, Window * w); Darkvater@5045: void HandleZoomMessage(Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out); truelight@0: Darkvater@5046: static inline void MaxZoomInOut(int how, Window *w) Darkvater@5046: { rubidium@7814: while (DoZoomInOutWindow(how, w)) {}; Darkvater@5046: } Darkvater@5046: truelight@0: void OffsetGroundSprite(int x, int y); truelight@0: rubidium@8177: void DrawGroundSprite(SpriteID image, SpriteID pal, const SubSprite *sub = NULL); rubidium@8177: void DrawGroundSpriteAt(SpriteID image, SpriteID pal, int32 x, int32 y, byte z, const SubSprite *sub = NULL); rubidium@8177: void AddSortableSpriteToDraw(SpriteID image, SpriteID pal, int x, int y, int w, int h, int dz, int z, bool transparent = false, int bb_offset_x = 0, int bb_offset_y = 0, int bb_offset_z = 0, const SubSprite *sub = NULL); rubidium@7502: void *AddStringToDraw(int x, int y, StringID string, uint64 params_1, uint64 params_2); rubidium@8177: void AddChildSpriteScreen(SpriteID image, SpriteID pal, int x, int y, bool transparent = false, const SubSprite *sub = NULL); truelight@0: truelight@0: rubidium@6573: void StartSpriteCombine(); rubidium@6573: void EndSpriteCombine(); truelight@0: tron@2116: void HandleViewportClicked(const ViewPort *vp, int x, int y); rubidium@6573: void PlaceObject(); truelight@0: void SetRedErrorSquare(TileIndex tile); truelight@0: void SetTileSelectSize(int w, int h); truelight@0: void SetTileSelectBigSize(int ox, int oy, int sx, int sy); truelight@0: rubidium@6573: Vehicle *CheckMouseOverVehicle(); truelight@0: rubidium@8384: void VpSelectTilesWithMethod(int x, int y, ViewportPlaceMethod method); rubidium@8384: void VpStartPlaceSizing(TileIndex tile, ViewportPlaceMethod method, byte process); rubidium@8869: void VpSetPresizeRange(TileIndex from, TileIndex to); rubidium@8384: void VpSetPlaceSizingLimit(int limit); truelight@0: rubidium@8720: typedef void PlaceProc(TileIndex tile); rubidium@8720: void PlaceProc_DemolishArea(TileIndex tile); rubidium@8720: void PlaceProc_LevelLand(TileIndex tile); rubidium@8720: void PlaceProc_BuyLand(TileIndex tile); rubidium@8720: bool GUIPlaceProcDragXY(const WindowEvent *e); truelight@0: belugas@6919: /* common button handler */ rubidium@8385: bool HandlePlacePushButton(Window *w, int widget, CursorID cursor, ViewportHighlightMode mode, PlaceProc *placeproc); truelight@0: tron@430: void ViewportDoDraw(const ViewPort *vp, int left, int top, int right, int bottom); tron@430: rubidium@8617: void SetObjectToPlaceWnd(CursorID icon, SpriteID pal, ViewportHighlightMode mode, Window *w); rubidium@8617: void SetObjectToPlace(CursorID icon, SpriteID pal, ViewportHighlightMode mode, WindowClass window_class, WindowNumber window_num); rubidium@8617: rubidium@8617: void ResetObjectToPlace(); rubidium@8617: rubidium@8617: bool ScrollWindowTo(int x, int y, Window *w, bool instant = false); rubidium@8617: rubidium@8617: bool ScrollMainWindowToTile(TileIndex tile, bool instant = false); rubidium@8617: bool ScrollMainWindowTo(int x, int y, bool instant = false); rubidium@8617: rubidium@8720: extern PlaceProc *_place_proc; rubidium@8720: extern Point _tile_fract_coords; rubidium@8720: extern TileHighlightData _thd; rubidium@8720: rubidium@8720: #endif /* VIEWPORT_FUNC_H */