From 4bf9748143718504d0bcbc44d119b36ee28978d8 Mon Sep 17 00:00:00 2001 From: Ted John Date: Mon, 11 Jul 2016 22:09:15 +0100 Subject: [PATCH] fix drawing of object preview We can't use dpi->width and dpi->height as they only define the clip region, not the viewport --- src/object/BannerObject.cpp | 6 +++--- src/object/BannerObject.h | 2 +- src/object/EntranceObject.cpp | 6 +++--- src/object/EntranceObject.h | 2 +- src/object/FootpathItemObject.cpp | 6 +++--- src/object/FootpathItemObject.h | 2 +- src/object/FootpathObject.cpp | 6 +++--- src/object/FootpathObject.h | 2 +- src/object/LargeSceneryObject.cpp | 6 +++--- src/object/LargeSceneryObject.h | 2 +- src/object/Object.h | 2 +- src/object/ObjectRepository.cpp | 4 ++-- src/object/ObjectRepository.h | 2 +- src/object/RideObject.cpp | 2 +- src/object/RideObject.h | 2 +- src/object/SceneryGroupObject.cpp | 6 +++--- src/object/SceneryGroupObject.h | 2 +- src/object/SmallSceneryObject.cpp | 8 ++++---- src/object/SmallSceneryObject.h | 2 +- src/object/StexObject.cpp | 6 +++--- src/object/StexObject.h | 2 +- src/object/WallObject.cpp | 6 +++--- src/object/WallObject.h | 2 +- src/object/WaterObject.cpp | 6 +++--- src/object/WaterObject.h | 2 +- src/windows/editor_inventions_list.c | 2 +- src/windows/editor_object_selection.c | 2 +- 27 files changed, 49 insertions(+), 49 deletions(-) diff --git a/src/object/BannerObject.cpp b/src/object/BannerObject.cpp index c86a74cd4a..b9d23f33a0 100644 --- a/src/object/BannerObject.cpp +++ b/src/object/BannerObject.cpp @@ -66,10 +66,10 @@ void BannerObject::Unload() _legacyType.image = 0; } -void BannerObject::DrawPreview(rct_drawpixelinfo * dpi) const +void BannerObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; uint32 imageId = 0x20D00000 | _legacyType.image; gfx_draw_sprite(dpi, imageId + 0, x - 12, y + 8, 0); diff --git a/src/object/BannerObject.h b/src/object/BannerObject.h index fb20f37038..aebac64ae0 100644 --- a/src/object/BannerObject.h +++ b/src/object/BannerObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/object/EntranceObject.cpp b/src/object/EntranceObject.cpp index 0469a3b0f1..b2a22e62c0 100644 --- a/src/object/EntranceObject.cpp +++ b/src/object/EntranceObject.cpp @@ -53,10 +53,10 @@ void EntranceObject::Unload() _legacyType.image_id = 0; } -void EntranceObject::DrawPreview(rct_drawpixelinfo * dpi) const +void EntranceObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; uint32 imageId = _legacyType.image_id; gfx_draw_sprite(dpi, imageId + 1, x - 32, y + 14, 0); diff --git a/src/object/EntranceObject.h b/src/object/EntranceObject.h index 9da64b57f5..93e2d7763d 100644 --- a/src/object/EntranceObject.h +++ b/src/object/EntranceObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/object/FootpathItemObject.cpp b/src/object/FootpathItemObject.cpp index 80b0cc1cbc..e567e57284 100644 --- a/src/object/FootpathItemObject.cpp +++ b/src/object/FootpathItemObject.cpp @@ -68,9 +68,9 @@ void FootpathItemObject::Unload() _legacyType.image = 0; } -void FootpathItemObject::DrawPreview(rct_drawpixelinfo * dpi) const +void FootpathItemObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; gfx_draw_sprite(dpi, _legacyType.image, x - 22, y - 24, 0); } diff --git a/src/object/FootpathItemObject.h b/src/object/FootpathItemObject.h index 5ce31cc233..889a309825 100644 --- a/src/object/FootpathItemObject.h +++ b/src/object/FootpathItemObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/object/FootpathObject.cpp b/src/object/FootpathObject.cpp index 8cc43bacbf..5e875cf5a7 100644 --- a/src/object/FootpathObject.cpp +++ b/src/object/FootpathObject.cpp @@ -63,10 +63,10 @@ void FootpathObject::Unload() _legacyType.image = 0; } -void FootpathObject::DrawPreview(rct_drawpixelinfo * dpi) const +void FootpathObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; gfx_draw_sprite(dpi, _legacyType.image + 71, x - 49, y - 17, 0); gfx_draw_sprite(dpi, _legacyType.image + 72, x + 4, y - 17, 0); } diff --git a/src/object/FootpathObject.h b/src/object/FootpathObject.h index 7000c8776d..327a061538 100644 --- a/src/object/FootpathObject.h +++ b/src/object/FootpathObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/object/LargeSceneryObject.cpp b/src/object/LargeSceneryObject.cpp index 777c3b387b..7af89b614b 100644 --- a/src/object/LargeSceneryObject.cpp +++ b/src/object/LargeSceneryObject.cpp @@ -110,10 +110,10 @@ void LargeSceneryObject::Unload() _legacyType.image = 0; } -void LargeSceneryObject::DrawPreview(rct_drawpixelinfo * dpi) const +void LargeSceneryObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = (dpi->height / 2) - 39; + sint32 x = width / 2; + sint32 y = (height / 2) - 39; uint32 imageId = 0xB2D00000 | _legacyType.image; gfx_draw_sprite(dpi, imageId, x, y, 0); diff --git a/src/object/LargeSceneryObject.h b/src/object/LargeSceneryObject.h index e4a86339c6..ebe3a4c3a9 100644 --- a/src/object/LargeSceneryObject.h +++ b/src/object/LargeSceneryObject.h @@ -41,7 +41,7 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; private: static rct_large_scenery_tile * ReadTiles(IStream * stream); diff --git a/src/object/Object.h b/src/object/Object.h index b1e84eb377..96f78ad046 100644 --- a/src/object/Object.h +++ b/src/object/Object.h @@ -66,7 +66,7 @@ public: virtual void Load() abstract; virtual void Unload() abstract; - virtual void DrawPreview(rct_drawpixelinfo * dpi) const { } + virtual void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { } virtual uint8 GetObjectType() const { return _objectEntry.flags & 0x0F; } virtual const utf8 * GetName() const; diff --git a/src/object/ObjectRepository.cpp b/src/object/ObjectRepository.cpp index 0a005b1b39..46c84b5009 100644 --- a/src/object/ObjectRepository.cpp +++ b/src/object/ObjectRepository.cpp @@ -903,10 +903,10 @@ extern "C" } } - void object_draw_preview(const void * object, rct_drawpixelinfo * dpi) + void object_draw_preview(const void * object, rct_drawpixelinfo * dpi, sint32 width, sint32 height) { const Object * baseObject = (const Object *)object; - baseObject->DrawPreview(dpi); + baseObject->DrawPreview(dpi, width, height); } bool object_entry_compare(const rct_object_entry * a, const rct_object_entry * b) diff --git a/src/object/ObjectRepository.h b/src/object/ObjectRepository.h index 6779471b2b..6aaa978e22 100644 --- a/src/object/ObjectRepository.h +++ b/src/object/ObjectRepository.h @@ -89,7 +89,7 @@ void * object_repository_load_object(const rct_object_e void object_delete(void * object); const utf8 * object_get_description(const void * object); -void object_draw_preview(const void * object, rct_drawpixelinfo * dpi); +void object_draw_preview(const void * object, rct_drawpixelinfo * dpi, sint32 width, sint32 height); #endif diff --git a/src/object/RideObject.cpp b/src/object/RideObject.cpp index 4d91204d03..b8d773eaa1 100644 --- a/src/object/RideObject.cpp +++ b/src/object/RideObject.cpp @@ -348,7 +348,7 @@ void RideObject::Unload() _legacyType.images_offset = 0; } -void RideObject::DrawPreview(rct_drawpixelinfo * dpi) const +void RideObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { uint32 imageId = _legacyType.images_offset; if (_legacyType.ride_type[0] == 0xFF) diff --git a/src/object/RideObject.h b/src/object/RideObject.h index 40f229452d..0a152ea301 100644 --- a/src/object/RideObject.h +++ b/src/object/RideObject.h @@ -40,7 +40,7 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; const utf8 * GetDescription() const; const utf8 * GetCapacity() const; diff --git a/src/object/SceneryGroupObject.cpp b/src/object/SceneryGroupObject.cpp index 45bc7bd6d8..7633805168 100644 --- a/src/object/SceneryGroupObject.cpp +++ b/src/object/SceneryGroupObject.cpp @@ -69,10 +69,10 @@ void SceneryGroupObject::Unload() _legacyType.image = 0; } -void SceneryGroupObject::DrawPreview(rct_drawpixelinfo * dpi) const +void SceneryGroupObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; uint32 imageId = _legacyType.image + 0x20600001; gfx_draw_sprite(dpi, imageId, x - 15, y - 14, 0); diff --git a/src/object/SceneryGroupObject.h b/src/object/SceneryGroupObject.h index 93697ee0c7..03b0697a8a 100644 --- a/src/object/SceneryGroupObject.h +++ b/src/object/SceneryGroupObject.h @@ -43,7 +43,7 @@ public: void Unload() override; void UpdateEntryIndexes(); - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; void SetRepositoryItem(ObjectRepositoryItem * item) const override; diff --git a/src/object/SmallSceneryObject.cpp b/src/object/SmallSceneryObject.cpp index dcc45a748e..79d08c840d 100644 --- a/src/object/SmallSceneryObject.cpp +++ b/src/object/SmallSceneryObject.cpp @@ -99,7 +99,7 @@ void SmallSceneryObject::Unload() _legacyType.image = 0; } -void SmallSceneryObject::DrawPreview(rct_drawpixelinfo * dpi) const +void SmallSceneryObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { uint32 flags = _legacyType.small_scenery.flags; uint32 imageId = _legacyType.image; @@ -112,9 +112,9 @@ void SmallSceneryObject::DrawPreview(rct_drawpixelinfo * dpi) const } } - int x = dpi->width / 2; - int y = (dpi->height / 2) + (_legacyType.small_scenery.height / 2); - y = Math::Min(y, dpi->height - 16); + sint32 x = width / 2; + sint32 y = (height / 2) + (_legacyType.small_scenery.height / 2); + y = Math::Min(y, height - 16); if ((flags & SMALL_SCENERY_FLAG_FULL_TILE) && (flags & SMALL_SCENERY_FLAG_VOFFSET_CENTRE)) diff --git a/src/object/SmallSceneryObject.h b/src/object/SmallSceneryObject.h index c44b9276c7..a7f77b5e8b 100644 --- a/src/object/SmallSceneryObject.h +++ b/src/object/SmallSceneryObject.h @@ -39,7 +39,7 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; private: static uint8 * ReadVar10(IStream * stream); diff --git a/src/object/StexObject.cpp b/src/object/StexObject.cpp index 9b83b4515f..3abb215ed5 100644 --- a/src/object/StexObject.cpp +++ b/src/object/StexObject.cpp @@ -58,11 +58,11 @@ void StexObject::Unload() _legacyType.details = 0; } -void StexObject::DrawPreview(rct_drawpixelinfo * dpi) const +void StexObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { // Write (no image) - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; gfx_draw_string_centred(dpi, 3326, x, y, 0, nullptr); } diff --git a/src/object/StexObject.h b/src/object/StexObject.h index ba09077ebd..b922951b63 100644 --- a/src/object/StexObject.h +++ b/src/object/StexObject.h @@ -37,7 +37,7 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; const utf8 * GetName() const override; diff --git a/src/object/WallObject.cpp b/src/object/WallObject.cpp index 11f19b4e77..fc92db4b89 100644 --- a/src/object/WallObject.cpp +++ b/src/object/WallObject.cpp @@ -69,10 +69,10 @@ void WallObject::Unload() _legacyType.image = 0; } -void WallObject::DrawPreview(rct_drawpixelinfo * dpi) const +void WallObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; x += 14; y += (_legacyType.wall.height * 2) + 16; diff --git a/src/object/WallObject.h b/src/object/WallObject.h index 7fcc26e1e0..3b3f44b95d 100644 --- a/src/object/WallObject.h +++ b/src/object/WallObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/object/WaterObject.cpp b/src/object/WaterObject.cpp index 41e7e32d6d..da7d3e9dd6 100644 --- a/src/object/WaterObject.cpp +++ b/src/object/WaterObject.cpp @@ -57,10 +57,10 @@ void WaterObject::Unload() _legacyType.string_idx = 0; } -void WaterObject::DrawPreview(rct_drawpixelinfo * dpi) const +void WaterObject::DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const { // Write (no image) - int x = dpi->width / 2; - int y = dpi->height / 2; + sint32 x = width / 2; + sint32 y = height / 2; gfx_draw_string_centred(dpi, 3326, x, y, 0, nullptr); } diff --git a/src/object/WaterObject.h b/src/object/WaterObject.h index 151daf42cc..1c946d0372 100644 --- a/src/object/WaterObject.h +++ b/src/object/WaterObject.h @@ -37,5 +37,5 @@ public: void Load() override; void Unload() override; - void DrawPreview(rct_drawpixelinfo * dpi) const override; + void DrawPreview(rct_drawpixelinfo * dpi, sint32 width, sint32 height) const override; }; diff --git a/src/windows/editor_inventions_list.c b/src/windows/editor_inventions_list.c index 575b07e8c8..83faf6dda4 100644 --- a/src/windows/editor_inventions_list.c +++ b/src/windows/editor_inventions_list.c @@ -797,7 +797,7 @@ static void window_editor_inventions_list_paint(rct_window *w, rct_drawpixelinfo int width = widget->right - widget->left - 1; int height = widget->bottom - widget->top - 1; if (clip_drawpixelinfo(&clipDPI, dpi, x, y, width, height)) { - object_draw_preview(object, &clipDPI); + object_draw_preview(object, &clipDPI, width, height); } } diff --git a/src/windows/editor_object_selection.c b/src/windows/editor_object_selection.c index 65064ee936..497bfd375b 100644 --- a/src/windows/editor_object_selection.c +++ b/src/windows/editor_object_selection.c @@ -1322,7 +1322,7 @@ static void window_editor_object_selection_paint(rct_window *w, rct_drawpixelinf int width = widget->right - widget->left - 1; int height = widget->bottom - widget->top - 1; if (clip_drawpixelinfo(&clipDPI, dpi, x, y, width, height)) { - object_draw_preview(_loadedObject, &clipDPI); + object_draw_preview(_loadedObject, &clipDPI, width, height); } }