viewport_func.h File Reference

Functions related to (drawing on) viewports. More...

#include "gfx_type.h"
#include "viewport_type.h"
#include "vehicle_type.h"
#include "window_type.h"
#include "tile_type.h"

Go to the source code of this file.

Functions

void SetSelectionRed (bool)
void DeleteWindowViewport (Window *w)
void InitializeWindowViewport (Window *w, int x, int y, int width, int height, uint32 follow_flags, ZoomLevel zoom)
 Initialize viewport of the window for use.
ViewPortIsPtInWindowViewport (const Window *w, int x, int y)
 Is a xy position inside the viewport of the window?
Point GetTileBelowCursor ()
void UpdateViewportPosition (Window *w)
 Update the viewport position being displayed.
void MarkAllViewportsDirty (int left, int top, int right, int bottom)
 Mark all viewports that display an area as dirty (in need of repaint).
bool DoZoomInOutWindow (int how, Window *w)
void ZoomInOrOutToCursorWindow (bool in, Window *w)
Point GetTileZoomCenterWindow (bool in, Window *w)
void HandleZoomMessage (Window *w, const ViewPort *vp, byte widget_zoom_in, byte widget_zoom_out)
 Update the status of the zoom-buttons according to the zoom-level of the viewport.
static void MaxZoomInOut (int how, Window *w)
void OffsetGroundSprite (int x, int y)
 Called when a foundation has been drawn for the current tile.
void DrawGroundSprite (SpriteID image, PaletteID pal, const SubSprite *sub=NULL, int extra_offs_x=0, int extra_offs_y=0)
 Draws a ground sprite for the current tile.
void DrawGroundSpriteAt (SpriteID image, PaletteID pal, int32 x, int32 y, int z, const SubSprite *sub=NULL, int extra_offs_x=0, int extra_offs_y=0)
 Draws a ground sprite at a specific world-coordinate relative to the current tile.
void AddSortableSpriteToDraw (SpriteID image, PaletteID 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)
 Draw a (transparent) sprite at given coordinates with a given bounding box.
void AddChildSpriteScreen (SpriteID image, PaletteID pal, int x, int y, bool transparent=false, const SubSprite *sub=NULL)
 Add a child sprite to a parent sprite.
void ViewportAddString (const DrawPixelInfo *dpi, ZoomLevel small_from, const ViewportSign *sign, StringID string_normal, StringID string_small, StringID string_small_shadow, uint64 params_1, uint64 params_2=0, Colours colour=INVALID_COLOUR)
 Add a string to draw in the viewport.
void StartSpriteCombine ()
 Starts a block of sprites, which are "combined" into a single bounding box.
void EndSpriteCombine ()
 Terminates a block of sprites started by StartSpriteCombine.
bool HandleViewportClicked (const ViewPort *vp, int x, int y)
void PlaceObject ()
void SetRedErrorSquare (TileIndex tile)
void SetTileSelectSize (int w, int h)
 Highlight w by h tiles at the cursor.
void SetTileSelectBigSize (int ox, int oy, int sx, int sy)
VehicleCheckMouseOverVehicle ()
void ViewportDoDraw (const ViewPort *vp, int left, int top, int right, int bottom)
bool ScrollWindowTo (int x, int y, int z, Window *w, bool instant=false)
 Scrolls the viewport in a window to a given location.
bool ScrollMainWindowToTile (TileIndex tile, bool instant=false)
bool ScrollMainWindowTo (int x, int y, int z=-1, bool instant=false)
 Scrolls the main window to given coordinates.
void UpdateAllVirtCoords ()
 Update the viewport coordinates of all signs.

Variables

Point _tile_fract_coords

Detailed Description

Functions related to (drawing on) viewports.

Definition in file viewport_func.h.


Function Documentation

void AddChildSpriteScreen ( SpriteID  image,
PaletteID  pal,
int  x,
int  y,
bool  transparent,
const SubSprite sub 
)

Add a child sprite to a parent sprite.

Parameters:
image the image to draw.
pal the provided palette.
x sprite x-offset (screen coordinates) relative to parent sprite.
y sprite y-offset (screen coordinates) relative to parent sprite.
transparent if true, switch the palette between the provided palette and the transparent palette,
sub Only draw a part of the sprite.

Definition at line 762 of file viewport.cpp.

References SmallVector< T, S >::Append(), ViewportDrawer::last_foundation_child, SmallVector< T, S >::Length(), MAX_SPRITES, ChildScreenSpriteToDraw::next, PALETTE_MODIFIER_TRANSPARENT, SetBit(), SPRITE_MASK, and ChildScreenSpriteToDraw::sub.

