From 54db35397c457534d5f584e0792182b39e7597e0 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 3 Aug 2024 20:07:15 +0200 Subject: [PATCH 1/4] Introduce CursorData.h; rename constants --- src/openrct2-ui/CursorData.cpp | 112 +++++++++++++------------- src/openrct2-ui/CursorData.h | 33 ++++++++ src/openrct2-ui/CursorRepository.cpp | 10 ++- src/openrct2-ui/CursorRepository.h | 7 +- src/openrct2-ui/libopenrct2ui.vcxproj | 1 + src/openrct2/interface/Cursors.h | 16 ---- 6 files changed, 100 insertions(+), 79 deletions(-) create mode 100644 src/openrct2-ui/CursorData.h diff --git a/src/openrct2-ui/CursorData.cpp b/src/openrct2-ui/CursorData.cpp index c480757e42..391c952608 100644 --- a/src/openrct2-ui/CursorData.cpp +++ b/src/openrct2-ui/CursorData.cpp @@ -7,19 +7,20 @@ * OpenRCT2 is licensed under the GNU General Public License version 3. *****************************************************************************/ -#include "CursorRepository.h" +#include "CursorData.h" #include +#include namespace OpenRCT2::Ui { // clang-format off - static constexpr CursorData BlankCursorData = + static constexpr CursorData kBlankCursorData = { { 0, 0 }, { 0 }, { 0 } }; - static constexpr CursorData UpArrowCursorData = + static constexpr CursorData kUpArrowCursorData = { { 15, 0 }, { @@ -44,7 +45,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData UpDownArrowCursorData = + static constexpr CursorData kUpDownArrowCursorData = { { 17, 15 }, { @@ -69,7 +70,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData ZZZCursorData = + static constexpr CursorData kZzzCursorData = { { 0, 0 }, { @@ -94,7 +95,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData DiagonalArrowCursorData = + static constexpr CursorData kDiagonalArrowCursorData = { { 0, 0 }, { @@ -119,7 +120,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData PickerArrowCursorData = + static constexpr CursorData kPickerArrowCursorData = { { 15, 31 }, { @@ -144,7 +145,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData TreeDownCursorData = + static constexpr CursorData kTreeDownCursorData = { { 7, 31 }, { @@ -169,7 +170,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData FountainDownCursorData = + static constexpr CursorData kFountainDownCursorData = { { 7, 31 }, { @@ -194,7 +195,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData StatueDownCursorData = + static constexpr CursorData kStatueDownCursorData = { { 7, 31 }, { @@ -219,7 +220,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData BenchDownCursorData = + static constexpr CursorData kBenchDownCursorData = { { 7, 31 }, { @@ -244,7 +245,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData CrossHairCursorData = + static constexpr CursorData kCrossHairCursorData = { { 15, 15 }, { @@ -269,7 +270,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData BinDownCursorData = + static constexpr CursorData kBinDownCursorData = { { 7, 31 }, { @@ -294,7 +295,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData LampPostDownCursorData = + static constexpr CursorData kLampPostDownCursorData = { { 7, 31 }, { @@ -319,7 +320,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData FenceDownCursorData = + static constexpr CursorData kFenceDownCursorData = { { 7, 31 }, { @@ -344,7 +345,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData FlowerDownCursorData = + static constexpr CursorData kFlowerDownCursorData = { { 7, 31 }, { @@ -369,7 +370,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData FootpathDownCursorData = + static constexpr CursorData kFootpathDownCursorData = { { 7, 31 }, { @@ -394,7 +395,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData DigDownCursorData = + static constexpr CursorData kDigDownCursorData = { { 7, 31 }, { @@ -419,7 +420,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData WaterDownCursorData = + static constexpr CursorData kWaterDownCursorData = { { 7, 31 }, { @@ -444,7 +445,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData HouseDownCursorData = + static constexpr CursorData kHouseDownCursorData = { { 7, 31 }, { @@ -469,7 +470,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData VolcanoDownCursorData = + static constexpr CursorData kVolcanoDownCursorData = { { 7, 31 }, { @@ -494,7 +495,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData WalkDownCursorData = + static constexpr CursorData kWalkDownCursorData = { { 7, 31 }, { @@ -519,7 +520,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData PaintDownCursorData = + static constexpr CursorData kPaintDownCursorData = { { 8, 30 }, { @@ -544,7 +545,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData EntranceDownCursorData = + static constexpr CursorData kEntranceDownCursorData = { { 7, 31 }, { @@ -569,7 +570,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData HandOpenDownCursorData = + static constexpr CursorData kHandOpenDownCursorData = { { 14, 15 }, { @@ -594,7 +595,7 @@ namespace OpenRCT2::Ui } }; - static constexpr CursorData HandClosedDownCursorData = + static constexpr CursorData kHandClosedDownCursorData = { { 14, 15 }, { @@ -619,39 +620,38 @@ namespace OpenRCT2::Ui } }; - static constexpr const CursorData * RawCursorData[] = - { - nullptr, // CURSOR_ARROW - &BlankCursorData, // CURSOR_BLANK - &UpArrowCursorData, // CURSOR_UP_ARROW - &UpDownArrowCursorData, // CURSOR_UP_DOWN_ARROW - nullptr, // CURSOR_HAND_POINT - &ZZZCursorData, // CURSOR_ZZZ - &DiagonalArrowCursorData, // CURSOR_DIAGONAL_ARROWS - &PickerArrowCursorData, // CURSOR_PICKER - &TreeDownCursorData, // CURSOR_TREE_DOWN - &FountainDownCursorData, // CURSOR_FOUNTAIN_DOWN - &StatueDownCursorData, // CURSOR_STATUE_DOWN - &BenchDownCursorData, // CURSOR_BENCH_DOWN - &CrossHairCursorData, // CURSOR_CROSS_HAIR - &BinDownCursorData, // CURSOR_BIN_DOWN - &LampPostDownCursorData, // CURSOR_LAMPPOST_DOWN - &FenceDownCursorData, // CURSOR_FENCE_DOWN - &FlowerDownCursorData, // CURSOR_FLOWER_DOWN - &FootpathDownCursorData, // CURSOR_PATH_DOWN - &DigDownCursorData, // CURSOR_DIG_DOWN - &WaterDownCursorData, // CURSOR_WATER_DOWN - &HouseDownCursorData, // CURSOR_HOUSE_DOWN - &VolcanoDownCursorData, // CURSOR_VOLCANO_DOWN - &WalkDownCursorData, // CURSOR_WALK_DOWN - &PaintDownCursorData, // CURSOR_PAINT_DOWN - &EntranceDownCursorData, // CURSOR_ENTRANCE_DOWN - &HandOpenDownCursorData, // CURSOR_HAND_OPEN - &HandClosedDownCursorData, // CURSOR_HAND_CLOSED + static constexpr const CursorData* RawCursorData[] = { + nullptr, // CursorID::Arrow + &kBlankCursorData, // CursorID::Blank + &kUpArrowCursorData, // CursorID::UpArrow + &kUpDownArrowCursorData, // CursorID::UpDownArrow + nullptr, // CursorID::HandPoint + &kZzzCursorData, // CursorID::ZZZ + &kDiagonalArrowCursorData, // CursorID::DiagonalArrows + &kPickerArrowCursorData, // CursorID::Picker + &kTreeDownCursorData, // CursorID::TreeDown + &kFountainDownCursorData, // CursorID::FountainDown + &kStatueDownCursorData, // CursorID::StatueDown + &kBenchDownCursorData, // CursorID::BenchDown + &kCrossHairCursorData, // CursorID::CrossHair + &kBinDownCursorData, // CursorID::BinDown + &kLampPostDownCursorData, // CursorID::LamppostDown + &kFenceDownCursorData, // CursorID::FenceDown + &kFlowerDownCursorData, // CursorID::FlowerDown + &kFootpathDownCursorData, // CursorID::PathDown + &kDigDownCursorData, // CursorID::DigDown + &kWaterDownCursorData, // CursorID::WaterDown + &kHouseDownCursorData, // CursorID::HouseDown + &kVolcanoDownCursorData, // CursorID::VolcanoDown + &kWalkDownCursorData, // CursorID::WalkDown + &kPaintDownCursorData, // CursorID::PaintDown + &kEntranceDownCursorData, // CursorID::EntranceDown + &kHandOpenDownCursorData, // CursorID::HandOpen + &kHandClosedDownCursorData, // CursorID::HandClosed }; // clang-format on - const CursorData* CursorRepository::GetCursorData(CursorID cursorId) + const CursorData* getCursorData(CursorID cursorId) { const CursorData* result = nullptr; if (cursorId != CursorID::Undefined && cursorId != CursorID::Count) diff --git a/src/openrct2-ui/CursorData.h b/src/openrct2-ui/CursorData.h new file mode 100644 index 0000000000..f0a4dc60c8 --- /dev/null +++ b/src/openrct2-ui/CursorData.h @@ -0,0 +1,33 @@ +/***************************************************************************** + * Copyright (c) 2014-2024 OpenRCT2 developers + * + * For a complete list of all authors, please refer to contributors.md + * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2 + * + * OpenRCT2 is licensed under the GNU General Public License version 3. + *****************************************************************************/ + +#pragma once + +#include + +namespace OpenRCT2::Ui +{ + constexpr size_t kCursorBitWidth = 32; + constexpr size_t kCursorHeight = 4; + constexpr size_t kRawCursorSize = kCursorBitWidth * kCursorBitWidth; + constexpr size_t kEncodedCursorSize = kRawCursorSize / 8; + + struct CursorData + { + struct HotSpot + { + int16_t X; + int16_t Y; + } HotSpot; + uint8_t Data[kEncodedCursorSize]; + uint8_t Mask[kEncodedCursorSize]; + }; + + const CursorData* getCursorData(CursorID cursorId); +} // namespace OpenRCT2::Ui diff --git a/src/openrct2-ui/CursorRepository.cpp b/src/openrct2-ui/CursorRepository.cpp index 3d06f1e42b..39067e3808 100644 --- a/src/openrct2-ui/CursorRepository.cpp +++ b/src/openrct2-ui/CursorRepository.cpp @@ -9,6 +9,8 @@ #include "CursorRepository.h" +#include "CursorData.h" + #include #include #include @@ -94,11 +96,11 @@ SDL_Cursor* CursorRepository::Create(const CursorData* cursorInfo, uint8_t scale { const auto integer_scale = static_cast(round(scale)); - auto data = ScaleDataArray(cursorInfo->Data, CURSOR_BIT_WIDTH, CURSOR_HEIGHT, static_cast(integer_scale)); - auto mask = ScaleDataArray(cursorInfo->Mask, CURSOR_BIT_WIDTH, CURSOR_HEIGHT, static_cast(integer_scale)); + auto data = ScaleDataArray(cursorInfo->Data, kCursorBitWidth, kCursorHeight, static_cast(integer_scale)); + auto mask = ScaleDataArray(cursorInfo->Mask, kCursorBitWidth, kCursorHeight, static_cast(integer_scale)); auto* cursor = SDL_CreateCursor( - data.data(), mask.data(), BASE_CURSOR_WIDTH * integer_scale, BASE_CURSOR_HEIGHT * integer_scale, + data.data(), mask.data(), kBaseCursorWidth * integer_scale, kBaseCursorHeight * integer_scale, cursorInfo->HotSpot.X * integer_scale, cursorInfo->HotSpot.Y * integer_scale); return cursor; @@ -126,7 +128,7 @@ void CursorRepository::GenerateScaledCursorSetHolder(uint8_t scale) case CursorID::HandPoint: return SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND); default: - return this->Create(GetCursorData(cursorId), scale); + return this->Create(getCursorData(cursorId), scale); } }; _scaledCursors.emplace(scale, cursorGenerator); diff --git a/src/openrct2-ui/CursorRepository.h b/src/openrct2-ui/CursorRepository.h index 1be1987a41..ad0efe7d05 100644 --- a/src/openrct2-ui/CursorRepository.h +++ b/src/openrct2-ui/CursorRepository.h @@ -19,6 +19,8 @@ struct SDL_Cursor; namespace OpenRCT2::Ui { + struct CursorData; + class CursorRepository { private: @@ -50,8 +52,8 @@ namespace OpenRCT2::Ui } }; - constexpr static int32_t BASE_CURSOR_WIDTH = 32; - constexpr static int32_t BASE_CURSOR_HEIGHT = 32; + constexpr static int32_t kBaseCursorWidth = 32; + constexpr static int32_t kBaseCursorHeight = 32; CursorID _currentCursor = CursorID::Undefined; uint8_t _currentCursorScale = 1; @@ -68,6 +70,5 @@ namespace OpenRCT2::Ui private: SDL_Cursor* Create(const CursorData* cursorInfo, uint8_t scale); void GenerateScaledCursorSetHolder(uint8_t scale); - static const CursorData* GetCursorData(CursorID cursorId); }; } // namespace OpenRCT2::Ui diff --git a/src/openrct2-ui/libopenrct2ui.vcxproj b/src/openrct2-ui/libopenrct2ui.vcxproj index 2ac5fd64f9..dd474ce56a 100644 --- a/src/openrct2-ui/libopenrct2ui.vcxproj +++ b/src/openrct2-ui/libopenrct2ui.vcxproj @@ -46,6 +46,7 @@ + diff --git a/src/openrct2/interface/Cursors.h b/src/openrct2/interface/Cursors.h index b18d1b43ce..4915f47e79 100644 --- a/src/openrct2/interface/Cursors.h +++ b/src/openrct2/interface/Cursors.h @@ -50,19 +50,3 @@ namespace OpenRCT2::Cursor { CursorID FromString(const std::string& s, CursorID defaultValue); } - -namespace OpenRCT2::Ui -{ - constexpr size_t CURSOR_BIT_WIDTH = 32; - constexpr size_t CURSOR_HEIGHT = 4; - struct CursorData - { - struct HotSpot - { - int16_t X; - int16_t Y; - } HotSpot; - uint8_t Data[CURSOR_BIT_WIDTH * CURSOR_HEIGHT]; - uint8_t Mask[CURSOR_BIT_WIDTH * CURSOR_HEIGHT]; - }; -} // namespace OpenRCT2::Ui From 7aaff77125c5f597b3c4f4a6c93edd59501d96a1 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 3 Aug 2024 20:38:29 +0200 Subject: [PATCH 2/4] Replace hardcoded cursor bytes with ASCII art bitmaps --- src/openrct2-ui/CursorData.cpp | 1449 +++++++++++++++++++------------- 1 file changed, 870 insertions(+), 579 deletions(-) diff --git a/src/openrct2-ui/CursorData.cpp b/src/openrct2-ui/CursorData.cpp index 391c952608..9add2b71e3 100644 --- a/src/openrct2-ui/CursorData.cpp +++ b/src/openrct2-ui/CursorData.cpp @@ -9,616 +9,908 @@ #include "CursorData.h" +#include #include #include namespace OpenRCT2::Ui { - // clang-format off - static constexpr CursorData kBlankCursorData = - { - { 0, 0 }, { 0 }, { 0 } - }; + constexpr char rawTransparent = ' '; + constexpr char rawWhite = '.'; + constexpr char rawBlack = 'X'; - static constexpr CursorData kUpArrowCursorData = + constexpr static CursorData cursorFromBitMap(int x, int y, std::string_view bitmap) { - { 15, 0 }, - { - 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x04, 0x10, 0x00, - 0x00, 0x08, 0x08, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x1E, 0x3C, 0x00, 0x00, 0x02, 0x20, 0x00, - 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, 0x00, 0x02, 0x20, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, - 0x00, 0x0F, 0xF8, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + assert(bitmap.length() == kRawCursorSize); - static constexpr CursorData kUpDownArrowCursorData = - { - { 17, 15 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0xA0, 0x00, - 0x00, 0x05, 0x50, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x21, 0x42, 0x00, - 0x00, 0x1D, 0xDC, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x02, 0x20, 0x00, - 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x00, 0x05, 0xD0, 0x00, 0x00, 0x1D, 0x5C, 0x00, - 0x00, 0x21, 0x42, 0x00, 0x00, 0x17, 0x74, 0x00, 0x00, 0x0A, 0x28, 0x00, 0x00, 0x05, 0x50, 0x00, - 0x00, 0x02, 0xA0, 0x00, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x07, 0x70, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x3F, 0x7E, 0x00, - 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x03, 0xE0, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x03, 0xE0, 0x00, - 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x07, 0xF0, 0x00, 0x00, 0x1F, 0x7C, 0x00, - 0x00, 0x3F, 0x7E, 0x00, 0x00, 0x1F, 0x7C, 0x00, 0x00, 0x0E, 0x38, 0x00, 0x00, 0x07, 0x70, 0x00, - 0x00, 0x03, 0xE0, 0x00, 0x00, 0x01, 0xC0, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + CursorData newCursor{}; + newCursor.HotSpot.X = x; + newCursor.HotSpot.Y = y; - static constexpr CursorData kZzzCursorData = - { - { 0, 0 }, + uint8_t curBit{}; + uint16_t curPixel{}; + uint8_t dataByte{}, maskByte{}; + for (char rawPixel : bitmap) { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x00, 0x00, 0x03, 0xE2, 0x00, 0x00, 0xFC, 0x34, 0x00, 0x01, 0x07, 0x62, 0x00, 0x3F, 0xEA, 0xDC, - 0x00, 0x40, 0xD4, 0x20, 0x00, 0x3D, 0xBB, 0xC0, 0x3F, 0xCB, 0x04, 0x00, 0x40, 0x34, 0xF8, 0x00, - 0x40, 0x2F, 0x00, 0x00, 0x3C, 0x40, 0x80, 0x00, 0x08, 0xBF, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, - 0x23, 0xC0, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x40, 0x20, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, - 0x00, 0x00, 0x03, 0xFE, 0x00, 0x00, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE, 0x00, 0x3F, 0xFB, 0xDC, - 0x00, 0x7F, 0xF7, 0xE0, 0x00, 0x3F, 0xFB, 0xC0, 0x3F, 0xCF, 0xFC, 0x00, 0x7F, 0xFC, 0xF8, 0x00, - 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, 0x00, 0x0F, 0xBF, 0x00, 0x00, 0x1F, 0x00, 0x00, 0x00, - 0x3F, 0xC0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x7F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + uint8_t dataBit{}, maskBit{}; + switch (rawPixel) + { + case rawBlack: + dataBit = 1; + maskBit = 1; + break; + case rawWhite: + dataBit = 0; + maskBit = 1; + break; + case rawTransparent: + dataBit = 0; + maskBit = 0; + break; + default: + assert("Invalid character in cursor bitmap!"); + } - static constexpr CursorData kDiagonalArrowCursorData = - { - { 0, 0 }, - { - 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, - 0x48, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, - 0x00, 0x80, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, - 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0xFE, 0x00, 0x00, 0x00, 0xFC, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, 0xF8, 0x00, 0x00, 0x00, - 0xFC, 0x00, 0x00, 0x00, 0xCE, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, - 0x01, 0xC2, 0x00, 0x00, 0x00, 0xE6, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, - 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + dataByte |= (dataBit << (7 - curBit)); + maskByte |= (maskBit << (7 - curBit)); - static constexpr CursorData kPickerArrowCursorData = - { - { 15, 31 }, - { - 0x00, 0x07, 0xC0, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x17, 0xB0, 0x00, - 0x00, 0x17, 0xB0, 0x00, 0x00, 0x13, 0x30, 0x00, 0x00, 0x08, 0x60, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x17, 0x30, 0x00, 0x00, 0x12, 0x30, 0x00, 0x00, 0x21, 0x18, 0x00, - 0x00, 0x23, 0x18, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x44, 0x8C, 0x00, 0x00, 0x88, 0x46, 0x00, - 0x00, 0x90, 0x26, 0x00, 0x01, 0x10, 0x23, 0x00, 0x01, 0x20, 0x13, 0x00, 0x02, 0x40, 0x09, 0x80, - 0x02, 0x40, 0x09, 0x80, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, - 0x04, 0x80, 0x04, 0xC0, 0x04, 0x80, 0x04, 0xC0, 0x04, 0x40, 0x08, 0xC0, 0x02, 0x40, 0x09, 0x80, - 0x01, 0x20, 0x13, 0x00, 0x00, 0x90, 0x26, 0x00, 0x00, 0x68, 0x5C, 0x00, 0x00, 0x1C, 0xF0, 0x00, - }, - { - 0x00, 0x07, 0xC0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, - 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x0F, 0xE0, 0x00, - 0x00, 0x0F, 0xE0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x3F, 0xF8, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0x7C, 0xFC, 0x00, 0x00, 0xF8, 0x7E, 0x00, - 0x00, 0xF0, 0x3E, 0x00, 0x01, 0xF0, 0x3F, 0x00, 0x01, 0xE0, 0x1F, 0x00, 0x03, 0xC0, 0x0F, 0x80, - 0x03, 0xC0, 0x0F, 0x80, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, - 0x07, 0x80, 0x07, 0xC0, 0x07, 0x80, 0x07, 0xC0, 0x07, 0xC0, 0x0F, 0xC0, 0x03, 0xC0, 0x0F, 0x80, - 0x01, 0xE0, 0x1F, 0x00, 0x00, 0xF0, 0x3E, 0x00, 0x00, 0x78, 0x7C, 0x00, 0x00, 0x1C, 0xF0, 0x00, - } - }; + // Save dataBit once 8 chars have been processed. + curBit = (curBit + 1) % 8; + if (curBit == 0) + { + newCursor.Data[curPixel] = dataByte; + newCursor.Mask[curPixel] = maskByte; - static constexpr CursorData kTreeDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0x89, 0xC0, 0x00, 0x02, 0x06, 0x20, - 0x00, 0x07, 0x00, 0x18, 0x00, 0x07, 0x40, 0x04, 0x00, 0x03, 0x80, 0x04, 0x00, 0x01, 0xC0, 0x02, - 0x00, 0x03, 0x82, 0x02, 0x00, 0x03, 0xD0, 0x04, 0x00, 0x07, 0xF9, 0x08, 0x00, 0x0F, 0x6E, 0x04, - 0x00, 0x0E, 0xB8, 0x82, 0x00, 0x0F, 0x44, 0x22, 0x00, 0x0F, 0xA8, 0x46, 0x00, 0x0F, 0xFC, 0x16, - 0x00, 0x07, 0xEE, 0x8C, 0x0F, 0x81, 0xFF, 0xD8, 0x08, 0x80, 0x7D, 0xF0, 0x08, 0x80, 0x3A, 0x00, - 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x1A, 0x00, 0x08, 0x80, 0x12, 0x00, 0x08, 0x80, 0x12, 0x00, - 0x08, 0x80, 0x11, 0x00, 0xF8, 0xF8, 0x60, 0x80, 0x40, 0x11, 0x80, 0x60, 0x20, 0x22, 0x09, 0x90, - 0x10, 0x41, 0xD5, 0x60, 0x08, 0x80, 0x22, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x01, 0xF9, 0xC0, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x07, 0xFF, 0xFC, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFE, - 0x00, 0x03, 0xFF, 0xFE, 0x00, 0x03, 0xFF, 0xFC, 0x00, 0x07, 0xFF, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, - 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, 0x00, 0x0F, 0xFF, 0xFE, - 0x00, 0x07, 0xFF, 0xFC, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xF0, 0x0F, 0x80, 0x3E, 0x00, - 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, 0x0F, 0x80, 0x1E, 0x00, - 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x7F, 0x80, 0x7F, 0xF1, 0xFF, 0xE0, 0x3F, 0xE3, 0xFF, 0xF0, - 0x1F, 0xC1, 0xF7, 0x60, 0x0F, 0x80, 0x22, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, + dataByte = 0; + maskByte = 0; + curPixel++; + } } - }; - static constexpr CursorData kFountainDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00, - 0x00, 0x00, 0x0A, 0x00, 0x00, 0x00, 0x7B, 0xC0, 0x00, 0x01, 0x8B, 0x30, 0x00, 0x02, 0x17, 0xC8, - 0x00, 0x02, 0x0F, 0x88, 0x0F, 0x83, 0x80, 0x38, 0x08, 0x82, 0x7F, 0xD8, 0x08, 0x81, 0x01, 0xF0, - 0x08, 0x80, 0xE3, 0xE0, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x17, 0x00, 0x08, 0x80, 0x13, 0x00, - 0x08, 0x80, 0x13, 0x00, 0xF8, 0xF8, 0x27, 0x80, 0x40, 0x10, 0x4E, 0xC0, 0x20, 0x20, 0x80, 0xE0, - 0x10, 0x40, 0xC1, 0xA0, 0x08, 0x80, 0x7F, 0xC0, 0x05, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x01, 0x04, 0x00, 0x00, 0x10, 0x10, 0x81, 0x00, 0x00, 0x41, 0x14, 0x00, 0x05, 0x08, 0x20, - 0x00, 0x00, 0x22, 0x81, 0x00, 0x00, 0x88, 0x10, 0x00, 0x00, 0x10, 0x40, 0x00, 0x00, 0x02, 0x00, - 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0E, 0x00, - 0x00, 0x00, 0x0E, 0x00, 0x00, 0x00, 0x7F, 0xC0, 0x00, 0x01, 0xFF, 0xF0, 0x00, 0x03, 0xFF, 0xF8, - 0x00, 0x03, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x83, 0xFF, 0xF8, 0x0F, 0x81, 0xFF, 0xF0, - 0x0F, 0x80, 0xFF, 0xE0, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x00, - 0x0F, 0x80, 0x1F, 0x00, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x7F, 0xC0, 0x3F, 0xE0, 0xFF, 0xE0, - 0x1F, 0xC0, 0xFF, 0xE0, 0x0F, 0x80, 0x7F, 0xC0, 0x07, 0x00, 0x1F, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + return newCursor; + } - static constexpr CursorData kStatueDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30, - 0x00, 0x02, 0x84, 0x98, 0x00, 0x01, 0x44, 0x98, 0x00, 0x00, 0xB5, 0xA8, 0x00, 0x00, 0x4A, 0xD0, - 0x00, 0x00, 0x21, 0x20, 0x00, 0x00, 0x20, 0x40, 0x00, 0x00, 0x10, 0x80, 0x00, 0x00, 0x10, 0x80, - 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, - 0x00, 0x00, 0x05, 0x00, 0x0F, 0x80, 0x08, 0x80, 0x08, 0x80, 0x04, 0x80, 0x08, 0x80, 0x05, 0x00, - 0x08, 0x80, 0x0D, 0x00, 0x08, 0x80, 0x09, 0x00, 0x08, 0x80, 0x3F, 0x80, 0x08, 0x80, 0x20, 0x80, - 0x08, 0x80, 0x20, 0x80, 0xF8, 0xF8, 0x20, 0x80, 0x40, 0x10, 0x20, 0x80, 0x20, 0x20, 0x20, 0x80, - 0x10, 0x40, 0x7F, 0xC0, 0x08, 0x80, 0x80, 0x20, 0x05, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x10, 0x00, 0x07, 0x03, 0x30, - 0x00, 0x03, 0x87, 0x98, 0x00, 0x01, 0xC7, 0x98, 0x00, 0x00, 0xF7, 0xB8, 0x00, 0x00, 0x7E, 0xF0, - 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, 0x3F, 0xC0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x00, 0x1F, 0x80, - 0x00, 0x00, 0x0F, 0x00, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, - 0x00, 0x00, 0x07, 0x00, 0x0F, 0x80, 0x0F, 0x80, 0x0F, 0x80, 0x07, 0x80, 0x0F, 0x80, 0x07, 0x00, - 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x0F, 0x00, 0x0F, 0x80, 0x3F, 0x80, 0x0F, 0x80, 0x3F, 0x80, - 0x0F, 0x80, 0x3F, 0x80, 0xFF, 0xF8, 0x3F, 0x80, 0x7F, 0xF0, 0x3F, 0x80, 0x3F, 0xE0, 0x3F, 0x80, - 0x1F, 0xC0, 0x7F, 0xC0, 0x0F, 0x80, 0xFF, 0xE0, 0x07, 0x00, 0xFF, 0xE0, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kBlankCursorData = { { 0, 0 }, { 0 }, { 0 } }; - static constexpr CursorData kBenchDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x80, 0x00, - 0x00, 0x04, 0x60, 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x06, 0x06, 0x00, 0x00, 0x05, 0x81, 0x80, - 0x00, 0x05, 0x60, 0x60, 0x00, 0x0D, 0x18, 0x18, 0x00, 0x33, 0x06, 0x04, 0x00, 0xC0, 0xC1, 0x84, - 0x00, 0xF0, 0x30, 0x64, 0x00, 0xAC, 0x0C, 0x1C, 0x00, 0xA7, 0x03, 0x14, 0x00, 0x40, 0xC0, 0xD4, - 0x00, 0x00, 0xF0, 0x34, 0x0F, 0x80, 0xAC, 0x0C, 0x08, 0x80, 0xA3, 0x3C, 0x08, 0x80, 0x41, 0xD4, - 0x08, 0x80, 0x01, 0xD4, 0x08, 0x80, 0x01, 0x48, 0x08, 0x80, 0x01, 0x40, 0x08, 0x80, 0x00, 0x80, - 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x80, 0x00, - 0x00, 0x07, 0xE0, 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x07, 0xFE, 0x00, 0x00, 0x07, 0xFF, 0x80, - 0x00, 0x07, 0x7F, 0xE0, 0x00, 0x0F, 0x1F, 0xF8, 0x00, 0x3F, 0x07, 0xFC, 0x00, 0xFF, 0xC1, 0xFC, - 0x00, 0xFF, 0xF0, 0x7C, 0x00, 0xEF, 0xFC, 0x1C, 0x00, 0xE7, 0xFF, 0x1C, 0x00, 0x40, 0xFF, 0xDC, - 0x00, 0x00, 0xFF, 0xFC, 0x0F, 0x80, 0xEF, 0xFC, 0x0F, 0x80, 0xE3, 0xFC, 0x0F, 0x80, 0x41, 0xDC, - 0x0F, 0x80, 0x01, 0xDC, 0x0F, 0x80, 0x01, 0xC8, 0x0F, 0x80, 0x01, 0xC0, 0x0F, 0x80, 0x00, 0x80, - 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kUpArrowCursorData = cursorFromBitMap( + 16, 0, + " X " + " X.X " + " X...X " + " X.....X " + " X.......X " + " X.........X " + " XXXX...XXXX " + " X...X " + " X...X " + " X...X " + " X...X " + " X...X " + " XXXXX " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " "); - static constexpr CursorData kCrossHairCursorData = - { - { 15, 15 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80, - 0x10, 0x15, 0x40, 0x40, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, - 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0F, 0xE2, 0x3F, 0x80, - 0x1F, 0xF7, 0x7F, 0xC0, 0x0F, 0xE2, 0x3F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, - 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kUpDownArrowCursorData = cursorFromBitMap( + 16, 16, + " " + " X " + " X.X " + " X.X.X " + " X.X X.X " + " X.X X.X " + " X.XXX XXX.X " + " X....X X....X " + " XXX.XXX.XXX " + " X.....X " + " XXXXX " + " " + " " + " X " + " X.X " + " X...X " + " X.X " + " X " + " " + " " + " XXXXX " + " X.....X " + " X.XXX.X " + " XXX.X X.XXX " + " X....X X....X " + " X.XXX XXX.X " + " X.X X.X " + " X.X X.X " + " X.X.X " + " X.X " + " X " + " "); - static constexpr CursorData kBinDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xC3, 0x80, 0x00, 0x01, 0x00, 0xC0, 0x00, 0x02, 0x57, 0xE0, - 0x00, 0x02, 0x00, 0x60, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0x01, 0xC0, 0x00, 0x01, 0x40, 0xC0, - 0x00, 0x01, 0x50, 0xC0, 0x0F, 0x81, 0x50, 0x40, 0x08, 0x81, 0x51, 0x40, 0x08, 0x81, 0x51, 0x40, - 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, 0x08, 0x81, 0x55, 0x40, - 0x08, 0x81, 0x55, 0x40, 0xF8, 0xF9, 0x55, 0x40, 0x40, 0x11, 0x55, 0x40, 0x20, 0x21, 0xFF, 0xC0, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0xFF, 0x80, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x01, 0xFF, 0xC0, - 0x00, 0x01, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, - 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, 0x0F, 0x81, 0xFF, 0xC0, - 0x0F, 0x81, 0xFF, 0xC0, 0xFF, 0xF9, 0xFF, 0xC0, 0x7F, 0xF1, 0xFF, 0xC0, 0x3F, 0xE1, 0xFF, 0xC0, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kZzzCursorData = cursorFromBitMap( + 0, 0, + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " XXX " + " XXXXX...X " + " XXXXXX....XX.X " + " X.....XXX.XX...X " + " XXXXXXXXX.X X.XX XXX " + " X......XX.X X....X " + " XXXX.XX.XXX XXXX " + " XXXXXXXX X.XX.....X " + " X........XX.X XXXXX " + " X........X.XXXX " + " XXXX...X......X " + " X...X XXXXXX " + " X...X " + " X...XXXX " + " X........X " + " X........X " + " XXXXXXXX " + " " + " " + " " + " "); - static constexpr CursorData kLampPostDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x32, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x94, 0x80, - 0x00, 0x01, 0xF7, 0xC0, 0x00, 0x00, 0x94, 0x80, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x14, 0x00, - 0x00, 0x00, 0x14, 0x00, 0x0F, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, - 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x14, 0x00, 0x08, 0x80, 0x1C, 0x00, - 0x08, 0x80, 0x1C, 0x00, 0xF8, 0xF8, 0x32, 0x00, 0x40, 0x10, 0x61, 0x00, 0x20, 0x20, 0x61, 0x00, - 0x10, 0x40, 0x71, 0x00, 0x08, 0x80, 0x7D, 0x00, 0x05, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0xFF, 0x80, - 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x7F, 0x00, 0x00, 0x00, 0x3E, 0x00, - 0x00, 0x00, 0x3E, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x9C, 0x80, - 0x00, 0x01, 0xFF, 0xC0, 0x00, 0x00, 0x9C, 0x80, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x1C, 0x00, - 0x00, 0x00, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, - 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, 0x0F, 0x80, 0x1C, 0x00, - 0x0F, 0x80, 0x1C, 0x00, 0xFF, 0xF8, 0x3E, 0x00, 0x7F, 0xF0, 0x7F, 0x00, 0x3F, 0xE0, 0x7F, 0x00, - 0x1F, 0xC0, 0x7F, 0x00, 0x0F, 0x80, 0x7F, 0x00, 0x07, 0x00, 0xFF, 0x80, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kDiagonalArrowCursorData = cursorFromBitMap( + 7, 7, + "....... " + ".XXXX. " + ".XXX. " + ".XXX. " + ".X..X. " + ".. .X. " + ". .X. " + " .X. " + " .X. . " + " .X. .. " + " .X..X. " + " .XXX. " + " .XXX. " + " .XXXX. " + " ....... " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " " + " "); - static constexpr CursorData kFenceDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2C, 0x00, 0x00, 0x00, 0x4E, 0x60, 0x00, 0x00, - 0x43, 0xB0, 0x00, 0x00, 0x20, 0xB1, 0x80, 0x00, 0x2C, 0x3A, 0xC0, 0x00, 0x2F, 0x0E, 0xC6, 0x00, - 0x2C, 0x82, 0xCB, 0x00, 0x2C, 0xB0, 0x6B, 0x18, 0x6C, 0xBC, 0x1B, 0x2C, 0x7C, 0xB2, 0x83, 0x2C, - 0x1E, 0xB2, 0xE1, 0xAC, 0x07, 0xB2, 0xD8, 0x6C, 0x01, 0xF2, 0xCA, 0x0C, 0x00, 0x7A, 0xCB, 0x86, - 0x00, 0x1E, 0xCB, 0x66, 0x0F, 0x87, 0xCB, 0x2E, 0x08, 0x81, 0xEB, 0x2C, 0x08, 0x80, 0x7B, 0x2C, - 0x08, 0x80, 0x1F, 0x2C, 0x08, 0x80, 0x07, 0xAC, 0x08, 0x80, 0x01, 0xEC, 0x08, 0x80, 0x00, 0x78, - 0x08, 0x80, 0x00, 0x18, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x3C, 0x00, 0x00, 0x00, 0x7E, 0x60, 0x00, 0x00, - 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xF1, 0x80, 0x00, 0x3F, 0xFB, 0xC0, 0x00, 0x3F, 0xFF, 0xC6, 0x00, - 0x3C, 0xFF, 0xCF, 0x00, 0x3C, 0xFF, 0xEF, 0x18, 0x7C, 0xFF, 0xFF, 0x3C, 0x7C, 0xF3, 0xFF, 0x3C, - 0x1E, 0xF3, 0xFF, 0xBC, 0x07, 0xF3, 0xDF, 0xFC, 0x01, 0xF3, 0xCF, 0xFC, 0x00, 0x7B, 0xCF, 0xFE, - 0x00, 0x1F, 0xCF, 0x7E, 0x0F, 0x87, 0xCF, 0x3E, 0x0F, 0x81, 0xEF, 0x3C, 0x0F, 0x80, 0x7F, 0x3C, - 0x0F, 0x80, 0x1F, 0x3C, 0x0F, 0x80, 0x07, 0xBC, 0x0F, 0x80, 0x01, 0xFC, 0x0F, 0x80, 0x00, 0x78, - 0x0F, 0x80, 0x00, 0x18, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kPickerArrowCursorData = cursorFromBitMap( + 15, 31, + " XXXXX " + " X....XX " + " X..XX..XX " + " X.XXXX.XX " + " X.XXXX.XX " + " X..XX..XX " + " X....XX " + " XXXXXXX " + " XXXXXXX " + " X.XXX..XX " + " X..X...XX " + " X....X...XX " + " X...XX...XX " + " X...X X...XX " + " X...X X...XX " + " X...X X...XX " + " X..X X..XX " + " X...X X...XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " X...X X...XX " + " X..X X..XX " + " X..X X..XX " + " X..X X..XX " + " XX.X X.XXX " + " XXX XXXX "); - static constexpr CursorData kFlowerDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x18, 0x44, 0x30, - 0x00, 0x24, 0x54, 0x48, 0x00, 0x22, 0x54, 0x88, 0x00, 0x11, 0x55, 0x10, 0x00, 0x0A, 0xBA, 0xA0, - 0x00, 0x05, 0xBB, 0x40, 0x00, 0x03, 0xC7, 0x80, 0x00, 0x7C, 0x92, 0x7C, 0x00, 0x83, 0x47, 0x82, - 0x01, 0x1D, 0x89, 0xF1, 0x00, 0x83, 0x23, 0x82, 0x00, 0x7C, 0x8A, 0x7C, 0x00, 0x03, 0xE7, 0x80, - 0x00, 0x05, 0xBB, 0x40, 0x0F, 0x8A, 0xBA, 0xA0, 0x08, 0x91, 0x55, 0x10, 0x08, 0x92, 0x54, 0x90, - 0x08, 0x8C, 0x44, 0x6C, 0x08, 0x98, 0x44, 0x32, 0x08, 0xA6, 0x44, 0x42, 0x08, 0xA1, 0x28, 0x82, - 0x08, 0xA0, 0xB9, 0x24, 0xF8, 0xFA, 0xBA, 0x44, 0x40, 0x11, 0x6A, 0x88, 0x20, 0x28, 0xED, 0x10, - 0x10, 0x46, 0x4A, 0x60, 0x08, 0x81, 0x81, 0x80, 0x05, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x7C, 0x00, 0x00, 0x18, 0x7C, 0x30, - 0x00, 0x3C, 0x7C, 0x78, 0x00, 0x3E, 0x7C, 0xF8, 0x00, 0x1F, 0x7D, 0xF0, 0x00, 0x0F, 0xBB, 0xE0, - 0x00, 0x07, 0xBB, 0xC0, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0xFF, 0xFF, 0xFE, - 0x01, 0xFF, 0xFF, 0xFF, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x7C, 0xFE, 0x7C, 0x00, 0x03, 0xFF, 0x80, - 0x00, 0x07, 0xBB, 0xC0, 0x0F, 0x8F, 0xBB, 0xE0, 0x0F, 0x9F, 0x7D, 0xF0, 0x0F, 0x9E, 0x7C, 0xF0, - 0x0F, 0x8C, 0x7C, 0x6C, 0x0F, 0x98, 0x7C, 0x3E, 0x0F, 0xBE, 0x7C, 0x7E, 0x0F, 0xBF, 0x38, 0xFE, - 0x0F, 0xBF, 0xB9, 0xFC, 0xFF, 0xFF, 0xBB, 0xFC, 0x7F, 0xFF, 0xFB, 0xF8, 0x3F, 0xEF, 0xFF, 0xF0, - 0x1F, 0xC7, 0xFF, 0xE0, 0x0F, 0x81, 0xFF, 0x80, 0x07, 0x00, 0x7E, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kTreeDownCursorData = cursorFromBitMap( + 6, 31, + " " + " XXX " + " XX...X XXX " + " X......XX...X " + " XXX...........XX " + " XXX.X...........X " + " XXX............X " + " XXX............X " + " XXX.....X.......X " + " XXXX.X.........X " + " XXXXXXXX..X....X " + " XXXX.XX.XXX......X " + " XXX.X.XXX...X.....X " + " XXXX.X...X....X...X " + " XXXXX.X.X....X...XX " + " XXXXXXXXXX.....X.XX " + " XXXXXX.XXX.X...XX " + " XXXXX XXXXXXXXXXX.XX " + " X...X XXXXX.XXXXX " + " X...X XXX.X " + " X...X XX.X " + " X...X XX.X " + " X...X X..X " + " X...X X..X " + " X...X X...X " + "XXXXX...XXXXX XX.....X " + " X.........X XX........XX " + " X.......X X.....X..XX..X " + " X.....X XXX.X X.X XX " + " X...X X X " + " X.X " + " X "); - static constexpr CursorData kFootpathDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x01, 0x85, 0x80, 0x00, - 0x06, 0x48, 0x60, 0x00, 0x1A, 0x24, 0x58, 0x00, 0x62, 0x3A, 0x46, 0x00, 0x79, 0xC1, 0x45, 0x80, - 0x1E, 0x27, 0xFC, 0x60, 0x07, 0x98, 0x82, 0x58, 0x01, 0xE0, 0x82, 0x46, 0x00, 0x79, 0x45, 0x79, - 0x00, 0x1E, 0x28, 0x87, 0x0F, 0x87, 0x94, 0x9E, 0x08, 0x81, 0xE2, 0x78, 0x08, 0x80, 0x79, 0xE0, - 0x08, 0x80, 0x1F, 0x80, 0x08, 0x80, 0x06, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x01, 0xFF, 0x80, 0x00, - 0x07, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, 0x80, - 0x1F, 0xFF, 0xFF, 0xE0, 0x07, 0xFF, 0xFF, 0xF8, 0x01, 0xFF, 0xFF, 0xFE, 0x00, 0x7F, 0xFF, 0xFF, - 0x00, 0x1F, 0xFF, 0xFF, 0x0F, 0x87, 0xFF, 0xFE, 0x0F, 0x81, 0xFF, 0xF8, 0x0F, 0x80, 0x7F, 0xE0, - 0x0F, 0x80, 0x1F, 0x80, 0x0F, 0x80, 0x06, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kFountainDownCursorData = cursorFromBitMap( + 6, 31, + " . . " + " . . . ." + " . . . . " + " . . . . " + " . . . ." + " . . . " + " . . " + " . " + " . . " + " . " + " X " + " XXX " + " X.X " + " XXXX.XXXX " + " XX...X.XX..XX " + " X....X.XXXXX..X " + " X.....XXXXX...X " + " XXXXX XXX.........XXX " + " X...X X..XXXXXXXXX.XX " + " X...X X.......XXXXX " + " X...X XXX...XXXXX " + " X...X XXXXXXX " + " X...X X.XXX " + " X...X X..XX " + " X...X X..XX " + "XXXXX...XXXXX X..XXXX " + " X.........X X..XXX.XX " + " X.......X X.......XXX " + " X.....X XX.....XX.X " + " X...X XXXXXXXXX " + " X.X XXXXX " + " X "); - static constexpr CursorData kDigDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0xA4, - 0x00, 0x00, 0x01, 0x52, 0x00, 0x00, 0x02, 0x8B, 0x00, 0x00, 0x02, 0x96, 0x00, 0x00, 0x02, 0x6C, - 0x00, 0x00, 0x04, 0x18, 0x00, 0x00, 0x08, 0xF0, 0x00, 0x00, 0x11, 0x80, 0x00, 0x03, 0x2A, 0x00, - 0x00, 0x04, 0xC6, 0x00, 0x00, 0x09, 0x8C, 0x00, 0x00, 0x15, 0x18, 0x00, 0x00, 0x22, 0x30, 0x00, - 0x00, 0x24, 0x78, 0x00, 0x0F, 0xC5, 0xE4, 0x00, 0x08, 0xC7, 0xC4, 0x00, 0x08, 0xC3, 0x28, 0x00, - 0x08, 0xA0, 0x10, 0x00, 0x08, 0x90, 0x20, 0x00, 0x08, 0x88, 0xC0, 0x00, 0x08, 0x87, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0xFC, - 0x00, 0x00, 0x01, 0xDE, 0x00, 0x00, 0x03, 0x8F, 0x00, 0x00, 0x03, 0x9E, 0x00, 0x00, 0x03, 0xFC, - 0x00, 0x00, 0x07, 0xF8, 0x00, 0x00, 0x0F, 0xF0, 0x00, 0x00, 0x1F, 0x80, 0x00, 0x03, 0x3E, 0x00, - 0x00, 0x07, 0xFE, 0x00, 0x00, 0x0F, 0xFC, 0x00, 0x00, 0x1F, 0xF8, 0x00, 0x00, 0x3F, 0xF0, 0x00, - 0x00, 0x3F, 0xF8, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xFC, 0x00, 0x0F, 0xFF, 0xF8, 0x00, - 0x0F, 0xBF, 0xF0, 0x00, 0x0F, 0x9F, 0xE0, 0x00, 0x0F, 0x8F, 0xC0, 0x00, 0x0F, 0x87, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kStatueDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " X X " + " XXX XX XX " + " X.X X..X XX " + " X.X X..X XX " + " X.XX X.XX X.X " + " X..X.X XX.X " + " X....X..X " + " X......X " + " X....X " + " X....X " + " X..X " + " X...X " + " X...X " + " X.X " + " X.X " + " XXXXX X...X " + " X...X X..X " + " X...X X.X " + " X...X XX.X " + " X...X X..X " + " X...X XXXXXXX " + " X...X X.....X " + " X...X X.....X " + "XXXXX...XXXXX X.....X " + " X.........X X.....X " + " X.......X X.....X " + " X.....X XXXXXXXXX " + " X...X X.........X " + " X.X XXXXXXXXXXX " + " X "); - static constexpr CursorData kWaterDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00, - 0x08, 0x20, 0x82, 0x00, 0x14, 0x51, 0x45, 0x00, 0x63, 0x8E, 0x38, 0xC0, 0x88, 0x20, 0x82, 0x20, - 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08, - 0x00, 0x51, 0x45, 0x14, 0x00, 0x8E, 0x38, 0xE2, 0x0F, 0xA0, 0x82, 0x09, 0x08, 0xDF, 0x7D, 0xF6, - 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x80, 0x82, 0x00, 0x08, 0x81, 0x45, 0x00, - 0x08, 0x86, 0x38, 0xC0, 0xF8, 0xF8, 0x82, 0x20, 0x40, 0x17, 0x7D, 0xC0, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x82, 0x00, - 0x08, 0x20, 0x82, 0x00, 0x1C, 0x71, 0xC7, 0x00, 0x7F, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, - 0x77, 0xDF, 0x7D, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x82, 0x08, 0x00, 0x20, 0x82, 0x08, - 0x00, 0x71, 0xC7, 0x1C, 0x00, 0xFF, 0xFF, 0xFE, 0x0F, 0xFF, 0xFF, 0xFF, 0x0F, 0xDF, 0x7D, 0xF6, - 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x80, 0x82, 0x00, 0x0F, 0x81, 0xC7, 0x00, - 0x0F, 0x87, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF, 0xE0, 0x7F, 0xF7, 0x7D, 0xC0, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kBenchDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " XX " + " X.XX " + " X...XX " + " X.....XX " + " XX......XX " + " X.XX......XX " + " X.X XX......XX " + " XX.X XX......XX " + " XX..XX XX......X " + " XX......XX XX....X " + " XXXX......XX XX..X " + " X.X XX......XX XXX " + " X.X XXX......XX X.X " + " X XX......XX X.X " + " XXXX......XX.X " + " XXXXX X.X XX......XX " + " X...X X.X XX..XXXX " + " X...X X XXX X.X " + " X...X XXX X.X " + " X...X X.X X " + " X...X X.X " + " X...X X " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); - static constexpr CursorData kHouseDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x2A, 0x10, - 0x00, 0x00, 0x45, 0xE0, 0x00, 0x00, 0x93, 0x20, 0x00, 0x01, 0x19, 0x20, 0x00, 0x02, 0x0C, 0x20, - 0x00, 0x04, 0x7E, 0x20, 0x00, 0x08, 0x03, 0x20, 0x00, 0x10, 0xFF, 0x90, 0x00, 0x20, 0x00, 0xC8, - 0x00, 0x47, 0xFF, 0xE4, 0x00, 0xF0, 0x00, 0x7E, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, - 0x00, 0x11, 0xEF, 0xD0, 0x00, 0x11, 0x28, 0x50, 0x0F, 0x91, 0x28, 0x50, 0x08, 0x91, 0x28, 0x50, - 0x08, 0x91, 0x2F, 0xD0, 0x08, 0x91, 0x20, 0x10, 0x08, 0x91, 0x20, 0x10, 0x08, 0x9F, 0xFF, 0xF0, - 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0xF0, 0x00, 0x00, 0x3B, 0xF0, - 0x00, 0x00, 0x7D, 0xE0, 0x00, 0x00, 0xFF, 0xE0, 0x00, 0x01, 0xFF, 0xE0, 0x00, 0x03, 0xFF, 0xE0, - 0x00, 0x07, 0xFF, 0xE0, 0x00, 0x0F, 0xFF, 0xE0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0xFF, 0xFF, 0xFE, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, - 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70, 0x0F, 0x9F, 0x38, 0x70, - 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0x3F, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0, - 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kCrossHairCursorData = cursorFromBitMap( + 15, 15, + " " + " " + " " + " " + " " + " X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X " + " " + " XXXXXXX X XXXXXXX " + " X.......X X.X X.......X " + " XXXXXXX X XXXXXXX " + " " + " X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X.X " + " X " + " " + " " + " " + " "); - static constexpr CursorData kVolcanoDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, - 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x17, 0x84, 0x00, 0x00, 0x30, 0x1E, 0x00, - 0x00, 0x76, 0x72, 0x00, 0x00, 0x5A, 0x89, 0x00, 0x00, 0x81, 0x1C, 0x80, 0x03, 0x08, 0x0A, 0x70, - 0x04, 0x18, 0x17, 0x88, 0x18, 0x30, 0x0A, 0xA6, 0x23, 0xC2, 0x07, 0x7F, 0x7C, 0x5F, 0x8F, 0xEC, - 0x40, 0xF0, 0xD8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, - 0x08, 0x80, 0x00, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x08, 0xA0, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x02, 0x40, 0x00, - 0x00, 0x07, 0xB0, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x1F, 0xFC, 0x00, 0x00, 0x3F, 0xFE, 0x00, - 0x00, 0x7F, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0xFF, 0xFF, 0x80, 0x03, 0xFF, 0xFF, 0xF0, - 0x07, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xFE, 0x3F, 0xFF, 0xFF, 0xFF, 0x7C, 0x7F, 0xFF, 0xEC, - 0x40, 0xF0, 0xF8, 0xC0, 0x00, 0x40, 0x20, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kBinDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " " + " " + " " + " " + " XXX " + " X X " + " XXXXX " + " XX....XXX " + " X........XX " + " X..X.X.XXXXXX " + " X..........XX " + " XXXXXXXXXXXXX " + " X.......XXX " + " X.X......XX " + " X.X.X....XX " + " XXXXX X.X.X.....X " + " X...X X.X.X...X.X " + " X...X X.X.X...X.X " + " X...X X.X.X.X.X.X " + " X...X X.X.X.X.X.X " + " X...X X.X.X.X.X.X " + " X...X X.X.X.X.X.X " + " X...X X.X.X.X.X.X " + "XXXXX...XXXXX X.X.X.X.X.X " + " X.........X X.X.X.X.X.X " + " X.......X XXXXXXXXXXX " + " X.....X " + " X...X " + " X.X " + " X "); - static constexpr CursorData kWalkDownCursorData = - { - { 7, 31 }, - { - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x04, 0x40, 0x00, 0x00, 0x04, 0x20, 0x00, 0x00, - 0x02, 0x10, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, - 0x00, 0x12, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00, - 0x02, 0x20, 0x22, 0x00, 0x02, 0x10, 0x21, 0x00, 0x01, 0x08, 0x10, 0x80, 0x00, 0x88, 0x08, 0x80, - 0x00, 0x72, 0x07, 0x20, 0x00, 0x0D, 0x00, 0xD0, 0x0F, 0x89, 0x00, 0x90, 0x08, 0x86, 0x00, 0x60, - 0x08, 0x80, 0x00, 0x00, 0x08, 0x80, 0x0E, 0x00, 0x08, 0x80, 0x11, 0x00, 0x08, 0x80, 0x10, 0x80, - 0x08, 0x80, 0x08, 0x40, 0xF8, 0xF8, 0x04, 0x40, 0x40, 0x10, 0x03, 0x90, 0x20, 0x20, 0x00, 0x68, - 0x10, 0x40, 0x00, 0x48, 0x08, 0x80, 0x00, 0x30, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x07, 0xC0, 0x00, 0x00, 0x07, 0xE0, 0x00, 0x00, - 0x03, 0xF0, 0x00, 0x00, 0x01, 0xF0, 0x00, 0x00, 0x00, 0xE4, 0x00, 0x00, 0x00, 0x1E, 0x00, 0x00, - 0x00, 0x1E, 0x00, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xC0, 0x1C, 0x00, - 0x03, 0xE0, 0x3E, 0x00, 0x03, 0xF0, 0x3F, 0x00, 0x01, 0xF8, 0x1F, 0x80, 0x00, 0xF8, 0x0F, 0x80, - 0x00, 0x72, 0x07, 0x20, 0x00, 0x0F, 0x00, 0xF0, 0x0F, 0x8F, 0x00, 0xF0, 0x0F, 0x86, 0x00, 0x60, - 0x0F, 0x80, 0x00, 0x00, 0x0F, 0x80, 0x0E, 0x00, 0x0F, 0x80, 0x1F, 0x00, 0x0F, 0x80, 0x1F, 0x80, - 0x0F, 0x80, 0x0F, 0xC0, 0xFF, 0xF8, 0x07, 0xC0, 0x7F, 0xF0, 0x03, 0x90, 0x3F, 0xE0, 0x00, 0x78, - 0x1F, 0xC0, 0x00, 0x78, 0x0F, 0x80, 0x00, 0x30, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kLampPostDownCursorData = cursorFromBitMap( + 6, 31, + " XXX " + " X...X " + " X.....X " + " XXXXXXXXX " + " XXXX..X " + " XX....X " + " XX....X " + " XX..X " + " XXXXX " + " XXX " + " X.X " + " X X.X X " + " XXXXX.XXXXX " + " X X.X X " + " X.X " + " X.X " + " X.X " + " XXXXX X.X " + " X...X X.X " + " X...X X.X " + " X...X X.X " + " X...X X.X " + " X...X X.X " + " X...X XXX " + " X...X XXX " + "XXXXX...XXXXX XX..X " + " X.........X XX....X " + " X.......X XX....X " + " X.....X XXX...X " + " X...X XXXXX.X " + " X.X XXXXXXXXX " + " X "); - static constexpr CursorData kPaintDownCursorData = - { - { 8, 30 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFA, - 0x00, 0x00, 0x01, 0xF6, 0x00, 0x00, 0x03, 0xE4, 0x00, 0x03, 0x07, 0xCC, 0x00, 0x07, 0x84, 0x98, - 0x00, 0x0F, 0xC8, 0x70, 0x00, 0x1B, 0xF8, 0x60, 0x00, 0x3D, 0xE0, 0xC0, 0x00, 0x7E, 0xE3, 0x00, - 0x00, 0xFF, 0x62, 0x00, 0x00, 0xDF, 0xBE, 0x00, 0x00, 0x7F, 0xDF, 0x00, 0x00, 0x37, 0xEF, 0x80, - 0x00, 0x1B, 0xF7, 0xC0, 0x07, 0xCF, 0xFB, 0xC0, 0x04, 0x46, 0x9D, 0xC0, 0x04, 0x43, 0x07, 0x80, - 0x04, 0x41, 0x83, 0x00, 0x04, 0x40, 0xC6, 0x00, 0x04, 0x40, 0x6C, 0x00, 0x04, 0x40, 0x28, 0x00, - 0x7C, 0x7C, 0x10, 0x00, 0x20, 0x08, 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, - 0x04, 0x40, 0x00, 0x00, 0x02, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0xFE, - 0x00, 0x00, 0x01, 0xFE, 0x00, 0x00, 0x03, 0xFC, 0x00, 0x03, 0x07, 0xFC, 0x00, 0x07, 0x87, 0xF8, - 0x00, 0x0F, 0xCF, 0xF0, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x3F, 0xFF, 0xC0, 0x00, 0x7F, 0xFF, 0x00, - 0x00, 0xFF, 0xFE, 0x00, 0x00, 0xFF, 0xFE, 0x00, 0x00, 0x7F, 0xFF, 0x00, 0x00, 0x3F, 0xFF, 0x80, - 0x00, 0x1F, 0xFF, 0xC0, 0x07, 0xCF, 0xFF, 0xC0, 0x07, 0xC7, 0xFF, 0xC0, 0x07, 0xC3, 0xFF, 0x80, - 0x07, 0xC1, 0xFF, 0x00, 0x07, 0xC0, 0xFE, 0x00, 0x07, 0xC0, 0x7C, 0x00, 0x07, 0xC0, 0x38, 0x00, - 0x7F, 0xFC, 0x10, 0x00, 0x3F, 0xF8, 0x00, 0x00, 0x1F, 0xF0, 0x00, 0x00, 0x0F, 0xE0, 0x00, 0x00, - 0x07, 0xC0, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kFenceDownCursorData = cursorFromBitMap( + 6, 31, + " " + " XX " + " X.XX " + " X..XXX XX " + " X....XXX.XX " + " X.....X.XX XX " + " X.XX....XXX X.XX " + " X.XXXX....XXX.XX XX " + " X.XX X.....X.XX X.XX " + " X.XX X.XX.....XX X.XX XX " + " XX.XX X.XXXX.....XX.XX X.XX " + " XXXXX X.XX X.X.....XX X.XX " + " XXXX X.XX X.XXX....XX X.XX " + " XXXX.XX X.XX XX....XX.XX " + " XXXXX X.XX X.X.....XX " + " XXXX X.XX X.XXX....XX " + " XXXX.XX X.XX XX..XX " + " XXXXX XXXXX X.XX X.XXX " + " X...X XXXX X.XX X.XX " + " X...X XXXX.XX X.XX " + " X...X XXXXX X.XX " + " X...X XXXX X.XX " + " X...X XXXX.XX " + " X...X XXXX " + " X...X XX " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); - static constexpr CursorData kEntranceDownCursorData = - { - { 7, 31 }, - { - 0x20, 0x00, 0x00, 0x08, 0x50, 0x00, 0x00, 0x14, 0x88, 0x00, 0x00, 0x22, 0x50, 0x00, 0x00, 0x14, - 0x7F, 0xFF, 0xFF, 0xFC, 0x58, 0x00, 0x00, 0x34, 0x54, 0x00, 0x00, 0x54, 0x54, 0x00, 0x00, 0x54, - 0x54, 0x00, 0x00, 0x54, 0x5C, 0x00, 0x00, 0x34, 0x5F, 0xFF, 0xFF, 0xF4, 0x50, 0x00, 0x00, 0x14, - 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, 0x50, 0x00, 0x00, 0x14, - 0x50, 0x00, 0x00, 0x14, 0x5F, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x02, 0xB5, - 0x58, 0x80, 0x00, 0x14, 0xD8, 0x80, 0x00, 0x14, 0x58, 0x80, 0x05, 0x74, 0x08, 0x80, 0x00, 0x00, - 0x08, 0x80, 0x00, 0xD2, 0xF8, 0xF8, 0x0E, 0x00, 0x40, 0x10, 0x00, 0x00, 0x20, 0x20, 0x00, 0x00, - 0x10, 0x40, 0x00, 0x00, 0x08, 0x80, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - }, - { - 0x20, 0x00, 0x00, 0x08, 0x70, 0x00, 0x00, 0x1C, 0xF8, 0x00, 0x00, 0x3E, 0x70, 0x00, 0x00, 0x1C, - 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x77, 0xFF, 0xFF, 0xDC, 0x77, 0xFF, 0xFF, 0xDC, - 0x77, 0xFF, 0xFF, 0xDC, 0x7F, 0xFF, 0xFF, 0xFC, 0x7F, 0xFF, 0xFF, 0xFC, 0x70, 0x00, 0x00, 0x1C, - 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, 0x70, 0x00, 0x00, 0x1C, - 0x70, 0x00, 0x00, 0x1C, 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x02, 0xBD, - 0x7F, 0x80, 0x00, 0x1C, 0xFF, 0x80, 0x00, 0x1C, 0x7F, 0x80, 0x05, 0x7C, 0x0F, 0x80, 0x00, 0x00, - 0x0F, 0x80, 0x00, 0xD2, 0xFF, 0xF8, 0x0E, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x3F, 0xE0, 0x00, 0x00, - 0x1F, 0xC0, 0x00, 0x00, 0x0F, 0x80, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, - } - }; + static constexpr CursorData kFlowerDownCursorData = cursorFromBitMap( + 6, 31, + " X " + " X.X " + " X...X " + " XX X...X XX " + " X..X X.X.X X..X " + " X...X X.X.X X...X " + " X...X X.X.X X...X " + " X.X.X XXX X.X.X " + " X.XX XXX XX.X " + " XXXX...XXXX " + " XXXXX X..X..X XXXXX " + " X.....XX.X...XXXX.....X " + " X...XXX.XX...X..XXXXX...X" + " X.....XX..X...XXX.....X " + " XXXXX X...X.X XXXXX " + " XXXXX..XXXX " + " X.XX XXX XX.X " + " XXXXX X.X.X XXX X.X.X " + " X...X X...X X.X.X X...X " + " X...X X..X X.X.X X..X " + " X...X XX X...X XX XX " + " X...X XX X...X XX..X " + " X...X X..XX X...X X....X " + " X...X X....X X.X X.....X " + " X...X X.....X XXX X..X..X " + "XXXXX...XXXXX.X.X XXX X..X...X " + " X.........X...X.XX.X X.X...X " + " X.......X X...XXX.XX.X...X " + " X.....X XX..X..X.X..XX " + " X...X XX......XX " + " X.X XXXXXX " + " X "); - static constexpr CursorData kHandOpenDownCursorData = - { - { 14, 15 }, - { - 0x00, 0x06, 0x10, 0x00, 0x00, 0x09, 0x38, 0x00, 0x00, 0x09, 0x24, 0x00, 0x03, 0x08, 0xA4, 0x00, - 0x04, 0x88, 0xA4, 0xC0, 0x04, 0x48, 0x63, 0x20, 0x04, 0x24, 0x63, 0x10, 0x06, 0x24, 0x61, 0x90, - 0x02, 0x14, 0x21, 0x90, 0x03, 0x0C, 0x21, 0x10, 0x01, 0x04, 0x21, 0x10, 0x01, 0x86, 0x01, 0x10, - 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, - 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, - 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, 0x00, 0x20, 0x00, 0x10, - 0x0F, 0xC0, 0x00, 0x10, 0x10, 0x00, 0x00, 0x08, 0x14, 0x00, 0x00, 0x08, 0x12, 0x00, 0x00, 0x08, - 0x0F, 0x0F, 0x00, 0x04, 0x01, 0xF9, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0, - }, - { - 0x00, 0x06, 0x10, 0x00, 0x00, 0x0F, 0x38, 0x00, 0x00, 0x0F, 0x3C, 0x00, 0x03, 0x0F, 0xBC, 0x00, - 0x07, 0x8F, 0xBC, 0xC0, 0x07, 0xCF, 0xFF, 0xE0, 0x07, 0xE7, 0xFF, 0xF0, 0x07, 0xE7, 0xFF, 0xF0, - 0x03, 0xF7, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, 0x01, 0xFF, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, - 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x1F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0, 0x00, 0x3F, 0xFF, 0xF0, - 0x0F, 0xFF, 0xFF, 0xF0, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, 0x1F, 0xFF, 0xFF, 0xF8, - 0x0F, 0xFF, 0xFF, 0xFC, 0x01, 0xF9, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0, - } - }; + static constexpr CursorData kFootpathDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " " + " " + " " + " XX " + " XX..XX " + " XX....X.XX " + " XX..X..X....XX " + " XX.X...X..X...X.XX " + " XX...X...XXX.X..X...XX " + " XXXX..XXX.....X.X...X.XX " + " XXXX...X..XXXXXXXXX...XX " + " XXXX..XX...X.....X..X.XX " + " XXXX.....X.....X..X...XX " + " XXXX..X.X...X.X.XXXX..X" + " XXXX...X.X...X....XXX" + " XXXXX XXXX..X.X..X..XXXX " + " X...X XXXX...X..XXXX " + " X...X XXXX..XXXX " + " X...X XXXXXX " + " X...X XX " + " X...X " + " X...X " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); - static constexpr CursorData kHandClosedDownCursorData = - { - { 14, 15 }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x43, 0x10, 0x00, 0x00, 0x41, 0x8C, 0x00, - 0x00, 0x20, 0x87, 0x00, 0x0E, 0x20, 0x42, 0x80, 0x11, 0x98, 0x62, 0x40, 0x10, 0x6C, 0x61, 0x20, - 0x18, 0x14, 0x21, 0x20, 0x0C, 0x0C, 0x21, 0x10, 0x06, 0x04, 0x21, 0x10, 0x03, 0x06, 0x01, 0x10, - 0x00, 0x82, 0x00, 0x08, 0x00, 0xC0, 0x00, 0x08, 0x00, 0x60, 0x00, 0x08, 0x00, 0x20, 0x00, 0x08, - 0x00, 0x30, 0x00, 0x08, 0x00, 0x30, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, 0x00, 0x10, 0x00, 0x08, - 0x07, 0x10, 0x00, 0x10, 0x08, 0x90, 0x00, 0x10, 0x08, 0x60, 0x00, 0x10, 0x0A, 0x00, 0x00, 0x10, - 0x0A, 0x00, 0x00, 0x10, 0x04, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x08, 0x03, 0x80, 0x00, 0x08, - 0x00, 0x7F, 0x00, 0x04, 0x00, 0x01, 0x80, 0x04, 0x00, 0x00, 0xC0, 0x18, 0x00, 0x00, 0x7F, 0xE0, - }, - { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x3C, 0xE0, 0x00, 0x00, 0x7F, 0xF0, 0x00, 0x00, 0x7F, 0xFC, 0x00, - 0x00, 0x3F, 0xFF, 0x00, 0x0E, 0x3F, 0xFF, 0x80, 0x1F, 0x9F, 0xFF, 0xC0, 0x1F, 0xEF, 0xFF, 0xE0, - 0x1F, 0xF7, 0xFF, 0xE0, 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF0, 0x03, 0xFF, 0xFF, 0xF0, - 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0xFF, 0xFF, 0xF8, 0x00, 0x7F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, - 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x3F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, 0x00, 0x1F, 0xFF, 0xF8, - 0x07, 0x1F, 0xFF, 0xF0, 0x0F, 0x9F, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, 0x0F, 0xFF, 0xFF, 0xF0, - 0x0F, 0xFF, 0xFF, 0xF0, 0x07, 0xFF, 0xFF, 0xF8, 0x07, 0xFF, 0xFF, 0xF8, 0x03, 0xFF, 0xFF, 0xF8, - 0x00, 0x7F, 0xFF, 0xFC, 0x00, 0x01, 0xFF, 0xFC, 0x00, 0x00, 0xFF, 0xF8, 0x00, 0x00, 0x7F, 0xE0, - } - }; + static constexpr CursorData kDigDownCursorData = cursorFromBitMap( + 6, 31, + " " + " XX " + " X..X " + " X.X..X " + " X.X X..X " + " X.X X.XX" + " X.X X.XX " + " X..XX.XX " + " X.....XX " + " X...XXXX " + " X...XX " + " XX X.X.X " + " X..XX...XX " + " X..XX...XX " + " X.X.X...XX " + " X...X...XX " + " X..X...XXXX " + " XXXXXX...X.XXXX..X " + " X...XX...XXXXX...X " + " X...XX....XX..X.X " + " X...X X........X " + " X...X X......X " + " X...X X...XX " + " X...X XXX " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + + static constexpr CursorData kWaterDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " " + " " + " " + " " + " " + " X X X X " + " X X X X " + " X.X X.X X.X X.X " + " XX...XXX...XXX...XXX...XX " + "X...X.....X.....X.....X...X " + " XXX XXXXX XXXXX XXXXX XXX " + " " + " X X X X " + " X X X X " + " X.X X.X X.X X.X " + " X...XXX...XXX...XXX...X " + " XXXXX.X.....X.....X.....X..X" + " X...XX XXXXX XXXXX XXXXX XX " + " X...X " + " X...X X X " + " X...X X X " + " X...X X.X X.X " + " X...X XX...XXX...XX " + "XXXXX...XXXXX...X.....X...X " + " X.........X XXX XXXXX XXX " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + + static constexpr CursorData kHouseDownCursorData = cursorFromBitMap( + 6, 31, + " " + " " + " X XXXXXX " + " X.X X....X " + " X...X XXXX " + " X..X..XX..X " + " X...XX..X..X " + " X.....XX....X " + " X...XXXXXX...X " + " X.........XX..X " + " X....XXXXXXXXX..X " + " X.............XX..X " + " X...XXXXXXXXXXXXXX..X " + " XXXX.............XXXXXX " + " X...............X " + " X...............X " + " X...XXXX.XXXXXX.X " + " X...X X.X X.X " + " XXXXX X...X X.X X.X " + " X...X X...X X.X X.X " + " X...X X...X X.XXXXXX.X " + " X...X X...X X........X " + " X...X X...X X........X " + " X...X XXXXXXXXXXXXXXXXX " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + + static constexpr CursorData kVolcanoDownCursorData = cursorFromBitMap( + 6, 31, + " X X X " + " X X " + " X " + " X X " + " XXXX XX " + " XXXXXXXXXXX " + " X.XXXX....X " + " XX.......XXXX " + " XXX.XX..XXX..X " + " X.XX.X.X...X..X " + " X......X...XXX..X " + " XX....X.......X.X..XXX " + " X.....XX......X.XXXX...X " + " XX.....XX........X.X.X.X..XX " + " X...XXXX....X......XXX.XXXXXXX" + " XXXXX X.XXXXXX...XXXXXXX XX " + " X XXXX XX.XX XX " + " X X " + " XXXXX " + " X...X " + " X...X " + " X...X " + " X...X " + " X...X " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + + static constexpr CursorData kWalkDownCursorData = cursorFromBitMap( + 6, 31, + " " + " XXX " + " X...X " + " X....X " + " X....X " + " X...X " + " XXX X " + " XX.X " + " X..X " + " XX " + " " + " XXX XXX " + " X...X X...X " + " X....X X....X " + " X....X X....X " + " X...X X...X " + " XXX X XXX X " + " XX.X XX.X " + " XXXXX X..X X..X " + " X...X XX XX " + " X...X " + " X...X XXX " + " X...X X...X " + " X...X X....X " + " X...X X....X " + "XXXXX...XXXXX X...X " + " X.........X XXX X " + " X.......X XX.X " + " X.....X X..X " + " X...X XX " + " X.X " + " X "); + + static constexpr CursorData kPaintDownCursorData = cursorFromBitMap( + 7, 30, + " " + " XXX " + " XXXXXX " + " XXXXX.X " + " XXXXX.XX " + " XXXXX..X " + " XX XXXXX..XX " + " XXXX X..X..XX " + " XXXXXX X....XXX " + " XX.XXXXXXX....XX " + " XXXX.XXXX.....XX " + " XXXXXX.XXX...XX " + " XXXXXXXX.XX...X " + " XX.XXXXXX.XXXXX " + " XXXXXXXXX.XXXXX " + " XX.XXXXXX.XXXXX " + " XX.XXXXXX.XXXXX " + " XXXXX XXXXXXXXX.XXXX " + " X...X XX.X..XXX.XXX " + " X...X XX.....XXXX " + " X...X XX.....XX " + " X...X XX...XX " + " X...X XX.XX " + " X...X X.X " + " XXXXX...XXXXX X " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X " + " "); + + static constexpr CursorData kEntranceDownCursorData = cursorFromBitMap( + 6, 31, + " X X " + " X.X X.X " + "X...X X...X " + " X.X X.X " + " XXXXXXXXXXXXXXXXXXXXXXXXXXXXX " + " X.XX.....................XX.X " + " X.X X...................X X.X " + " X.X X...................X X.X " + " X.X X...................X X.X " + " X.XXX....................XX.X " + " X.XXXXXXXXXXXXXXXXXXXXXXXXX.X " + " X.X X.X " + " X.X X.X " + " X.X X.X " + " X.X X.X " + " X.X X.X " + " X.X X.X " + " X.XXXXXX X.X " + "XX.XX...X X.X " + " X.XX...X X X XX.X X" + " X.XX...X X.X " + "XX.XX...X X.X " + " X.XX...X X X XXX.X " + " X...X " + " X...X XX X X " + "XXXXX...XXXXX XXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + + static constexpr CursorData kHandOpenDownCursorData = cursorFromBitMap( + 15, 17, + " XX X " + " X..X XXX " + " X..X X..X " + " XX X...X X..X " + " X..X X...X X..X XX " + " X...X X....XX...XX..X " + " X....X X...XX...XX...X " + " XX...X X...XX....XX..X " + " X....X X....X....XX..X " + " XX....XX....X....X...X " + " X.....X....X....X...X " + " XX....XX........X...X " + " X.....X.............X " + " XX..................X " + " XX.................X " + " X.................X " + " XX................X " + " XX................X " + " X................X " + " X................X " + " X...............X " + " X...............X " + " X................X " + " X................X " + " XXXXXX.................X " + " X........................X " + " X.X......................X " + " X..X.....................X " + " XXXX....XXXX.............X " + " XXXXXX XX............X " + " XX.........XX " + " XXXXXXXXXX "); + + static constexpr CursorData kHandClosedDownCursorData = cursorFromBitMap( + 15, 17, + " " + " XXXX XXX " + " X....XX...X " + " X.....XX...XX " + " X.....X....XXX " + " XXX X......X....X.X " + " X...XX XX....XX...X..X " + " X.....XX XX...XX....X..X " + " XX......X X....X....X..X " + " XX......XX....X....X...X " + " XX......X....X....X...X " + " XX.....XX........X...X " + " X.....X.............X " + " XX..................X " + " XX.................X " + " X.................X " + " XX................X " + " XX................X " + " X................X " + " X................X " + " XXX X...............X " + " X...X X...............X " + " X....XX................X " + " X.X....................X " + " X.X....................X " + " X......................X " + " X......................X " + " XXX...................X " + " XXXXXXX.............X " + " XX............X " + " XX.........XX " + " XXXXXXXXXX "); static constexpr const CursorData* RawCursorData[] = { nullptr, // CursorID::Arrow @@ -650,7 +942,6 @@ namespace OpenRCT2::Ui &kHandClosedDownCursorData, // CursorID::HandClosed }; - // clang-format on const CursorData* getCursorData(CursorID cursorId) { const CursorData* result = nullptr; From 5b1c867f23280ec0c2b294e77dd49a2f45b65186 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 3 Aug 2024 20:44:12 +0200 Subject: [PATCH 3/4] Add bulldozer cursor for clear scenery tool --- distribution/changelog.txt | 1 + src/openrct2-ui/CursorData.cpp | 36 ++++++++++++++++++++++++ src/openrct2-ui/windows/ClearScenery.cpp | 2 +- src/openrct2/interface/Cursors.h | 1 + src/openrct2/interface/Window.h | 1 + 5 files changed, 40 insertions(+), 1 deletion(-) diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 135f8da560..62a9fa8660 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -1,6 +1,7 @@ 0.4.14 (in development) ------------------------------------------------------------------------ - Change: [#21659] Increase the Hybrid Roller Coaster’s maximum lift speed to 17 km/h (11 mph). +- Change: [#22466] The Clear Scenery tool now uses a bulldozer cursor instead of a generic crosshair. 0.4.13 (2024-08-04) ------------------------------------------------------------------------ diff --git a/src/openrct2-ui/CursorData.cpp b/src/openrct2-ui/CursorData.cpp index 9add2b71e3..c06f6b84bd 100644 --- a/src/openrct2-ui/CursorData.cpp +++ b/src/openrct2-ui/CursorData.cpp @@ -912,6 +912,41 @@ namespace OpenRCT2::Ui " XX.........XX " " XXXXXXXXXX "); + static constexpr CursorData kBulldozerCursorData = cursorFromBitMap( + 6, 31, + " XXX " + " XX...X " + " XX....X " + " X..XX.X " + " X..X X XXXXXXX " + " XXX X.......X " + " XX X.X X.XXX.X.X " + " X.X XXX.XXXXXXXX.XXX.X.X " + " X.X X...........X.XXX.X.X " + " X.X X.XXXXXX....X.XXX.X.X " + " X.X X.XX.X......X.......X " + " X.XXXXXXXXXXX..XXXX......X " + " X.X..........X...........X " + " X.X....XXXXXXXXXXX.XX.XXX " + " X.XXXXX..X..X..X..X..X..XX " + " X.X X.XX.XX.XX.XX.XX.XX.X " + " X.X X.XX.XX.XX.XX.XX.XX.X " + " XX.X X..X..X..X..X..X..X " + "X..X XXXXXXXXXXXXXXXXX " + " XX XXXXX " + " X...X " + " X...X " + " X...X " + " X...X " + " X...X " + "XXXXX...XXXXX " + " X.........X " + " X.......X " + " X.....X " + " X...X " + " X.X " + " X "); + static constexpr const CursorData* RawCursorData[] = { nullptr, // CursorID::Arrow &kBlankCursorData, // CursorID::Blank @@ -940,6 +975,7 @@ namespace OpenRCT2::Ui &kEntranceDownCursorData, // CursorID::EntranceDown &kHandOpenDownCursorData, // CursorID::HandOpen &kHandClosedDownCursorData, // CursorID::HandClosed + &kBulldozerCursorData, // CursorID::Bulldozer }; const CursorData* getCursorData(CursorID cursorId) diff --git a/src/openrct2-ui/windows/ClearScenery.cpp b/src/openrct2-ui/windows/ClearScenery.cpp index 1a164f8bc9..6a7ddd307d 100644 --- a/src/openrct2-ui/windows/ClearScenery.cpp +++ b/src/openrct2-ui/windows/ClearScenery.cpp @@ -409,7 +409,7 @@ namespace OpenRCT2::Ui::Windows { ShowGridlines(); auto* toolWindow = ContextOpenWindow(WindowClass::ClearScenery); - ToolSet(*toolWindow, WIDX_BACKGROUND, Tool::Crosshair); + ToolSet(*toolWindow, WIDX_BACKGROUND, Tool::Bulldozer); InputSetFlag(INPUT_FLAG_6, true); } } diff --git a/src/openrct2/interface/Cursors.h b/src/openrct2/interface/Cursors.h index 4915f47e79..b848810ec9 100644 --- a/src/openrct2/interface/Cursors.h +++ b/src/openrct2/interface/Cursors.h @@ -41,6 +41,7 @@ enum class CursorID : uint8_t EntranceDown, HandOpen, HandClosed, + Bulldozer, Count, Undefined = 0xFF diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index 77046016d4..91585de122 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -470,6 +470,7 @@ enum class Tool WalkDown = 22, PaintDown = 23, EntranceDown = 24, + Bulldozer = 27, }; using modal_callback = void (*)(int32_t result); From d574946c1ab10af02ef3f631de6e2b03b4fb1e39 Mon Sep 17 00:00:00 2001 From: Aaron van Geffen Date: Sat, 3 Aug 2024 20:46:58 +0200 Subject: [PATCH 4/4] Remove includes of Cursors.h in object header files --- src/openrct2/object/LargeSceneryEntry.h | 5 ++++- src/openrct2/object/PathAdditionEntry.h | 3 ++- src/openrct2/object/SmallSceneryEntry.h | 3 ++- src/openrct2/object/WallSceneryEntry.h | 3 ++- 4 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/openrct2/object/LargeSceneryEntry.h b/src/openrct2/object/LargeSceneryEntry.h index d20701b335..3afee6fecb 100644 --- a/src/openrct2/object/LargeSceneryEntry.h +++ b/src/openrct2/object/LargeSceneryEntry.h @@ -10,11 +10,14 @@ #pragma once #include "../core/Money.hpp" -#include "../interface/Cursors.h" #include "../localisation/StringIdType.h" #include "../world/Location.hpp" #include "ObjectTypes.h" +#include + +enum class CursorID : uint8_t; + struct LargeSceneryText; struct LargeSceneryTile diff --git a/src/openrct2/object/PathAdditionEntry.h b/src/openrct2/object/PathAdditionEntry.h index 4f8e95ec3f..858fc91cac 100644 --- a/src/openrct2/object/PathAdditionEntry.h +++ b/src/openrct2/object/PathAdditionEntry.h @@ -10,10 +10,11 @@ #pragma once #include "../core/Money.hpp" -#include "../interface/Cursors.h" #include "../localisation/StringIdType.h" #include "ObjectTypes.h" +enum class CursorID : uint8_t; + enum class PathAdditionDrawType : uint8_t { Light, diff --git a/src/openrct2/object/SmallSceneryEntry.h b/src/openrct2/object/SmallSceneryEntry.h index 07c9c445ff..942a584ea8 100644 --- a/src/openrct2/object/SmallSceneryEntry.h +++ b/src/openrct2/object/SmallSceneryEntry.h @@ -10,10 +10,11 @@ #pragma once #include "../core/Money.hpp" -#include "../interface/Cursors.h" #include "../localisation/StringIdType.h" #include "ObjectTypes.h" +enum class CursorID : uint8_t; + enum SMALL_SCENERY_FLAGS : uint32_t { SMALL_SCENERY_FLAG_FULL_TILE = (1 << 0), // 0x1 diff --git a/src/openrct2/object/WallSceneryEntry.h b/src/openrct2/object/WallSceneryEntry.h index 61118628fa..eb0b07dbb7 100644 --- a/src/openrct2/object/WallSceneryEntry.h +++ b/src/openrct2/object/WallSceneryEntry.h @@ -10,10 +10,11 @@ #pragma once #include "../core/Money.hpp" -#include "../interface/Cursors.h" #include "../localisation/StringIdType.h" #include "ObjectTypes.h" +enum class CursorID : uint8_t; + enum WALL_SCENERY_FLAGS { WALL_SCENERY_HAS_PRIMARY_COLOUR = (1 << 0), // 0x1