Compare commits
2 Commits
28c0de1848
...
5ee3ec4351
Author | SHA1 | Date | |
---|---|---|---|
5ee3ec4351 | |||
67d36df971 |
40
src/COMMON.h
40
src/COMMON.h
@@ -128,6 +128,46 @@ static inline std::string string_quote(const std::string& string)
|
|||||||
return "\"" + string + "\"";
|
return "\"" + string + "\"";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define FLOAT_FORMAT_MAX_DECIMALS 2
|
||||||
|
#define FLOAT_FORMAT_EPSILON 1e-6f
|
||||||
|
static constexpr f32 FLOAT_FORMAT_POW10[] = {1.f, 10.f, 100.f};
|
||||||
|
|
||||||
|
static inline s32 f32_decimals_needed(f32 value)
|
||||||
|
{
|
||||||
|
f32 integerPart = 0.f;
|
||||||
|
f32 fractionalPart = modff(value, &integerPart);
|
||||||
|
fractionalPart = fabsf(fractionalPart);
|
||||||
|
|
||||||
|
if (fractionalPart < FLOAT_FORMAT_EPSILON)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
for (s32 decimalCount = 1; decimalCount <= FLOAT_FORMAT_MAX_DECIMALS; ++decimalCount)
|
||||||
|
{
|
||||||
|
f32 scaledFraction = fractionalPart * FLOAT_FORMAT_POW10[decimalCount];
|
||||||
|
if (fabsf(scaledFraction - roundf(scaledFraction)) < FLOAT_FORMAT_EPSILON * FLOAT_FORMAT_POW10[decimalCount])
|
||||||
|
return decimalCount;
|
||||||
|
}
|
||||||
|
return FLOAT_FORMAT_MAX_DECIMALS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char* f32_format_get(f32 value)
|
||||||
|
{
|
||||||
|
static std::string formatString;
|
||||||
|
const s32 decimalCount = f32_decimals_needed(value);
|
||||||
|
formatString = (decimalCount == 0) ? "%.0f" : ("%." + std::to_string(decimalCount) + "f");
|
||||||
|
return formatString.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline const char* vec2_format_get(const vec2& value)
|
||||||
|
{
|
||||||
|
static std::string formatString;
|
||||||
|
const s32 decimalCountX = f32_decimals_needed(value.x);
|
||||||
|
const s32 decimalCountY = f32_decimals_needed(value.y);
|
||||||
|
const s32 decimalCount = (decimalCountX > decimalCountY) ? decimalCountX : decimalCountY;
|
||||||
|
formatString = (decimalCount == 0) ? "%.0f" : ("%." + std::to_string(decimalCount) + "f");
|
||||||
|
return formatString.c_str();
|
||||||
|
}
|
||||||
|
|
||||||
static inline std::string path_canonical_resolve
|
static inline std::string path_canonical_resolve
|
||||||
(
|
(
|
||||||
const std::string& inputPath,
|
const std::string& inputPath,
|
||||||
|
@@ -7,11 +7,12 @@ static void _canvas_texture_free(Canvas* self)
|
|||||||
if (self->texture != 0) glDeleteTextures(1, &self->texture);
|
if (self->texture != 0) glDeleteTextures(1, &self->texture);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void _canvas_texture_init(Canvas* self, const vec2& size)
|
static void _canvas_texture_init(Canvas* self, const ivec2& size)
|
||||||
{
|
{
|
||||||
_canvas_texture_free(self);
|
_canvas_texture_free(self);
|
||||||
|
|
||||||
self->size = size;
|
self->size = size;
|
||||||
|
self->previousSize = size;
|
||||||
|
|
||||||
glGenFramebuffers(1, &self->fbo);
|
glGenFramebuffers(1, &self->fbo);
|
||||||
|
|
||||||
@@ -19,7 +20,7 @@ static void _canvas_texture_init(Canvas* self, const vec2& size)
|
|||||||
|
|
||||||
glGenTextures(1, &self->texture);
|
glGenTextures(1, &self->texture);
|
||||||
glBindTexture(GL_TEXTURE_2D, self->texture);
|
glBindTexture(GL_TEXTURE_2D, self->texture);
|
||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, (s32)self->size.x, (s32)self->size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, self->size.x, self->size.y, 0, GL_RGBA, GL_UNSIGNED_BYTE, nullptr);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
|
||||||
@@ -27,13 +28,13 @@ static void _canvas_texture_init(Canvas* self, const vec2& size)
|
|||||||
|
|
||||||
glGenRenderbuffers(1, &self->rbo);
|
glGenRenderbuffers(1, &self->rbo);
|
||||||
glBindRenderbuffer(GL_RENDERBUFFER, self->rbo);
|
glBindRenderbuffer(GL_RENDERBUFFER, self->rbo);
|
||||||
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, (s32)self->size.x, (s32)self->size.y);
|
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, self->size.x, self->size.y);
|
||||||
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, self->rbo);
|
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, self->rbo);
|
||||||
|
|
||||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void canvas_init(Canvas* self, const vec2& size)
|
void canvas_init(Canvas* self, const ivec2& size)
|
||||||
{
|
{
|
||||||
// Axis
|
// Axis
|
||||||
glGenVertexArrays(1, &self->axisVAO);
|
glGenVertexArrays(1, &self->axisVAO);
|
||||||
@@ -109,8 +110,9 @@ void canvas_init(Canvas* self, const vec2& size)
|
|||||||
mat4 canvas_transform_get(Canvas* self, vec2 pan, f32 zoom, OriginType origin)
|
mat4 canvas_transform_get(Canvas* self, vec2 pan, f32 zoom, OriginType origin)
|
||||||
{
|
{
|
||||||
f32 zoomFactor = PERCENT_TO_UNIT(zoom);
|
f32 zoomFactor = PERCENT_TO_UNIT(zoom);
|
||||||
mat4 projection = glm::ortho(0.0f, self->size.x, 0.0f, self->size.y, -1.0f, 1.0f);
|
mat4 projection = glm::ortho(0.0f, (f32)self->size.x, 0.0f, (f32)self->size.y, -1.0f, 1.0f);
|
||||||
mat4 view = mat4{1.0f};
|
mat4 view = mat4{1.0f};
|
||||||
|
vec2 size = vec2(self->size.x, self->size.y);
|
||||||
|
|
||||||
switch (origin)
|
switch (origin)
|
||||||
{
|
{
|
||||||
@@ -118,7 +120,7 @@ mat4 canvas_transform_get(Canvas* self, vec2 pan, f32 zoom, OriginType origin)
|
|||||||
view = glm::translate(view, vec3(pan, 0.0f));
|
view = glm::translate(view, vec3(pan, 0.0f));
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
view = glm::translate(view, vec3((self->size * 0.5f) + pan, 0.0f));
|
view = glm::translate(view, vec3((size * 0.5f) + pan, 0.0f));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -140,13 +142,8 @@ void canvas_viewport_set(Canvas* self)
|
|||||||
|
|
||||||
void canvas_texture_set(Canvas* self)
|
void canvas_texture_set(Canvas* self)
|
||||||
{
|
{
|
||||||
static vec2 previousSize = {-1, -1};
|
if (self->previousSize != self->size)
|
||||||
|
|
||||||
if (previousSize != self->size)
|
|
||||||
{
|
|
||||||
_canvas_texture_init(self, self->size);
|
_canvas_texture_init(self, self->size);
|
||||||
previousSize = self->size;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void canvas_grid_draw(Canvas* self, GLuint& shader, mat4& transform, ivec2& size, ivec2& offset, vec4& color)
|
void canvas_grid_draw(Canvas* self, GLuint& shader, mat4& transform, ivec2& size, ivec2& offset, vec4& color)
|
||||||
|
@@ -12,7 +12,6 @@
|
|||||||
#define CANVAS_GRID_DEFAULT 32
|
#define CANVAS_GRID_DEFAULT 32
|
||||||
#define CANVAS_LINE_LENGTH (FLT_MAX * 0.001f)
|
#define CANVAS_LINE_LENGTH (FLT_MAX * 0.001f)
|
||||||
|
|
||||||
static const vec2 CANVAS_GRID_SIZE = {3200, 1600};
|
|
||||||
static const vec2 CANVAS_PIVOT_SIZE = {8, 8};
|
static const vec2 CANVAS_PIVOT_SIZE = {8, 8};
|
||||||
static const vec2 CANVAS_SCALE_DEFAULT = {1.0f, 1.0f};
|
static const vec2 CANVAS_SCALE_DEFAULT = {1.0f, 1.0f};
|
||||||
|
|
||||||
@@ -45,10 +44,11 @@ struct Canvas
|
|||||||
GLuint textureEBO{};
|
GLuint textureEBO{};
|
||||||
GLuint textureVAO{};
|
GLuint textureVAO{};
|
||||||
GLuint textureVBO{};
|
GLuint textureVBO{};
|
||||||
vec2 size{};
|
ivec2 size{};
|
||||||
|
ivec2 previousSize{};
|
||||||
};
|
};
|
||||||
|
|
||||||
void canvas_init(Canvas* self, const vec2& size);
|
void canvas_init(Canvas* self, const ivec2& size);
|
||||||
mat4 canvas_transform_get(Canvas* self, vec2 pan, f32 zoom, OriginType origin);
|
mat4 canvas_transform_get(Canvas* self, vec2 pan, f32 zoom, OriginType origin);
|
||||||
void canvas_clear(vec4& color);
|
void canvas_clear(vec4& color);
|
||||||
void canvas_bind(Canvas* self);
|
void canvas_bind(Canvas* self);
|
||||||
|
@@ -389,12 +389,12 @@ IMGUI_ITEM_FUNCTION(_imgui_selectable, IMGUI_SELECTABLE, ImGui::Selectable(self.
|
|||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_radio_button, IMGUI_RADIO_BUTTON, s32, ImGui::RadioButton(self.label_get(), &value, self.value));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_radio_button, IMGUI_RADIO_BUTTON, s32, ImGui::RadioButton(self.label_get(), &value, self.value));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_button, IMGUI_COLOR_BUTTON, vec4, ImGui::ColorButton(self.label_get(), ImVec4(value), self.flags));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_button, IMGUI_COLOR_BUTTON, vec4, ImGui::ColorButton(self.label_get(), ImVec4(value), self.flags));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_checkbox, IMGUI_CHECKBOX, bool, ImGui::Checkbox(self.label_get(), &value));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_checkbox, IMGUI_CHECKBOX, bool, ImGui::Checkbox(self.label_get(), &value));
|
||||||
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_int, IMGUI_INPUT_INT, s32, ImGui::InputInt(self.label.c_str(), &value, self.step, self.stepFast, self.flags));
|
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_int, IMGUI_INPUT_INT, s32, ImGui::InputInt(self.label_get(), &value, self.step, self.stepFast, self.flags));
|
||||||
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_int2, IMGUI_INPUT_INT, ivec2, ImGui::InputInt2(self.label.c_str(), value_ptr(value), self.flags));
|
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_int2, IMGUI_INPUT_INT, ivec2, ImGui::InputInt2(self.label_get(), value_ptr(value), self.flags));
|
||||||
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_float, IMGUI_INPUT_FLOAT, f32, ImGui::InputFloat(self.label.c_str(), &value, self.step, self.stepFast, self.format_get(), self.flags));
|
IMGUI_ITEM_VALUE_CLAMP_FUNCTION(_imgui_input_float, IMGUI_INPUT_FLOAT, f32, ImGui::InputFloat(self.label_get(), &value, self.step, self.stepFast, f32_format_get(value), self.flags));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_slider_float, IMGUI_SLIDER_FLOAT, f32, ImGui::SliderFloat(self.label_get(), &value, self.min, self.max, self.format_get(), self.flags));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_slider_float, IMGUI_SLIDER_FLOAT, f32, ImGui::SliderFloat(self.label_get(), &value, self.min, self.max, f32_format_get(value), self.flags));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_drag_float, IMGUI_DRAG_FLOAT, f32, ImGui::DragFloat(self.label_get(), &value, self.speed, self.min, self.max, self.format_get()));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_drag_float, IMGUI_DRAG_FLOAT, f32, ImGui::DragFloat(self.label_get(), &value, self.speed, self.min, self.max, f32_format_get(value)));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_drag_float2, IMGUI_DRAG_FLOAT, vec2, ImGui::DragFloat2(self.label_get(), value_ptr(value), self.speed, self.min, self.max, self.format_get()));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_drag_float2, IMGUI_DRAG_FLOAT, vec2, ImGui::DragFloat2(self.label_get(), value_ptr(value), self.speed, self.min, self.max, vec2_format_get(value)));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_edit3, IMGUI_COLOR_EDIT, vec3, ImGui::ColorEdit3(self.label_get(), value_ptr(value), self.flags));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_edit3, IMGUI_COLOR_EDIT, vec3, ImGui::ColorEdit3(self.label_get(), value_ptr(value), self.flags));
|
||||||
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_edit4, IMGUI_COLOR_EDIT, vec4, ImGui::ColorEdit4(self.label_get(), value_ptr(value), self.flags));
|
IMGUI_ITEM_VALUE_FUNCTION(_imgui_color_edit4, IMGUI_COLOR_EDIT, vec4, ImGui::ColorEdit4(self.label_get(), value_ptr(value), self.flags));
|
||||||
IMGUI_ITEM_CHECKBOX_FUNCTION(_imgui_checkbox_selectable, _imgui_selectable(self, imgui));
|
IMGUI_ITEM_CHECKBOX_FUNCTION(_imgui_checkbox_selectable, _imgui_selectable(self, imgui));
|
||||||
@@ -2069,14 +2069,15 @@ static void _imgui_animation_preview(Imgui* self)
|
|||||||
static s32& tool = self->settings->tool;
|
static s32& tool = self->settings->tool;
|
||||||
static f32& zoom = self->settings->previewZoom;
|
static f32& zoom = self->settings->previewZoom;
|
||||||
static vec2& pan = self->settings->previewPan;
|
static vec2& pan = self->settings->previewPan;
|
||||||
static vec2& size = self->preview->canvas.size;
|
static ivec2& size = self->preview->canvas.size;
|
||||||
static vec2 mousePos{};
|
static vec2 mousePos{};
|
||||||
static vec2 previewPos{};
|
static vec2 previewPos{};
|
||||||
static ImVec2 previewScreenPos{};
|
static ImVec2 previewScreenPos{};
|
||||||
|
|
||||||
std::string mousePositionString = std::format(IMGUI_POSITION_FORMAT, (s32)mousePos.x, (s32)mousePos.y);
|
std::string mousePositionString = std::format(IMGUI_POSITION_FORMAT, (s32)mousePos.x, (s32)mousePos.y);
|
||||||
|
|
||||||
_imgui_begin(IMGUI_ANIMATION_PREVIEW, self);
|
IMGUI_BEGIN_OR_RETURN(IMGUI_ANIMATION_PREVIEW, self);
|
||||||
|
|
||||||
_imgui_begin_child(IMGUI_CANVAS_GRID_CHILD, self);
|
_imgui_begin_child(IMGUI_CANVAS_GRID_CHILD, self);
|
||||||
_imgui_checkbox(IMGUI_CANVAS_GRID, self, self->settings->previewIsGrid);
|
_imgui_checkbox(IMGUI_CANVAS_GRID, self, self->settings->previewIsGrid);
|
||||||
ImGui::SameLine();
|
ImGui::SameLine();
|
||||||
@@ -2140,9 +2141,10 @@ static void _imgui_animation_preview(Imgui* self)
|
|||||||
previewPos = vec2(ImGui::GetCursorPos());
|
previewPos = vec2(ImGui::GetCursorPos());
|
||||||
previewScreenPos = vec2(ImGui::GetCursorScreenPos());
|
previewScreenPos = vec2(ImGui::GetCursorScreenPos());
|
||||||
|
|
||||||
size = ImGui::GetContentRegionAvail();
|
vec2 imageSize = ImGui::GetContentRegionAvail();
|
||||||
|
size = ivec2(imageSize);
|
||||||
preview_draw(self->preview);
|
preview_draw(self->preview);
|
||||||
ImGui::Image(self->preview->canvas.texture, size);
|
ImGui::Image(self->preview->canvas.texture, imageSize);
|
||||||
|
|
||||||
if (self->settings->previewIsTriggers)
|
if (self->settings->previewIsTriggers)
|
||||||
{
|
{
|
||||||
@@ -2169,7 +2171,7 @@ static void _imgui_animation_preview(Imgui* self)
|
|||||||
|
|
||||||
_imgui_end(); // IMGUI_ANIMATION_PREVIEW
|
_imgui_end(); // IMGUI_ANIMATION_PREVIEW
|
||||||
|
|
||||||
mousePos = (vec2((ImGui::GetMousePos()) - (ImGui::GetWindowPos() + previewPos)) - (size * 0.5f) - pan) / PERCENT_TO_UNIT(zoom);
|
mousePos = (vec2((ImGui::GetMousePos()) - (ImGui::GetWindowPos() + previewPos)) - (imageSize * 0.5f) - pan) / PERCENT_TO_UNIT(zoom);
|
||||||
|
|
||||||
const bool isLeft = ImGui::IsKeyPressed(IMGUI_INPUT_LEFT);
|
const bool isLeft = ImGui::IsKeyPressed(IMGUI_INPUT_LEFT);
|
||||||
const bool isRight = ImGui::IsKeyPressed(IMGUI_INPUT_RIGHT);
|
const bool isRight = ImGui::IsKeyPressed(IMGUI_INPUT_RIGHT);
|
||||||
@@ -2255,11 +2257,11 @@ static void _imgui_spritesheet_editor(Imgui* self)
|
|||||||
static ivec2& gridOffset = self->settings->editorGridOffset;
|
static ivec2& gridOffset = self->settings->editorGridOffset;
|
||||||
static vec2& pan = self->settings->editorPan;
|
static vec2& pan = self->settings->editorPan;
|
||||||
static f32& zoom = self->settings->editorZoom;
|
static f32& zoom = self->settings->editorZoom;
|
||||||
static vec2& size = self->editor->canvas.size;
|
static ivec2& size = self->editor->canvas.size;
|
||||||
|
|
||||||
std::string mousePositionString = std::format(IMGUI_POSITION_FORMAT, (s32)mousePos.x, (s32)mousePos.y);
|
std::string mousePositionString = std::format(IMGUI_POSITION_FORMAT, (s32)mousePos.x, (s32)mousePos.y);
|
||||||
|
|
||||||
_imgui_begin(IMGUI_SPRITESHEET_EDITOR, self);
|
IMGUI_BEGIN_OR_RETURN(IMGUI_SPRITESHEET_EDITOR, self);
|
||||||
|
|
||||||
_imgui_begin_child(IMGUI_CANVAS_GRID_CHILD, self);
|
_imgui_begin_child(IMGUI_CANVAS_GRID_CHILD, self);
|
||||||
_imgui_checkbox(IMGUI_CANVAS_GRID, self, self->settings->editorIsGrid);
|
_imgui_checkbox(IMGUI_CANVAS_GRID, self, self->settings->editorIsGrid);
|
||||||
@@ -2287,9 +2289,10 @@ static void _imgui_spritesheet_editor(Imgui* self)
|
|||||||
_imgui_end_child(); // IMGUI_CANVAS_VISUAL_CHILD
|
_imgui_end_child(); // IMGUI_CANVAS_VISUAL_CHILD
|
||||||
|
|
||||||
ImVec2 editorPos = ImGui::GetCursorPos();
|
ImVec2 editorPos = ImGui::GetCursorPos();
|
||||||
size = ImGui::GetContentRegionAvail();
|
vec2 imageSize = ImGui::GetContentRegionAvail();
|
||||||
|
size = ivec2(imageSize);
|
||||||
editor_draw(self->editor);
|
editor_draw(self->editor);
|
||||||
ImGui::Image(self->editor->canvas.texture, size);
|
ImGui::Image(self->editor->canvas.texture, imageSize);
|
||||||
|
|
||||||
if (ImGui::IsItemHovered())
|
if (ImGui::IsItemHovered())
|
||||||
self->pendingCursor = TOOL_CURSORS[tool];
|
self->pendingCursor = TOOL_CURSORS[tool];
|
||||||
|
27
src/imgui.h
27
src/imgui.h
@@ -466,7 +466,6 @@ struct ImguiItem
|
|||||||
{
|
{
|
||||||
std::string label{};
|
std::string label{};
|
||||||
std::string tooltip{};
|
std::string tooltip{};
|
||||||
std::string format{};
|
|
||||||
std::string& text = tooltip;
|
std::string& text = tooltip;
|
||||||
std::string undoAction{};
|
std::string undoAction{};
|
||||||
std::string popup{};
|
std::string popup{};
|
||||||
@@ -548,11 +547,7 @@ struct ImguiItem
|
|||||||
ImguiItem copy(const ImguiItemOverride& override) const
|
ImguiItem copy(const ImguiItemOverride& override) const
|
||||||
{
|
{
|
||||||
ImguiItem out = *this;
|
ImguiItem out = *this;
|
||||||
if (override.isDisabled)
|
if (override.isDisabled) out.isDisabled = override.isDisabled;
|
||||||
{
|
|
||||||
out.isDisabled = override.isDisabled;
|
|
||||||
out.format.clear();
|
|
||||||
}
|
|
||||||
if(override.isSelected) out.isSelected = override.isSelected;
|
if(override.isSelected) out.isSelected = override.isSelected;
|
||||||
if (is_popup() && imgui_is_popup_open(popup)) out.isSelected = true;
|
if (is_popup() && imgui_is_popup_open(popup)) out.isSelected = true;
|
||||||
if (id != ID_NONE) out.id = id + idOffset + override.id;
|
if (id != ID_NONE) out.id = id + idOffset + override.id;
|
||||||
@@ -581,7 +576,6 @@ struct ImguiItem
|
|||||||
const char* drag_drop_get() const { return dragDrop.c_str(); }
|
const char* drag_drop_get() const { return dragDrop.c_str(); }
|
||||||
const char* tooltip_get() const { return tooltip.c_str(); }
|
const char* tooltip_get() const { return tooltip.c_str(); }
|
||||||
const char* text_get() const { return text.c_str(); }
|
const char* text_get() const { return text.c_str(); }
|
||||||
const char* format_get() const { return format.c_str(); }
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IMGUI_ITEM(NAME, ...) const inline ImguiItem NAME = []{ ImguiItem self; __VA_ARGS__; self.construct(); return self; }()
|
#define IMGUI_ITEM(NAME, ...) const inline ImguiItem NAME = []{ ImguiItem self; __VA_ARGS__; self.construct(); return self; }()
|
||||||
@@ -888,7 +882,6 @@ IMGUI_ITEM(IMGUI_SCALE_ANM2_OPTIONS_CHILD,
|
|||||||
IMGUI_ITEM(IMGUI_SCALE_ANM2_VALUE,
|
IMGUI_ITEM(IMGUI_SCALE_ANM2_VALUE,
|
||||||
self.label = "Value",
|
self.label = "Value",
|
||||||
self.tooltip = "The size and position-related frame properties in the anm2 will be scaled by this value.",
|
self.tooltip = "The size and position-related frame properties in the anm2 will be scaled by this value.",
|
||||||
self.format = "%.2f",
|
|
||||||
self.value = 1,
|
self.value = 1,
|
||||||
self.step = 0.25,
|
self.step = 0.25,
|
||||||
self.stepFast = 1
|
self.stepFast = 1
|
||||||
@@ -1277,7 +1270,6 @@ IMGUI_ITEM(IMGUI_CANVAS_VIEW_CHILD,
|
|||||||
IMGUI_ITEM(IMGUI_CANVAS_ZOOM,
|
IMGUI_ITEM(IMGUI_CANVAS_ZOOM,
|
||||||
self.label = "Zoom",
|
self.label = "Zoom",
|
||||||
self.tooltip = "Change the zoom of the canvas.",
|
self.tooltip = "Change the zoom of the canvas.",
|
||||||
self.format = "%.0f",
|
|
||||||
self.min = CANVAS_ZOOM_MIN,
|
self.min = CANVAS_ZOOM_MIN,
|
||||||
self.max = CANVAS_ZOOM_MAX,
|
self.max = CANVAS_ZOOM_MAX,
|
||||||
self.value = CANVAS_ZOOM_DEFAULT
|
self.value = CANVAS_ZOOM_DEFAULT
|
||||||
@@ -1309,7 +1301,6 @@ IMGUI_ITEM(IMGUI_CANVAS_ANIMATION_OVERLAY,
|
|||||||
IMGUI_ITEM(IMGUI_CANVAS_ANIMATION_OVERLAY_TRANSPARENCY,
|
IMGUI_ITEM(IMGUI_CANVAS_ANIMATION_OVERLAY_TRANSPARENCY,
|
||||||
self.label = "Alpha",
|
self.label = "Alpha",
|
||||||
self.tooltip = "Set the transparency of the animation overlay.",
|
self.tooltip = "Set the transparency of the animation overlay.",
|
||||||
self.format = "%.0f",
|
|
||||||
self.value = 255,
|
self.value = 255,
|
||||||
self.max = 255
|
self.max = 255
|
||||||
);
|
);
|
||||||
@@ -1374,39 +1365,34 @@ IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_POSITION,
|
|||||||
self.label = "Position",
|
self.label = "Position",
|
||||||
self.tooltip = "Change the position of the selected frame.",
|
self.tooltip = "Change the position of the selected frame.",
|
||||||
self.undoAction = "Frame Position",
|
self.undoAction = "Frame Position",
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true
|
||||||
self.format = "%.0f"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_CROP,
|
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_CROP,
|
||||||
self.label = "Crop",
|
self.label = "Crop",
|
||||||
self.tooltip = "Change the crop position of the selected frame.",
|
self.tooltip = "Change the crop position of the selected frame.",
|
||||||
self.undoAction = "Frame Crop",
|
self.undoAction = "Frame Crop",
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true
|
||||||
self.format = "%.0f"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_SIZE,
|
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_SIZE,
|
||||||
self.label = "Size",
|
self.label = "Size",
|
||||||
self.tooltip = "Change the size of the crop of the selected frame.",
|
self.tooltip = "Change the size of the crop of the selected frame.",
|
||||||
self.undoAction = "Frame Size",
|
self.undoAction = "Frame Size",
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true
|
||||||
self.format = "%.0f"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_PIVOT,
|
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_PIVOT,
|
||||||
self.label = "Pivot",
|
self.label = "Pivot",
|
||||||
self.tooltip = "Change the pivot of the selected frame.",
|
self.tooltip = "Change the pivot of the selected frame.",
|
||||||
self.undoAction = "Frame Pivot",
|
self.undoAction = "Frame Pivot",
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true
|
||||||
self.format = "%.0f"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_SCALE,
|
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_SCALE,
|
||||||
self.label = "Scale",
|
self.label = "Scale",
|
||||||
self.tooltip = "Change the scale of the selected frame.",
|
self.tooltip = "Change the scale of the selected frame.",
|
||||||
self.undoAction = "Frame Scale",
|
self.undoAction = "Frame Scale",
|
||||||
self.format = "%.0f",
|
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true,
|
||||||
self.value = 100
|
self.value = 100
|
||||||
);
|
);
|
||||||
@@ -1415,8 +1401,7 @@ IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_ROTATION,
|
|||||||
self.label = "Rotation",
|
self.label = "Rotation",
|
||||||
self.tooltip = "Change the rotation of the selected frame.",
|
self.tooltip = "Change the rotation of the selected frame.",
|
||||||
self.undoAction = "Frame Rotation",
|
self.undoAction = "Frame Rotation",
|
||||||
self.isUseItemActivated = true,
|
self.isUseItemActivated = true
|
||||||
self.format = "%.0f"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_DELAY,
|
IMGUI_ITEM(IMGUI_FRAME_PROPERTIES_DELAY,
|
||||||
|
@@ -29,7 +29,7 @@ void preview_tick(Preview* self)
|
|||||||
{
|
{
|
||||||
if (self->isRender)
|
if (self->isRender)
|
||||||
{
|
{
|
||||||
vec2& size = self->canvas.size;
|
ivec2& size = self->canvas.size;
|
||||||
u32 framebufferPixelCount = size.x * size.y * TEXTURE_CHANNELS;
|
u32 framebufferPixelCount = size.x * size.y * TEXTURE_CHANNELS;
|
||||||
std::vector<u8> framebufferPixels(framebufferPixelCount);
|
std::vector<u8> framebufferPixels(framebufferPixelCount);
|
||||||
Texture frameTexture;
|
Texture frameTexture;
|
||||||
|
@@ -1,3 +1,10 @@
|
|||||||
|
#if defined(__clang__) || defined(__GNUC__)
|
||||||
|
#pragma GCC diagnostic push
|
||||||
|
#pragma GCC diagnostic ignored "-Wmissing-field-initializers"
|
||||||
|
#pragma GCC diagnostic ignored "-Wunused-function"
|
||||||
|
#pragma GCC diagnostic ignored "-Wmaybe-uninitialized"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include "texture.h"
|
#include "texture.h"
|
||||||
|
|
||||||
#define STBI_ONLY_PNG
|
#define STBI_ONLY_PNG
|
||||||
|
Reference in New Issue
Block a user