mirror of
https://github.com/enduro2d/enduro2d.git
synced 2026-03-22 04:44:09 +07:00
LABEL: dirty flag helper functions
This commit is contained in:
@@ -226,3 +226,22 @@ namespace e2d
|
||||
return outline_color_;
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d::labels
|
||||
{
|
||||
gcomponent<label> mark_dirty(gcomponent<label> self);
|
||||
gcomponent<label> unmark_dirty(gcomponent<label> self);
|
||||
bool is_dirty(const const_gcomponent<label>& self) noexcept;
|
||||
|
||||
gcomponent<label> change_text(gcomponent<label> self, str value);
|
||||
gcomponent<label> change_font(gcomponent<label> self, const font_asset::ptr& value);
|
||||
gcomponent<label> change_tint(gcomponent<label> self, const color32& value);
|
||||
gcomponent<label> change_halign(gcomponent<label> self, label::haligns value);
|
||||
gcomponent<label> change_valign(gcomponent<label> self, label::valigns value);
|
||||
gcomponent<label> change_leading(gcomponent<label> self, f32 value);
|
||||
gcomponent<label> change_tracking(gcomponent<label> self, f32 value);
|
||||
gcomponent<label> change_text_width(gcomponent<label> self, f32 value);
|
||||
gcomponent<label> change_glyph_dilate(gcomponent<label> self, f32 value);
|
||||
gcomponent<label> change_outline_width(gcomponent<label> self, f32 value);
|
||||
gcomponent<label> change_outline_color(gcomponent<label> self, const color32& value);
|
||||
}
|
||||
|
||||
@@ -17,13 +17,13 @@ namespace e2d::bindings::high
|
||||
|
||||
"dirty", sol::property(
|
||||
[](const gcomponent<label>& c) -> bool {
|
||||
return c.owner().component<label::dirty>().exists();
|
||||
return labels::is_dirty(c);
|
||||
},
|
||||
[](gcomponent<label>& c, bool yesno){
|
||||
if ( yesno ) {
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::mark_dirty(c);
|
||||
} else {
|
||||
c.owner().component<label::dirty>().remove();
|
||||
labels::unmark_dirty(c);
|
||||
}
|
||||
}
|
||||
),
|
||||
@@ -33,8 +33,7 @@ namespace e2d::bindings::high
|
||||
return c->text();
|
||||
},
|
||||
[](gcomponent<label>& c, str_view v){
|
||||
c->text(str(v));
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_text(c, str(v));
|
||||
}),
|
||||
|
||||
"font", sol::property(
|
||||
@@ -42,8 +41,7 @@ namespace e2d::bindings::high
|
||||
return c->font();
|
||||
},
|
||||
[](gcomponent<label>& c, const font_asset::ptr& v){
|
||||
c->font(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_font(c, v);
|
||||
}),
|
||||
|
||||
"tint", sol::property(
|
||||
@@ -51,8 +49,7 @@ namespace e2d::bindings::high
|
||||
return c->tint();
|
||||
},
|
||||
[](gcomponent<label>& c, const color32& v){
|
||||
c->tint(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_tint(c, v);
|
||||
}),
|
||||
|
||||
"halign", sol::property(
|
||||
@@ -60,8 +57,7 @@ namespace e2d::bindings::high
|
||||
return c->halign();
|
||||
},
|
||||
[](gcomponent<label>& c, label::haligns v){
|
||||
c->halign(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_halign(c, v);
|
||||
}),
|
||||
|
||||
"valign", sol::property(
|
||||
@@ -69,8 +65,7 @@ namespace e2d::bindings::high
|
||||
return c->valign();
|
||||
},
|
||||
[](gcomponent<label>& c, label::valigns v){
|
||||
c->valign(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_valign(c, v);
|
||||
}),
|
||||
|
||||
"leading", sol::property(
|
||||
@@ -78,8 +73,7 @@ namespace e2d::bindings::high
|
||||
return c->leading();
|
||||
},
|
||||
[](gcomponent<label>& c, f32 v){
|
||||
c->leading(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_leading(c, v);
|
||||
}),
|
||||
|
||||
"tracking", sol::property(
|
||||
@@ -87,8 +81,7 @@ namespace e2d::bindings::high
|
||||
return c->tracking();
|
||||
},
|
||||
[](gcomponent<label>& c, f32 v){
|
||||
c->tracking(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_tracking(c, v);
|
||||
}),
|
||||
|
||||
"text_width", sol::property(
|
||||
@@ -96,8 +89,7 @@ namespace e2d::bindings::high
|
||||
return c->text_width();
|
||||
},
|
||||
[](gcomponent<label>& c, f32 v){
|
||||
c->text_width(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_text_width(c, v);
|
||||
}),
|
||||
|
||||
"glyph_dilate", sol::property(
|
||||
@@ -105,8 +97,7 @@ namespace e2d::bindings::high
|
||||
return c->glyph_dilate();
|
||||
},
|
||||
[](gcomponent<label>& c, f32 v){
|
||||
c->glyph_dilate(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_glyph_dilate(c, v);
|
||||
}),
|
||||
|
||||
"outline_width", sol::property(
|
||||
@@ -114,8 +105,7 @@ namespace e2d::bindings::high
|
||||
return c->outline_width();
|
||||
},
|
||||
[](gcomponent<label>& c, f32 v){
|
||||
c->outline_width(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_outline_width(c, v);
|
||||
}),
|
||||
|
||||
"outline_color", sol::property(
|
||||
@@ -123,8 +113,7 @@ namespace e2d::bindings::high
|
||||
return c->outline_color();
|
||||
},
|
||||
[](gcomponent<label>& c, const color32& v){
|
||||
c->outline_color(v);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_outline_color(c, v);
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
@@ -204,8 +204,7 @@ namespace e2d
|
||||
if ( str text = c->text();
|
||||
ImGui::InputTextMultiline("text", &text) )
|
||||
{
|
||||
c->text(std::move(text));
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_text(c, std::move(text));
|
||||
}
|
||||
|
||||
///TODO(BlackMat): add 'font' inspector
|
||||
@@ -213,64 +212,153 @@ namespace e2d
|
||||
if ( color tint = color(c->tint());
|
||||
ImGui::ColorEdit4("tint", tint.data()) )
|
||||
{
|
||||
c->tint(color32(tint));
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_tint(c, color32(tint));
|
||||
}
|
||||
|
||||
if ( label::haligns halign = c->halign();
|
||||
imgui_utils::show_enum_combo_box("halign", &halign) )
|
||||
{
|
||||
c->halign(halign);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_halign(c, halign);
|
||||
}
|
||||
|
||||
if ( label::valigns valign = c->valign();
|
||||
imgui_utils::show_enum_combo_box("valign", &valign) )
|
||||
{
|
||||
c->valign(valign);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_valign(c, valign);
|
||||
}
|
||||
|
||||
if ( f32 leading = c->leading();
|
||||
ImGui::DragFloat("leading", &leading, 0.01f) )
|
||||
{
|
||||
c->leading(leading);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_leading(c, leading);
|
||||
}
|
||||
|
||||
if ( f32 tracking = c->tracking();
|
||||
ImGui::DragFloat("tracking", &tracking, 0.01f) )
|
||||
{
|
||||
c->tracking(tracking);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_tracking(c, tracking);
|
||||
}
|
||||
|
||||
if ( f32 text_width = c->text_width();
|
||||
ImGui::DragFloat("text_width", &text_width, 1.f) )
|
||||
{
|
||||
c->text_width(text_width);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_text_width(c, text_width);
|
||||
}
|
||||
|
||||
if ( f32 glyph_dilate = c->glyph_dilate();
|
||||
ImGui::SliderFloat("glyph_dilate", &glyph_dilate, -1.f, 1.f) )
|
||||
{
|
||||
c->glyph_dilate(glyph_dilate);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_glyph_dilate(c, glyph_dilate);
|
||||
}
|
||||
|
||||
if ( f32 outline_width = c->outline_width();
|
||||
ImGui::SliderFloat("outline_width", &outline_width, 0.f, 1.f) )
|
||||
{
|
||||
c->outline_width(outline_width);
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_outline_width(c, outline_width);
|
||||
}
|
||||
|
||||
if ( color outline_color = color(c->outline_color());
|
||||
ImGui::ColorEdit4("outline_color", outline_color.data()) )
|
||||
{
|
||||
c->outline_color(color32(outline_color));
|
||||
c.owner().component<label::dirty>().ensure();
|
||||
labels::change_outline_color(c, color32(outline_color));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
namespace e2d::labels
|
||||
{
|
||||
gcomponent<label> mark_dirty(gcomponent<label> self) {
|
||||
if ( self ) {
|
||||
self.owner().component<label::dirty>().ensure();
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
gcomponent<label> unmark_dirty(gcomponent<label> self) {
|
||||
if ( self ) {
|
||||
self.owner().component<label::dirty>().remove();
|
||||
}
|
||||
return self;
|
||||
}
|
||||
|
||||
bool is_dirty(const const_gcomponent<label>& self) noexcept {
|
||||
return self.owner().component<label::dirty>().exists();
|
||||
}
|
||||
|
||||
gcomponent<label> change_text(gcomponent<label> self, str value) {
|
||||
if ( self ) {
|
||||
self->text(std::move(value));
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_font(gcomponent<label> self, const font_asset::ptr& value) {
|
||||
if ( self ) {
|
||||
self->font(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_tint(gcomponent<label> self, const color32& value) {
|
||||
if ( self ) {
|
||||
self->tint(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_halign(gcomponent<label> self, label::haligns value) {
|
||||
if ( self ) {
|
||||
self->halign(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_valign(gcomponent<label> self, label::valigns value) {
|
||||
if ( self ) {
|
||||
self->valign(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_leading(gcomponent<label> self, f32 value) {
|
||||
if ( self ) {
|
||||
self->leading(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_tracking(gcomponent<label> self, f32 value) {
|
||||
if ( self ) {
|
||||
self->tracking(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_text_width(gcomponent<label> self, f32 value) {
|
||||
if ( self ) {
|
||||
self->text_width(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_glyph_dilate(gcomponent<label> self, f32 value) {
|
||||
if ( self ) {
|
||||
self->glyph_dilate(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_outline_width(gcomponent<label> self, f32 value) {
|
||||
if ( self ) {
|
||||
self->outline_width(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
|
||||
gcomponent<label> change_outline_color(gcomponent<label> self, const color32& value) {
|
||||
if ( self ) {
|
||||
self->outline_color(value);
|
||||
}
|
||||
return mark_dirty(self);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user