Reusable tile selector built on top of Canvas. More...
#include <tile_selector_widget.h>

Classes | |
| struct | Config |
| struct | RenderResult |
Public Types | |
| enum class | JumpToTileResult { kSuccess = 0 , kInvalidFormat , kOutOfRange } |
Public Member Functions | |
| TileSelectorWidget (std::string widget_id) | |
| TileSelectorWidget (std::string widget_id, Config config) | |
| void | AttachCanvas (Canvas *canvas) |
| void | SetTileCount (int total_tiles) |
| void | SetDisplayScale (float display_scale) |
| float | display_scale () const |
| void | SetTilesPerRow (int tiles_per_row) |
| int | tiles_per_row () const |
| void | SetSelectedTile (int tile_id) |
| int | GetSelectedTileID () const |
| int | GetMaxTileId () const |
| ImVec2 | GetGridContentSize () const |
| float | GetPreferredViewportWidth () const |
| RenderResult | Render (gfx::Bitmap &atlas, bool atlas_ready) |
| CanvasMenuItem | CopyTileIdMenuItem () const |
| bool | DrawFilterBar () |
| JumpToTileResult | JumpToTileFromInput (std::string_view input) |
| void | ScrollToTile (int tile_id, bool use_imgui_scroll=true) |
| ImVec2 | TileOrigin (int tile_id) const |
| bool | has_active_range_filter () const |
| int | filter_range_min () const |
| int | filter_range_max () const |
| void | SetRangeFilter (int min_id, int max_id) |
| void | ClearRangeFilter () |
Static Public Member Functions | |
| static float | PreferredViewportWidth (const Config &config, float scrollbar_size) |
| static float | CurrentScrollbarSize () |
| Current style scrollbar size, or ImGui's default without a context. | |
Private Member Functions | |
| bool | DrawFilterControls () |
| RenderResult | HandleInteraction (int tile_display_size) |
| int | ResolveTileAtCursor (int tile_display_size) const |
| void | DrawHighlight (int tile_display_size) const |
| void | DrawTileIdLabels (int tile_display_size) const |
| bool | IsValidTileId (int tile_id) const |
| bool | IsInFilterRange (int tile_id) const |
Private Attributes | |
| Canvas * | canvas_ = nullptr |
| Config | config_ {} |
| int | selected_tile_id_ = 0 |
| int | total_tiles_ = 0 |
| std::string | widget_id_ |
| int | pending_scroll_tile_id_ = -1 |
| bool | pending_scroll_use_imgui_ = true |
| char | filter_buf_ [8] = {} |
| bool | filter_range_active_ = false |
| int | filter_range_min_ = 0 |
| int | filter_range_max_ = 0 |
| char | filter_min_buf_ [8] = {} |
| char | filter_max_buf_ [8] = {} |
| bool | filter_range_error_ = false |
| bool | filter_out_of_range_ = false |
| JumpToTileResult | last_jump_result_ = JumpToTileResult::kSuccess |
Reusable tile selector built on top of Canvas.
Minimal mutable state, designed for reuse across editors and automation.
Definition at line 19 of file tile_selector_widget.h.
|
strong |
| Enumerator | |
|---|---|
| kSuccess | |
| kInvalidFormat | |
| kOutOfRange | |
Definition at line 43 of file tile_selector_widget.h.
|
explicit |
Definition at line 68 of file tile_selector_widget.cc.
| yaze::gui::TileSelectorWidget::TileSelectorWidget | ( | std::string | widget_id, |
| Config | config ) |
Definition at line 73 of file tile_selector_widget.cc.
| void yaze::gui::TileSelectorWidget::AttachCanvas | ( | Canvas * | canvas | ) |
Definition at line 78 of file tile_selector_widget.cc.
References canvas_.
Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), and yaze::editor::Tile16Editor::Initialize().
| void yaze::gui::TileSelectorWidget::SetTileCount | ( | int | total_tiles | ) |
Definition at line 82 of file tile_selector_widget.cc.
References IsValidTileId(), kOutOfRange, kSuccess, last_jump_result_, selected_tile_id_, and total_tiles_.
Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), and yaze::editor::Tile16Editor::Initialize().

| void yaze::gui::TileSelectorWidget::SetDisplayScale | ( | float | display_scale | ) |
Definition at line 93 of file tile_selector_widget.cc.
References config_, yaze::gui::TileSelectorWidget::Config::display_scale, and display_scale().
Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker().