Referenced by AddChildSpriteToFoundation(), AddCombinedSprite(), and DrawCommonTileSeq().

void AddSortableSpriteToDraw ( SpriteID  image,
PaletteID  pal,
int  x,
int  y,
int  w,
int  h,
int  dz,
int  z,
bool  transparent,
int  bb_offset_x,
int  bb_offset_y,
int  bb_offset_z,
const SubSprite sub 
)

Draw a (transparent) sprite at given coordinates with a given bounding box.

The bounding box extends from (x + bb_offset_x, y + bb_offset_y, z + bb_offset_z) to (x + w - 1, y + h - 1, z + dz - 1), both corners included. Bounding boxes with bb_offset_x == w or bb_offset_y == h or bb_offset_z == dz are allowed and produce thin slices.

Note:
Bounding boxes are normally specified with bb_offset_x = bb_offset_y = bb_offset_z = 0. The extent of the bounding box in negative direction is defined by the sprite offset in the grf file. However if modifying the sprite offsets is not suitable (e.g. when using existing graphics), the bounding box can be tuned by bb_offset.
Precondition:
w >= bb_offset_x, h >= bb_offset_y, dz >= bb_offset_z. Else w, h or dz are ignored.
Parameters:
image the image to combine and draw,
pal the provided palette,
x position X (world) of the sprite,
y position Y (world) of the sprite,
w bounding box extent towards positive X (world),
h bounding box extent towards positive Y (world),
dz bounding box extent towards positive Z (world),
z position Z (world) of the sprite,
transparent if true, switch the palette between the provided palette and the transparent palette,
bb_offset_x bounding box extent towards negative X (world),
bb_offset_y bounding box extent towards negative Y (world),
bb_offset_z bounding box extent towards negative Z (world)
sub Only draw a part of the sprite.

Definition at line 639 of file viewport.cpp.

References AddCombinedSprite(), SmallVector< T, S >::Append(), ViewportDrawer::combine_sprites, ParentSpriteToDraw::comparison_done, ParentSpriteToDraw::first_child, Sprite::height, ParentSpriteToDraw::image, ParentSpriteToDraw::left, max(), MAX_SPRITES, min(), ParentSpriteToDraw::pal, PALETTE_MODIFIER_TRANSPARENT, RemapCoords(), SetBit(), SPRITE_COMBINE_ACTIVE, SPRITE_COMBINE_PENDING, SPRITE_MASK, ST_NORMAL, ParentSpriteToDraw::sub, ParentSpriteToDraw::top, Sprite::width, ParentSpriteToDraw::x, Sprite::x_offs, ParentSpriteToDraw::xmax, ParentSpriteToDraw::xmin, ParentSpriteToDraw::y, Sprite::y_offs, ParentSpriteToDraw::ymax, ParentSpriteToDraw::ymin, ParentSpriteToDraw::zmax, and ParentSpriteToDraw::zmin.

Referenced by DrawBridgePillars(), DrawBridgeTramBits(), DrawCatenary(), DrawCatenaryOnTunnel(), DrawCatenaryRailway(), DrawCommonTileSeq(), DrawFoundation(), DrawRoadDetail(), DrawTile_Town(), DrawTile_TunnelBridge(), DrawTrackFence_NS_1(), DrawTrackFence_NS_2(), DrawTrackFence_WE_1(), DrawTrackFence_WE_2(), and DrawTramCatenary().

void DrawGroundSprite ( SpriteID  image,
PaletteID  pal,
const SubSprite sub,
int  extra_offs_x,
int  extra_offs_y 
)

Draws a ground sprite for the current tile.

If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite.

Parameters:
image the image to draw.
pal the provided palette.
sub Only draw a part of the sprite.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 556 of file viewport.cpp.

References DrawGroundSpriteAt().

Referenced by DrawCanalWater(), DrawCommonTileSeq(), DrawRoadBits(), DrawSeaWater(), DrawTile_Road(), DrawTile_Town(), DrawTile_TunnelBridge(), and DrawTrackBits().

void DrawGroundSpriteAt ( SpriteID  image,
PaletteID  pal,
int32  x,
int32  y,
int  z,
const SubSprite sub,
int  extra_offs_x,
int  extra_offs_y 
)

Draws a ground sprite at a specific world-coordinate relative to the current tile.

If the current tile is drawn on top of a foundation the sprite is added as child sprite to the "foundation"-ParentSprite.

