36 canvas_->set_global_scale(1.0f);
39 EXPECT_FLOAT_EQ(pos.x, 0.0f);
40 EXPECT_FLOAT_EQ(pos.y, 0.0f);
43 pos = api_->TileToCanvas(1, 0);
44 EXPECT_FLOAT_EQ(pos.x, 16.0f);
45 EXPECT_FLOAT_EQ(pos.y, 0.0f);
48 pos = api_->TileToCanvas(0, 1);
49 EXPECT_FLOAT_EQ(pos.x, 0.0f);
50 EXPECT_FLOAT_EQ(pos.y, 16.0f);
53 pos = api_->TileToCanvas(10, 10);
54 EXPECT_FLOAT_EQ(pos.x, 160.0f);
55 EXPECT_FLOAT_EQ(pos.y, 160.0f);
60 canvas_->set_global_scale(2.0f);
62 ImVec2 pos = api_->TileToCanvas(1, 1);
63 EXPECT_FLOAT_EQ(pos.x, 32.0f);
64 EXPECT_FLOAT_EQ(pos.y, 32.0f);
67 canvas_->set_global_scale(0.5f);
68 pos = api_->TileToCanvas(10, 10);
69 EXPECT_FLOAT_EQ(pos.x, 80.0f);
70 EXPECT_FLOAT_EQ(pos.y, 80.0f);
74 canvas_->set_global_scale(1.0f);
77 ImVec2 tile = api_->CanvasToTile(ImVec2(0, 0));
78 EXPECT_FLOAT_EQ(tile.x, 0.0f);
79 EXPECT_FLOAT_EQ(tile.y, 0.0f);
82 tile = api_->CanvasToTile(ImVec2(16, 16));
83 EXPECT_FLOAT_EQ(tile.x, 1.0f);
84 EXPECT_FLOAT_EQ(tile.y, 1.0f);
87 tile = api_->CanvasToTile(ImVec2(160, 160));
88 EXPECT_FLOAT_EQ(tile.x, 10.0f);
89 EXPECT_FLOAT_EQ(tile.y, 10.0f);
94 canvas_->set_global_scale(2.0f);
96 ImVec2 tile = api_->CanvasToTile(ImVec2(32, 32));
97 EXPECT_FLOAT_EQ(tile.x, 1.0f);
98 EXPECT_FLOAT_EQ(tile.y, 1.0f);
101 canvas_->set_global_scale(0.5f);
102 tile = api_->CanvasToTile(ImVec2(8, 8));
103 EXPECT_FLOAT_EQ(tile.x, 1.0f);
104 EXPECT_FLOAT_EQ(tile.y, 1.0f);
108 canvas_->set_global_scale(1.0f);
111 for (
int i = 0; i < 32; ++i) {
112 ImVec2 canvas_pos = api_->TileToCanvas(i, i);
113 ImVec2 tile_pos = api_->CanvasToTile(canvas_pos);
115 EXPECT_FLOAT_EQ(tile_pos.x,
static_cast<float>(i));
116 EXPECT_FLOAT_EQ(tile_pos.y,
static_cast<float>(i));
131 EXPECT_FALSE(api_->IsInBounds(-1, 0));
132 EXPECT_FALSE(api_->IsInBounds(0, -1));
133 EXPECT_FALSE(api_->IsInBounds(-1, -1));
134 EXPECT_FALSE(api_->IsInBounds(32, 0));
135 EXPECT_FALSE(api_->IsInBounds(0, 32));
136 EXPECT_FALSE(api_->IsInBounds(100, 100));
145 std::vector<std::tuple<int, int, int>> painted_tiles;
146 api_->SetTilePaintCallback([&](
int x,
int y,
int tile_id) {
147 painted_tiles.push_back({x, y, tile_id});
152 EXPECT_TRUE(api_->SetTileAt(5, 5, 42));
153 EXPECT_TRUE(api_->SetTileAt(10, 10, 100));
155 ASSERT_EQ(painted_tiles.size(), 2);
156 EXPECT_EQ(painted_tiles[0], std::make_tuple(5, 5, 42));
157 EXPECT_EQ(painted_tiles[1], std::make_tuple(10, 10, 100));
161 bool callback_called =
false;
162 api_->SetTilePaintCallback([&](
int x,
int y,
int tile_id) {
163 callback_called =
true;
168 EXPECT_FALSE(api_->SetTileAt(-1, 0, 42));
169 EXPECT_FALSE(api_->SetTileAt(0, -1, 42));
170 EXPECT_FALSE(api_->SetTileAt(100, 100, 42));
172 EXPECT_FALSE(callback_called);
177 api_->SetTileQueryCallback([](
int x,
int y) {
181 EXPECT_EQ(api_->GetTileAt(0, 0), 0);
182 EXPECT_EQ(api_->GetTileAt(1, 0), 100);
183 EXPECT_EQ(api_->GetTileAt(0, 1), 1);
184 EXPECT_EQ(api_->GetTileAt(5, 7), 507);
188 api_->SetTileQueryCallback([](
int x,
int y) {
return 42; });
190 EXPECT_EQ(api_->GetTileAt(-1, 0), -1);
191 EXPECT_EQ(api_->GetTileAt(0, -1), -1);
192 EXPECT_EQ(api_->GetTileAt(100, 100), -1);
196 std::vector<std::tuple<int, int, int>> painted_tiles;
197 api_->SetTilePaintCallback([&](
int x,
int y,
int tile_id) {
198 painted_tiles.push_back({x, y, tile_id});
202 std::vector<std::tuple<int, int, int>> tiles_to_paint = {
210 EXPECT_TRUE(api_->SetTiles(tiles_to_paint));
211 EXPECT_EQ(painted_tiles.size(), 5);
227 api_->SelectTileRect(5, 5, 9, 9);
229 auto selection = api_->GetSelection();
230 EXPECT_TRUE(selection.has_selection);
233 EXPECT_EQ(selection.selected_tiles.size(), 25);
236 EXPECT_FLOAT_EQ(selection.selected_tiles[0].x, 5.0f);
237 EXPECT_FLOAT_EQ(selection.selected_tiles[0].y, 5.0f);
238 EXPECT_FLOAT_EQ(selection.selected_tiles[24].x, 9.0f);
239 EXPECT_FLOAT_EQ(selection.selected_tiles[24].y, 9.0f);
244 api_->SelectTileRect(9, 9, 5, 5);
246 auto selection = api_->GetSelection();
247 EXPECT_TRUE(selection.has_selection);
248 EXPECT_EQ(selection.selected_tiles.size(), 25);
252 api_->SelectTileRect(5, 5, 10, 10);
254 auto selection = api_->GetSelection();
255 EXPECT_TRUE(selection.has_selection);
257 api_->ClearSelection();
259 selection = api_->GetSelection();
260 EXPECT_FALSE(selection.has_selection);
261 EXPECT_EQ(selection.selected_tiles.size(), 0);
265 api_->SelectTile(-1, 0);
266 auto selection = api_->GetSelection();
267 EXPECT_FALSE(selection.has_selection);
269 api_->SelectTile(100, 100);
270 selection = api_->GetSelection();
271 EXPECT_FALSE(selection.has_selection);
341 canvas_->set_global_scale(1.0f);
343 auto dims = api_->GetDimensions();
344 EXPECT_EQ(dims.tile_size, 16);
345 EXPECT_EQ(dims.width_tiles, 32);
346 EXPECT_EQ(dims.height_tiles, 32);
350 canvas_->set_global_scale(2.0f);
352 auto dims = api_->GetDimensions();
353 EXPECT_EQ(dims.tile_size, 16);
354 EXPECT_EQ(dims.width_tiles, 16);
355 EXPECT_EQ(dims.height_tiles, 16);
359 canvas_->set_global_scale(1.0f);
360 canvas_->set_scrolling(ImVec2(0, 0));
362 auto region = api_->GetVisibleRegion();
365 EXPECT_GE(region.min_x, 0);
366 EXPECT_GE(region.min_y, 0);
369 EXPECT_GE(region.max_x, region.min_x);
370 EXPECT_GE(region.max_y, region.min_y);
374 canvas_->set_global_scale(1.0f);
375 canvas_->set_scrolling(ImVec2(0, 0));
378 EXPECT_TRUE(api_->IsTileVisible(0, 0));
379 EXPECT_TRUE(api_->IsTileVisible(1, 1));
383 api_->IsTileVisible(50, 50);
388 EXPECT_FALSE(api_->IsTileVisible(-1, 0));
389 EXPECT_FALSE(api_->IsTileVisible(0, -1));
390 EXPECT_FALSE(api_->IsTileVisible(100, 100));
402 EXPECT_FLOAT_EQ(api_->GetZoom(), 1.0f);
405 api_->SelectTileRect(0, 0, 4, 4);
406 auto selection = api_->GetSelection();
407 EXPECT_EQ(selection.selected_tiles.size(), 25);
410 api_->SetTileQueryCallback([](
int x,
int y) {
414 EXPECT_EQ(api_->GetTileAt(2, 3), 302);
417 std::vector<std::tuple<int, int, int>> painted;
418 api_->SetTilePaintCallback([&](
int x,
int y,
int tile_id) {
419 painted.push_back({x, y, tile_id});
423 std::vector<std::tuple<int, int, int>> tiles = {
424 {0, 0, 10}, {1, 0, 11}, {2, 0, 12}
426 EXPECT_TRUE(api_->SetTiles(tiles));
427 EXPECT_EQ(painted.size(), 3);
430 api_->ClearSelection();
431 selection = api_->GetSelection();
432 EXPECT_FALSE(selection.has_selection);
437 auto canvas_8x8 = std::make_unique<gui::Canvas>(
439 auto api_8x8 = canvas_8x8->GetAutomationAPI();
441 auto dims = api_8x8->GetDimensions();
442 EXPECT_EQ(dims.tile_size, 8);
443 EXPECT_EQ(dims.width_tiles, 64);
446 auto canvas_32x32 = std::make_unique<gui::Canvas>(
448 auto api_32x32 = canvas_32x32->GetAutomationAPI();
450 dims = api_32x32->GetDimensions();
451 EXPECT_EQ(dims.tile_size, 32);
452 EXPECT_EQ(dims.width_tiles, 16);
456 float zoom_levels[] = {0.25f, 0.5f, 1.0f, 1.5f, 2.0f, 3.0f, 4.0f};
458 for (
float zoom : zoom_levels) {
460 float actual_zoom = api_->GetZoom();
463 EXPECT_GE(actual_zoom, 0.25f);
464 EXPECT_LE(actual_zoom, 4.0f);
467 ImVec2 canvas_pos = api_->TileToCanvas(10, 10);
468 ImVec2 tile_pos = api_->CanvasToTile(canvas_pos);
470 EXPECT_FLOAT_EQ(tile_pos.x, 10.0f);
471 EXPECT_FLOAT_EQ(tile_pos.y, 10.0f);