Canvas constructor improvements and housekeeping
This commit is contained in:
@@ -34,16 +34,15 @@ void Canvas::Update(const gfx::Bitmap &bitmap, ImVec2 bg_size, int tile_size,
|
|||||||
|
|
||||||
void Canvas::UpdateColorPainter(const gfx::Bitmap &bitmap, const ImVec4 &color,
|
void Canvas::UpdateColorPainter(const gfx::Bitmap &bitmap, const ImVec4 &color,
|
||||||
const std::function<void()> &event,
|
const std::function<void()> &event,
|
||||||
ImVec2 bg_size, int tile_size, float scale,
|
int tile_size, float scale) {
|
||||||
float grid_size) {
|
|
||||||
global_scale_ = scale;
|
global_scale_ = scale;
|
||||||
DrawBackground(bg_size);
|
DrawBackground();
|
||||||
DrawContextMenu();
|
DrawContextMenu();
|
||||||
DrawBitmap(bitmap, 2, scale);
|
DrawBitmap(bitmap, 2, scale);
|
||||||
if (DrawSolidTilePainter(color, tile_size)) {
|
if (DrawSolidTilePainter(color, tile_size)) {
|
||||||
event();
|
event();
|
||||||
}
|
}
|
||||||
DrawGrid(grid_size);
|
DrawGrid();
|
||||||
DrawOverlay();
|
DrawOverlay();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -16,19 +16,39 @@ namespace gui {
|
|||||||
using app::gfx::Bitmap;
|
using app::gfx::Bitmap;
|
||||||
using app::gfx::BitmapTable;
|
using app::gfx::BitmapTable;
|
||||||
|
|
||||||
|
enum class CanvasType { kTile, kBlock, kMap };
|
||||||
|
enum class CanvasMode { kPaint, kSelect };
|
||||||
|
enum class CanvasGridSize { k8x8, k16x16, k32x32, k64x64 };
|
||||||
|
|
||||||
class Canvas {
|
class Canvas {
|
||||||
public:
|
public:
|
||||||
Canvas() = default;
|
Canvas() = default;
|
||||||
explicit Canvas(ImVec2 canvas_size)
|
explicit Canvas(ImVec2 canvas_size)
|
||||||
: custom_canvas_size_(true), canvas_sz_(canvas_size) {}
|
: custom_canvas_size_(true), canvas_sz_(canvas_size) {}
|
||||||
|
explicit Canvas(ImVec2 canvas_size, CanvasGridSize grid_size)
|
||||||
|
: custom_canvas_size_(true), canvas_sz_(canvas_size) {
|
||||||
|
switch (grid_size) {
|
||||||
|
case CanvasGridSize::k8x8:
|
||||||
|
custom_step_ = 8.0f;
|
||||||
|
break;
|
||||||
|
case CanvasGridSize::k16x16:
|
||||||
|
custom_step_ = 16.0f;
|
||||||
|
break;
|
||||||
|
case CanvasGridSize::k32x32:
|
||||||
|
custom_step_ = 32.0f;
|
||||||
|
break;
|
||||||
|
case CanvasGridSize::k64x64:
|
||||||
|
custom_step_ = 64.0f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void Update(const gfx::Bitmap& bitmap, ImVec2 bg_size, int tile_size,
|
void Update(const gfx::Bitmap& bitmap, ImVec2 bg_size, int tile_size,
|
||||||
float scale = 1.0f, float grid_size = 64.0f);
|
float scale = 1.0f, float grid_size = 64.0f);
|
||||||
|
|
||||||
void UpdateColorPainter(const gfx::Bitmap& bitmap, const ImVec4& color,
|
void UpdateColorPainter(const gfx::Bitmap& bitmap, const ImVec4& color,
|
||||||
const std::function<void()>& event, ImVec2 bg_size,
|
const std::function<void()>& event, int tile_size,
|
||||||
int tile_size, float scale = 1.0f,
|
float scale = 1.0f);
|
||||||
float grid_size = 64.0f);
|
|
||||||
|
|
||||||
void UpdateEvent(const std::function<void()>& event, ImVec2 bg_size,
|
void UpdateEvent(const std::function<void()>& event, ImVec2 bg_size,
|
||||||
int tile_size, float scale = 1.0f, float grid_size = 64.0f);
|
int tile_size, float scale = 1.0f, float grid_size = 64.0f);
|
||||||
@@ -82,42 +102,26 @@ class Canvas {
|
|||||||
void DrawText(std::string text, int x, int y);
|
void DrawText(std::string text, int x, int y);
|
||||||
void DrawGridLines(float grid_step);
|
void DrawGridLines(float grid_step);
|
||||||
void DrawGrid(float grid_step = 64.0f, int tile_id_offset = 8);
|
void DrawGrid(float grid_step = 64.0f, int tile_id_offset = 8);
|
||||||
|
|
||||||
void DrawOverlay(); // last
|
void DrawOverlay(); // last
|
||||||
|
|
||||||
auto points() const { return points_; }
|
|
||||||
auto mutable_points() { return &points_; }
|
|
||||||
auto GetDrawList() const { return draw_list_; }
|
|
||||||
auto zero_point() const { return canvas_p0_; }
|
|
||||||
auto Scrolling() const { return scrolling_; }
|
|
||||||
auto drawn_tile_position() const { return drawn_tile_pos_; }
|
|
||||||
auto canvas_size() const { return canvas_sz_; }
|
|
||||||
void SetCanvasSize(ImVec2 canvas_size) {
|
void SetCanvasSize(ImVec2 canvas_size) {
|
||||||
canvas_sz_ = canvas_size;
|
canvas_sz_ = canvas_size;
|
||||||
custom_canvas_size_ = true;
|
custom_canvas_size_ = true;
|
||||||
}
|
}
|
||||||
auto IsMouseHovering() const { return is_hovered_; }
|
bool IsMouseHovering() const { return is_hovered_; }
|
||||||
void ZoomIn() { global_scale_ += 0.1f; }
|
void ZoomIn() { global_scale_ += 0.1f; }
|
||||||
void ZoomOut() { global_scale_ -= 0.1f; }
|
void ZoomOut() { global_scale_ -= 0.1f; }
|
||||||
|
|
||||||
|
auto points() const { return points_; }
|
||||||
|
auto mutable_points() { return &points_; }
|
||||||
|
auto draw_list() const { return draw_list_; }
|
||||||
|
auto zero_point() const { return canvas_p0_; }
|
||||||
|
auto scrolling() const { return scrolling_; }
|
||||||
|
auto drawn_tile_position() const { return drawn_tile_pos_; }
|
||||||
|
auto canvas_size() const { return canvas_sz_; }
|
||||||
void set_global_scale(float scale) { global_scale_ = scale; }
|
void set_global_scale(float scale) { global_scale_ = scale; }
|
||||||
auto global_scale() const { return global_scale_; }
|
auto global_scale() const { return global_scale_; }
|
||||||
auto custom_labels_enabled() const { return enable_custom_labels_; }
|
auto custom_labels_enabled() const { return enable_custom_labels_; }
|
||||||
|
|
||||||
void LoadCustomLabels(
|
|
||||||
std::vector<std::array<std::string, 25>> custom_labels) {
|
|
||||||
// Initialize labels
|
|
||||||
for (int i = 0; i < custom_labels.size(); i++) {
|
|
||||||
labels_.push_back(ImVector<std::string>());
|
|
||||||
}
|
|
||||||
for (int i = 0; i < custom_labels.size(); i++) {
|
|
||||||
for (int j = 0; j < custom_labels[i].size(); j++) {
|
|
||||||
labels_[i].push_back(custom_labels[i][j]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
enable_custom_labels_ = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
auto labels(int i) {
|
auto labels(int i) {
|
||||||
if (i >= labels_.size()) {
|
if (i >= labels_.size()) {
|
||||||
labels_.push_back(ImVector<std::string>());
|
labels_.push_back(ImVector<std::string>());
|
||||||
|
|||||||
Reference in New Issue
Block a user