Parameters:
image the image to draw.
pal the provided palette.
x position x (world coordinates) of the sprite relative to current tile.
y position y (world coordinates) of the sprite relative to current tile.
z position z (world coordinates) of the sprite relative to current tile.
sub Only draw a part of the sprite.
extra_offs_x Pixel X offset for the sprite position.
extra_offs_y Pixel Y offset for the sprite position.

Definition at line 533 of file viewport.cpp.

References AddChildSpriteToFoundation(), AddTileSpriteToDraw(), ViewportDrawer::foundation, ViewportDrawer::foundation_part, FOUNDATION_PART_NONE, FOUNDATION_PART_NORMAL, RemapCoords(), TileInfo::x, TileInfo::y, and TileInfo::z.

Referenced by DrawGroundSprite(), and DrawRoadBits().

void EndSpriteCombine (  ) 

Terminates a block of sprites started by StartSpriteCombine.

Take a look there for details.

Definition at line 746 of file viewport.cpp.

References ViewportDrawer::combine_sprites, and SPRITE_COMBINE_NONE.

Referenced by DrawBridgeTramBits(), and DrawTile_TunnelBridge().

void HandleZoomMessage ( Window w,
const ViewPort vp,
byte  widget_zoom_in,
byte  widget_zoom_out 
)

Update the status of the zoom-buttons according to the zoom-level of the viewport.

This will update their status and invalidate accordingly

Parameters:
w Window pointer to the window that has the zoom buttons
vp pointer to the viewport whose zoom-level the buttons represent
widget_zoom_in widget index for window with zoom-in button
widget_zoom_out widget index for window with zoom-out button

Definition at line 458 of file viewport.cpp.

References Window::SetWidgetDirty(), and Window::SetWidgetDisabledState().

Referenced by ExtraViewportWindow::OnInvalidateData(), ScenarioEditorToolbarWindow::OnInvalidateData(), and MainToolbarWindow::OnInvalidateData().

void InitializeWindowViewport ( Window w,
int  x,
int  y,
int  width,
int  height,
uint32  follow_flags,
ZoomLevel  zoom 
)

Initialize viewport of the window for use.

Parameters:
w Window to use/display the viewport in
x Offset of left edge of viewport with respect to left edge window w
y Offset of top edge of viewport with respect to top edge window w
width Width of the viewport
height Height of the viewport
follow_flags Flags controlling the viewport.

  • If bit 31 is set, the lower 16 bits are the vehicle that the viewport should follow.
  • If bit 31 is clear, it is a tile position.
zoom Zoomlevel to display

Definition at line 179 of file viewport.cpp.

References ViewportData::dest_scrollpos_x, ViewportData::dest_scrollpos_y, ViewportData::follow_vehicle, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tcache, Tzero >::PoolItem<&_vehicle_pool >::Get(), ViewPort::height, INVALID_VEHICLE, Window::left, ViewPort::left, ScaleByZoom(), ViewportData::scrollpos_x, ViewportData::scrollpos_y, TILE_SIZE, TileX(), TileY(), Window::top, ViewPort::top, Window::viewport, ViewPort::virtual_height, ViewPort::virtual_left, ViewPort::virtual_top, ViewPort::virtual_width, and ViewPort::width.

Referenced by NWidgetViewport::InitializeViewport().

ViewPort* IsPtInWindowViewport ( const Window w,
int  x,
int  y 
)

Is a xy position inside the viewport of the window?

Parameters:
w Window to examine its viewport
x X coordinate of the xy position
y Y coordinate of the xy position
Returns:
Pointer to the viewport if the xy position is in the viewport of the window, otherwise NULL is returned.

Definition at line 350 of file viewport.cpp.

References ViewPort::height, IsInsideMM(), ViewPort::left, ViewPort::top, Window::viewport, and ViewPort::width.

Referenced by HandleAutoscroll(), ExtraViewportWindow::OnScroll(), and MainWindow::OnScroll().

void OffsetGroundSprite ( int  x,
int  y 
)

Called when a foundation has been drawn for the current tile.

Successive ground sprites for the current tile will be drawn as child sprites of the "foundation"-ParentSprite, not as TileSprites.

Parameters:
x sprite x-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite.
y sprite y-offset (screen coordinates) of ground sprites relative to the "foundation"-ParentSprite.

Definition at line 568 of file viewport.cpp.

