Fixed issues with stacking styles and duplicate/empty styles

This commit is contained in:
Yousef Khadadeh 2025-11-05 08:51:52 +03:00
parent ee887c82dd
commit fe936b6c25
3 changed files with 68 additions and 28 deletions

View file

@ -12,7 +12,23 @@
DrawTextBox::DrawTextBox():
textBox(std::make_shared<RichTextBox>()),
cursor(std::make_shared<RichTextBox::Cursor>())
{}
{
skia::textlayout::TextStyle tStyle;
tStyle.setFontFamilies({SkString{"Roboto"}});
tStyle.setFontSize(16.0f);
tStyle.setForegroundPaint(SkPaint{SkColor4f{0.0f, 1.0f, 1.0f, 1.0f}});
textBox->set_initial_text_style(tStyle);
auto boldMod = std::make_shared<WeightTextStyleModifier>();
boldMod->set_weight(SkFontStyle::kNormal_Weight);
textBox->set_initial_text_style_modifier(boldMod);
auto italicMod = std::make_shared<SlantTextStyleModifier>();
italicMod->set_slant(SkFontStyle::Slant::kUpright_Slant);
textBox->set_initial_text_style_modifier(italicMod);
auto colorMod = std::make_shared<ColorTextStyleModifier>();
colorMod->color = {1.0f, 1.0f, 1.0f, 1.0f};
textBox->set_initial_text_style_modifier(colorMod);
}
DrawComponentType DrawTextBox::get_type() const {
return DRAWCOMPONENT_TEXTBOX;
@ -54,20 +70,6 @@ void DrawTextBox::update_from_delayed_ptr(const std::shared_ptr<DrawComponent>&
void DrawTextBox::init_text_box(DrawingProgram& drawP) {
textBox->set_font_collection(drawP.world.main.fonts.collection); // Getting a segfault relating to the paragraph cache means that the font collection hasn't been set yet
textBox->set_width(d.p2.x() - d.p1.x());
skia::textlayout::TextStyle tStyle;
tStyle.setFontFamilies({SkString{"Roboto"}});
tStyle.setFontSize(16.0f);
textBox->set_initial_text_style(tStyle);
auto boldMod = std::make_shared<WeightTextStyleModifier>();
boldMod->set_weight(SkFontStyle::kNormal_Weight);
textBox->set_initial_text_style_modifier(boldMod);
auto italicMod = std::make_shared<SlantTextStyleModifier>();
italicMod->set_slant(SkFontStyle::Slant::kUpright_Slant);
textBox->set_initial_text_style_modifier(italicMod);
auto colorMod = std::make_shared<ColorTextStyleModifier>();
colorMod->color = {1.0f, 1.0f, 1.0f, 1.0f};
textBox->set_initial_text_style_modifier(colorMod);
}
void DrawTextBox::draw(SkCanvas* canvas, const DrawData& drawData) {