diff --git a/effects/internal/texteffect.cpp b/effects/internal/texteffect.cpp index 871a8b4c8..6c80632cb 100644 --- a/effects/internal/texteffect.cpp +++ b/effects/internal/texteffect.cpp @@ -81,7 +81,8 @@ TextEffect::TextEffect(ClipPtr c, const EffectMeta* em) : outline_width->set_double_minimum_value(0); shadow_bool = add_row(tr("Shadow"))->add_field(EFFECT_FIELD_BOOL, "shadow", 2); - shadow_color = add_row(tr("Shadow Color"))->add_field(EFFECT_FIELD_COLOR, "shadowcolor", 2); + shadow_color = add_row(tr("Shadow Color"))->add_field(EFFECT_FIELD_COLOR, "shadowcolor", 2); + shadow_angle = add_row(tr("Shadow Angle"))->add_field(EFFECT_FIELD_DOUBLE, "shadowangle", 2); shadow_distance = add_row(tr("Shadow Distance"))->add_field(EFFECT_FIELD_DOUBLE, "shadowdistance", 2); shadow_distance->set_double_minimum_value(0); shadow_softness = add_row(tr("Shadow Softness"))->add_field(EFFECT_FIELD_DOUBLE, "shadowsoftness", 2); @@ -97,6 +98,7 @@ TextEffect::TextEffect(ClipPtr c, const EffectMeta* em) : word_wrap_field->set_bool_value(true); outline_color->set_color_value(Qt::black); shadow_color->set_color_value(Qt::black); + shadow_angle->set_double_default_value(45); shadow_opacity->set_double_default_value(100); shadow_softness->set_double_default_value(5); shadow_distance->set_double_default_value(5); @@ -277,10 +279,15 @@ void TextEffect::redraw(double timecode) { // draw software shadow if (shadow_bool->get_bool_value(timecode)) { p.setPen(Qt::NoPen); - int shadow_offset = shadow_distance->get_double_value(timecode); + + // calculate offset using distance and angle + double angle = shadow_angle->get_double_value(timecode) * M_PI / 180.0; + double distance = qFloor(shadow_distance->get_double_value(timecode)); + int shadow_x_offset = qRound(qCos(angle) * distance); + int shadow_y_offset = qRound(qSin(angle) * distance); QPainterPath shadow_path(path); - shadow_path.translate(shadow_offset, shadow_offset); + shadow_path.translate(shadow_x_offset, shadow_y_offset); QColor col = shadow_color->get_color_value(timecode); col.setAlpha(0); @@ -290,8 +297,8 @@ void TextEffect::redraw(double timecode) { p.setBrush(col); p.drawPath(shadow_path); - int blurSoftness = shadow_softness->get_double_value(timecode); - if (blurSoftness > 0) blurred2(img, img.rect(), blurSoftness, false); + int blurSoftness = qFloor(shadow_softness->get_double_value(timecode)); + if (blurSoftness > 0) blurred2(img, img.rect(), blurSoftness, true); } // draw outline diff --git a/effects/internal/texteffect.h b/effects/internal/texteffect.h index 0d6c89237..5a0c7fcc2 100644 --- a/effects/internal/texteffect.h +++ b/effects/internal/texteffect.h @@ -45,7 +45,8 @@ public: EffectField* outline_color; EffectField* shadow_bool; - EffectField* shadow_distance; + EffectField* shadow_angle; + EffectField* shadow_distance; EffectField* shadow_color; EffectField* shadow_softness; EffectField* shadow_opacity;