References ViewportDrawer::foundation, ViewportDrawer::foundation_offset, ViewportDrawer::foundation_part, FOUNDATION_PART_HALFTILE, FOUNDATION_PART_NONE, FOUNDATION_PART_NORMAL, ViewportDrawer::last_foundation_child, and SmallVector< T, S >::Length().

Referenced by DrawFoundation().

bool ScrollMainWindowTo ( int  x,
int  y,
int  z,
bool  instant 
)

Scrolls the main window to given coordinates.

Parameters:
x x coordinate
y y coordinate
z z coordinate; -1 to scroll to terrain height
instant scroll instantly (meaningful only when smooth_scrolling is active)
Returns:
did the viewport position change?

Definition at line 1514 of file smallmap_gui.cpp.

References FindWindowById(), and ScrollWindowTo().

Referenced by VehicleViewWindow::OnClick(), NewsWindow::OnClick(), and MainWindow::OnKeyPress().

bool ScrollWindowTo ( int  x,
int  y,
int  z,
Window w,
bool  instant 
)

Scrolls the viewport in a window to a given location.

Parameters:
x Desired x location of the map to scroll to (world coordinate).
y Desired y location of the map to scroll to (world coordinate).
z Desired z location of the map to scroll to (world coordinate). Use -1 to scroll to the height of the map at the x, y location.
w Window containing the viewport.
instant Jump to the location instead of slowly moving to it.
Returns:
Destination of the viewport was changed (to activate other actions when the viewport is already at the desired position).

Definition at line 1866 of file viewport.cpp.

References Clamp(), ViewportData::dest_scrollpos_x, ViewportData::dest_scrollpos_y, ViewportData::follow_vehicle, INVALID_VEHICLE, MapSizeX(), MapSizeY(), ViewportData::scrollpos_x, ViewportData::scrollpos_y, TILE_SIZE, and Window::viewport.

Referenced by WaypointWindow::OnInvalidateData(), and ScrollMainWindowTo().

void SetTileSelectSize ( int  w,
int  h 
)

Highlight w by h tiles at the cursor.

Parameters:
w Width of the highlighted tiles rectangle.
h Height of the highlighted tiles rectangle.

Definition at line 1909 of file viewport.cpp.

References TILE_SIZE.

Referenced by BuildRailClick_Remove(), CompanyWindow::OnClick(), ScenarioEditorLandscapeGenerationWindow::OnPaint(), BuildRoadStationWindow::OnPaint(), BuildRailStationWindow::OnPaint(), BuildDocksStationWindow::OnPaint(), and VpHandlePlaceSizingDrag().

void StartSpriteCombine (  ) 

Starts a block of sprites, which are "combined" into a single bounding box.

Subsequent calls to AddSortableSpriteToDraw will be drawn into the same bounding box. That is: The first sprite that is not clipped by the viewport defines the bounding box, and the following sprites will be child sprites to that one.

That implies:

  • The drawing order is definite. No other sprites will be sorted between those of the block.
  • You have to provide a valid bounding box for all sprites, as you won't know which one is the first non-clipped one. Preferable you use the same bounding box for all.
  • You cannot use AddChildSpriteScreen inside the block, as its result will be indefinite.

The block is terminated by EndSpriteCombine.

You cannot nest "combined" blocks.

Definition at line 736 of file viewport.cpp.

References ViewportDrawer::combine_sprites, SPRITE_COMBINE_NONE, and SPRITE_COMBINE_PENDING.

Referenced by DrawBridgeTramBits(), and DrawTile_TunnelBridge().

void UpdateViewportPosition ( Window w  ) 
void ViewportAddString ( const DrawPixelInfo dpi,
ZoomLevel  small_from,
const ViewportSign sign,
StringID  string_normal,
StringID  string_small,
StringID  string_small_shadow,
uint64  params_1,
uint64  params_2,
Colours  colour 
)

Add a string to draw in the viewport.

Parameters:
dpi current viewport area
small_from Zoomlevel from when the small font should be used
sign sign position and dimension
string_normal String for normal and 2x zoom level
string_small String for 4x and 8x zoom level
string_small_shadow Shadow string for 4x and 8x zoom level; or STR_NULL if no shadow
colour colour of the sign background; or 0 if transparent

Definition at line 1091 of file viewport.cpp.

References ViewportSign::center, FONT_HEIGHT_NORMAL, ScaleByZoom(), ViewportSign::top, VPSM_BOTTOM, VPSM_TOP, ViewportSign::width_normal, and ViewportSign::width_small.


Generated on Sat Nov 20 20:59:39 2010 for OpenTTD by  doxygen 1.6.1