|
inline |
Definition at line 55 of file tile_selector_widget.h.
References config_, and yaze::gui::TileSelectorWidget::Config::display_scale.
Referenced by SetDisplayScale().
| void yaze::gui::TileSelectorWidget::SetTilesPerRow | ( | int | tiles_per_row | ) |
Definition at line 99 of file tile_selector_widget.cc.
References config_, yaze::gui::TileSelectorWidget::Config::tiles_per_row, and tiles_per_row().
Referenced by yaze::editor::MenuTilemapEditorUI::DrawTilePicker().

|
inline |
Definition at line 57 of file tile_selector_widget.h.
References config_, and yaze::gui::TileSelectorWidget::Config::tiles_per_row.
Referenced by SetTilesPerRow().
| void yaze::gui::TileSelectorWidget::SetSelectedTile | ( | int | tile_id | ) |
Definition at line 105 of file tile_selector_widget.cc.
References IsValidTileId(), kSuccess, last_jump_result_, and selected_tile_id_.
Referenced by yaze::editor::Tile16Editor::DrawTile16EditorWorkbenchColumn(), yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), yaze::editor::Tile16Editor::Initialize(), yaze::editor::Tile16Editor::LoadLayoutFromScratch(), and yaze::editor::Tile16Editor::UpdateBlockset().

|
inline |
Definition at line 59 of file tile_selector_widget.h.
References selected_tile_id_.
Referenced by yaze::editor::Tile16Editor::DrawTile16EditorWorkbenchColumn(), yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), yaze::editor::Tile16Editor::selected_tile16_for_testing(), and yaze::editor::Tile16Editor::UpdateBlockset().
|
inline |
Definition at line 60 of file tile_selector_widget.h.
References total_tiles_.
Referenced by DrawFilterControls().
| ImVec2 yaze::gui::TileSelectorWidget::GetGridContentSize | ( | ) | const |
Definition at line 122 of file tile_selector_widget.cc.
References config_, yaze::gui::TileSelectorWidget::Config::display_scale, yaze::gui::TileSelectorWidget::Config::draw_offset, yaze::gui::TileSelectorWidget::Config::tile_size, yaze::gui::TileSelectorWidget::Config::tiles_per_row, and total_tiles_.
Referenced by Render().
| float yaze::gui::TileSelectorWidget::GetPreferredViewportWidth | ( | ) | const |
Grid width plus the current style's vertical scrollbar. This is the width of the scrolling grid child, not of any surrounding panel.
Definition at line 145 of file tile_selector_widget.cc.
References config_, CurrentScrollbarSize(), and PreferredViewportWidth().

|
static |
Same as GetPreferredViewportWidth() for a config that has no widget yet (panels report their preferred dock width before the widget exists).
Definition at line 138 of file tile_selector_widget.cc.
Referenced by GetPreferredViewportWidth(), and yaze::editor::Tile16SelectorView::GetPreferredWidth().
|
static |
Current style scrollbar size, or ImGui's default without a context.
Definition at line 131 of file tile_selector_widget.cc.
Referenced by yaze::editor::OverworldCanvasRenderer::DrawTile16Selector(), yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), GetPreferredViewportWidth(), and yaze::editor::Tile16SelectorView::GetPreferredWidth().
| TileSelectorWidget::RenderResult yaze::gui::TileSelectorWidget::Render | ( | gfx::Bitmap & | atlas, |
| bool | atlas_ready ) |
Definition at line 149 of file tile_selector_widget.cc.
References canvas_, config_, yaze::gui::TileSelectorWidget::Config::display_scale, yaze::gui::TileSelectorWidget::Config::draw_offset, yaze::gui::Canvas::DrawBackground(), yaze::gui::Canvas::DrawBitmap(), yaze::gui::Canvas::DrawContextMenu(), yaze::gui::Canvas::DrawGrid(), DrawHighlight(), yaze::gui::Canvas::DrawOverlay(), DrawTileIdLabels(), GetGridContentSize(), HandleInteraction(), yaze::gfx::Bitmap::height(), yaze::gfx::Bitmap::is_active(), IsValidTileId(), pending_scroll_tile_id_, pending_scroll_use_imgui_, ResolveTileAtCursor(), yaze::gui::TileSelectorWidget::Config::show_hover_tooltip, yaze::gui::TileSelectorWidget::Config::show_tile_ids, yaze::gfx::Bitmap::texture(), yaze::gui::TileSelectorWidget::Config::tile_size, TileOrigin(), yaze::gui::TileSelectorWidget::Config::tiles_per_row, and yaze::gfx::Bitmap::width().
Referenced by yaze::editor::Tile16Editor::DrawTile16EditorWorkbenchColumn(), yaze::editor::MenuTilemapEditorUI::DrawTilePicker(), and yaze::editor::Tile16Editor::UpdateBlockset().
| CanvasMenuItem yaze::gui::TileSelectorWidget::CopyTileIdMenuItem | ( | ) | const |
"Copy Tile ID" item for the attached canvas's editor menu. Right-click selects the tile under the cursor, so the item copies the selected tile ID ("0x01A") at click time. Callers add it next to their own items, after ClearContextMenuItems(), so nothing accumulates across frames.
Definition at line 242 of file tile_selector_widget.cc.
References yaze::gui::CanvasMenuItem::enabled_condition, ICON_MD_CONTENT_COPY, IsValidTileId(), and selected_tile_id_.

