47 const std::vector<std::tuple<int, int, int>>& tiles) {
48 bool all_success =
true;
49 for (
const auto& [x, y, tile_id] : tiles) {
74 if (x1 > x2) std::swap(x1, x2);
75 if (y1 > y2) std::swap(y1, y2);
93 if (selected_points.size() >= 2) {
103 int min_x = std::min(
static_cast<int>(tile_start.x),
104 static_cast<int>(tile_end.x));
105 int max_x = std::max(
static_cast<int>(tile_start.x),
106 static_cast<int>(tile_end.x));
107 int min_y = std::min(
static_cast<int>(tile_start.y),
108 static_cast<int>(tile_end.y));
109 int max_y = std::max(
static_cast<int>(tile_start.y),
110 static_cast<int>(tile_end.y));
113 for (
int y = min_y; y <= max_y; ++y) {
114 for (
int x = min_x; x <= max_x; ++x) {
116 static_cast<float>(y)));
155 float new_scroll_x = -tile_canvas_pos.x;
156 float new_scroll_y = -tile_canvas_pos.y;
170 float new_scroll_x = -(tile_canvas_pos.x - canvas_size.x / 2.0f);
171 float new_scroll_y = -(tile_canvas_pos.y - canvas_size.y / 2.0f);
178 zoom = std::max(0.25f, std::min(zoom, 4.0f));
215 dims.
width_tiles =
static_cast<int>(canvas_size.x / (tile_size * scale));
216 dims.
height_tiles =
static_cast<int>(canvas_size.y / (tile_size * scale));
230 ImVec2 top_left =
CanvasToTile(ImVec2(-scroll.x, -scroll.y));
233 ImVec2 bottom_right =
CanvasToTile(ImVec2(-scroll.x + canvas_size.x,
234 -scroll.y + canvas_size.y));
236 region.
min_x = std::max(0,
static_cast<int>(top_left.x));
237 region.
min_y = std::max(0,
static_cast<int>(top_left.y));
240 region.
max_x = std::min(dims.
width_tiles - 1,
static_cast<int>(bottom_right.x));
241 region.
max_y = std::min(dims.
height_tiles - 1,
static_cast<int>(bottom_right.y));
252 return x >= region.
min_x && x <= region.
max_x &&
257 if (x < 0 || y < 0) {
273 float canvas_x = x * tile_size * scale;
274 float canvas_y = y * tile_size * scale;
276 return ImVec2(canvas_x, canvas_y);
283 float tile_x = canvas_pos.x / (tile_size * scale);
284 float tile_y = canvas_pos.y / (tile_size * scale);
286 return ImVec2(std::floor(tile_x), std::floor(tile_y));
bool IsTileVisible(int x, int y) const
Check if a tile is currently visible.
TilePaintCallback tile_paint_callback_
void SetTileQueryCallback(TileQueryCallback callback)
void SetTilePaintCallback(TilePaintCallback callback)
bool IsInBounds(int x, int y) const
Check if coordinates are within canvas bounds.
bool SetTileAt(int x, int y, int tile_id)
Paint a single tile at logical coordinates.
std::function< bool(int x, int y, int tile_id)> TilePaintCallback
Set callback for tile painting operations. Allows external systems (CLI, AI agents) to implement cust...
void ClearSelection()
Clear current selection.
void SetZoom(float zoom)
Set canvas zoom level.
void SelectTileRect(int x1, int y1, int x2, int y2)
Select a rectangular region of tiles.
VisibleRegion GetVisibleRegion() const
Get currently visible tile region.
Dimensions GetDimensions() const
Get canvas dimensions in logical tile units.
SelectionState GetSelection() const
Query current selection state.
void CenterOn(int x, int y)
Center canvas view on a specific tile.
TileQueryCallback tile_query_callback_
ImVec2 CanvasToTile(ImVec2 canvas_pos) const
Convert canvas pixel coordinates to logical tile coordinates.
float GetZoom() const
Get current zoom level.
bool SetTiles(const std::vector< std::tuple< int, int, int > > &tiles)
Paint multiple tiles in a batch operation.
ImVec2 TileToCanvas(int x, int y) const
Convert logical tile coordinates to canvas pixel coordinates.
std::function< int(int x, int y)> TileQueryCallback
Set callback for tile querying operations. Allows external systems to provide tile data.
CanvasAutomationAPI(Canvas *canvas)
void SelectTile(int x, int y)
Select a single tile.
int GetTileAt(int x, int y) const
Query tile ID at logical coordinates.
void ScrollToTile(int x, int y, bool center=false)
Scroll canvas to make tile visible.
Modern, robust canvas for drawing and manipulating graphics.
void set_scrolling(ImVec2 scroll)
auto global_scale() const
ImVector< ImVec2 > * mutable_points()
auto mutable_selected_points()
CanvasGridSize grid_size() const
void set_global_scale(float scale)
auto selected_points() const
Main namespace for the application.
Canvas dimensions in logical tile units.
Selection state returned by GetSelection().
std::vector< ImVec2 > selected_tiles
Visible region in logical tile coordinates.