| bool yaze::gui::TileSelectorWidget::DrawFilterBar | ( | ) |
Draw a lookup/filter popup button beside the grid controls. Returns true if the user jumped to a tile (selection + scroll triggered).
Definition at line 377 of file tile_selector_widget.cc.
References DrawFilterControls(), filter_range_active_, ICON_MD_FILTER_ALT, ICON_MD_SEARCH, yaze::gui::WidgetIdRegistry::Instance(), yaze::gui::WidgetIdRegistry::RegisterWidget(), and widget_id_.
Referenced by yaze::editor::Tile16Editor::UpdateBlockset().

| TileSelectorWidget::JumpToTileResult yaze::gui::TileSelectorWidget::JumpToTileFromInput | ( | std::string_view | input | ) |
Parse a tile ID string and jump selection to that tile. Accepted forms:
Definition at line 358 of file tile_selector_widget.cc.
References IsValidTileId(), kInvalidFormat, kOutOfRange, kSuccess, last_jump_result_, ScrollToTile(), and selected_tile_id_.
Referenced by DrawFilterControls().

| void yaze::gui::TileSelectorWidget::ScrollToTile | ( | int | tile_id, |
| bool | use_imgui_scroll = true ) |
Definition at line 335 of file tile_selector_widget.cc.
References canvas_, IsValidTileId(), pending_scroll_tile_id_, and pending_scroll_use_imgui_.
Referenced by DrawFilterControls(), and JumpToTileFromInput().

| ImVec2 yaze::gui::TileSelectorWidget::TileOrigin | ( | int | tile_id | ) | const |
Definition at line 346 of file tile_selector_widget.cc.
References config_, yaze::gui::TileSelectorWidget::Config::display_scale, yaze::gui::TileSelectorWidget::Config::draw_offset, IsValidTileId(), yaze::gui::TileSelectorWidget::Config::tile_size, and yaze::gui::TileSelectorWidget::Config::tiles_per_row.
Referenced by Render().

|
inline |
Definition at line 95 of file tile_selector_widget.h.
References filter_range_active_.
|
inline |
Definition at line 96 of file tile_selector_widget.h.
References filter_range_min_.
|
inline |
Definition at line 97 of file tile_selector_widget.h.
References filter_range_max_.
| void yaze::gui::TileSelectorWidget::SetRangeFilter | ( | int | min_id, |
| int | max_id ) |
Definition at line 574 of file tile_selector_widget.cc.
References filter_range_active_, filter_range_error_, filter_range_max_, filter_range_min_, and total_tiles_.
Referenced by DrawFilterControls().
| void yaze::gui::TileSelectorWidget::ClearRangeFilter | ( | ) |
Definition at line 588 of file tile_selector_widget.cc.
References filter_out_of_range_, filter_range_active_, filter_range_error_, filter_range_max_, and filter_range_min_.
Referenced by DrawFilterControls().
|
private |
Definition at line 406 of file tile_selector_widget.cc.
References ClearRangeFilter(), filter_buf_, filter_max_buf_, filter_min_buf_, filter_out_of_range_, filter_range_active_, filter_range_error_, filter_range_max_, filter_range_min_, GetMaxTileId(), yaze::gui::WidgetIdRegistry::Instance(), JumpToTileFromInput(), kInvalidFormat, kOutOfRange, kSuccess, last_jump_result_, yaze::gui::WidgetIdRegistry::RegisterWidget(), ScrollToTile(), SetRangeFilter(), and widget_id_.
Referenced by DrawFilterBar().
|
private |
Definition at line 255 of file tile_selector_widget.cc.
References yaze::gui::BeginTileDragSource(), config_, yaze::gui::TileSelectorWidget::Config::drag_source_map_id, yaze::gui::TileSelectorWidget::Config::enable_drag, IsInFilterRange(), IsValidTileId(), ResolveTileAtCursor(), yaze::gui::TileSelectorWidget::RenderResult::selected_tile, selected_tile_id_, yaze::gui::TileSelectorWidget::RenderResult::selection_changed, yaze::gui::TileSelectorWidget::RenderResult::tile_clicked, yaze::gui::TileSelectorWidget::RenderResult::tile_double_clicked, yaze::gui::TileSelectorWidget::RenderResult::tile_dragging, and yaze::gui::TileSelectorWidget::RenderResult::tile_right_clicked.
Referenced by Render().

|
private |
Definition at line 291 of file tile_selector_widget.cc.
References canvas_, config_, yaze::gui::TileSelectorWidget::Config::draw_offset, yaze::gui::Canvas::scrolling(), yaze::gui::TileSelectorWidget::Config::tiles_per_row, and yaze::gui::Canvas::zero_point().
Referenced by HandleInteraction(), and Render().

|
private |
Definition at line 315 of file tile_selector_widget.cc.
References canvas_, config_, yaze::gui::TileSelectorWidget::Config::draw_offset, yaze::gui::Canvas::DrawOutlineWithColor(), yaze::gui::TileSelectorWidget::Config::highlight_color, IsValidTileId(), selected_tile_id_, and yaze::gui::TileSelectorWidget::Config::tiles_per_row.
Referenced by Render().

|
private |
Definition at line 331 of file tile_selector_widget.cc.
Referenced by Render().
|
private |
Definition at line 596 of file tile_selector_widget.cc.
References total_tiles_.
Referenced by CopyTileIdMenuItem(), DrawHighlight(), HandleInteraction(), JumpToTileFromInput(), Render(), ScrollToTile(), SetSelectedTile(), SetTileCount(), and TileOrigin().
|
private |
Definition at line 600 of file tile_selector_widget.cc.
References filter_range_active_, filter_range_max_, and filter_range_min_.
Referenced by HandleInteraction().
|
private |
Definition at line 110 of file tile_selector_widget.h.
Referenced by AttachCanvas(), DrawHighlight(), Render(), ResolveTileAtCursor(), and ScrollToTile().
|
private |
Definition at line 111 of file tile_selector_widget.h.
Referenced by display_scale(), DrawHighlight(), GetGridContentSize(), GetPreferredViewportWidth(), HandleInteraction(), Render(), ResolveTileAtCursor(), SetDisplayScale(), SetTilesPerRow(), TileOrigin(), and tiles_per_row().
|
private |
Definition at line 112 of file tile_selector_widget.h.
Referenced by CopyTileIdMenuItem(), DrawHighlight(), GetSelectedTileID(), HandleInteraction(), JumpToTileFromInput(), SetSelectedTile(), and SetTileCount().
|
private |
Definition at line 113 of file tile_selector_widget.h.
Referenced by GetGridContentSize(), GetMaxTileId(), IsValidTileId(), SetRangeFilter(), and SetTileCount().
|
private |
Definition at line 114 of file tile_selector_widget.h.
Referenced by DrawFilterBar(), and DrawFilterControls().
|
mutableprivate |
Definition at line 118 of file tile_selector_widget.h.
Referenced by Render(), and ScrollToTile().
|
mutableprivate |
Definition at line 119 of file tile_selector_widget.h.
Referenced by Render(), and ScrollToTile().
|
private |
Definition at line 122 of file tile_selector_widget.h.
Referenced by DrawFilterControls().
|
private |
Definition at line 125 of file tile_selector_widget.h.
Referenced by ClearRangeFilter(), DrawFilterBar(), DrawFilterControls(), has_active_range_filter(), IsInFilterRange(), and SetRangeFilter().
|
private |
Definition at line 126 of file tile_selector_widget.h.
Referenced by ClearRangeFilter(), DrawFilterControls(), filter_range_min(), IsInFilterRange(), and SetRangeFilter().
|
private |
Definition at line 127 of file tile_selector_widget.h.
Referenced by ClearRangeFilter(), DrawFilterControls(), filter_range_max(), IsInFilterRange(), and SetRangeFilter().
|
private |
Definition at line 128 of file tile_selector_widget.h.
Referenced by DrawFilterControls().
|
private |
Definition at line 129 of file tile_selector_widget.h.
Referenced by DrawFilterControls().
|
private |
Definition at line 131 of file tile_selector_widget.h.
Referenced by ClearRangeFilter(), DrawFilterControls(), and SetRangeFilter().
|
private |
Definition at line 134 of file tile_selector_widget.h.
Referenced by ClearRangeFilter(), and DrawFilterControls().
|
private |
Definition at line 136 of file tile_selector_widget.h.
Referenced by DrawFilterControls(), JumpToTileFromInput(), SetSelectedTile(), and SetTileCount().