diff --git a/Telegram/SourceFiles/editor/scene/scene.cpp b/Telegram/SourceFiles/editor/scene/scene.cpp index c743c1a902..06d1568e75 100644 --- a/Telegram/SourceFiles/editor/scene/scene.cpp +++ b/Telegram/SourceFiles/editor/scene/scene.cpp @@ -396,7 +396,9 @@ void Scene::setTextDefaults( void Scene::setTextColor(const QColor &color) { _textColor = color; if (_textEdit.proxy) { - _textEdit.proxy->setDefaultTextColor(color); + _textEdit.proxy->setDefaultTextColor(EffectiveTextColor( + color, + static_cast(_textEditStyle))); } } @@ -593,10 +595,16 @@ void Scene::createTextAtCenter() { clearSelection(); cancelDrawing(); setTextEditing(true); + _textEditStyle = _textStyle; _textEdit.proxy.reset(new TextEditProxy()); const auto proxy = _textEdit.proxy.get(); - setupTextProxy(proxy, _textColor, _textFontSize); + setupTextProxy( + proxy, + EffectiveTextColor( + _textColor, + static_cast(_textEditStyle)), + _textFontSize); const auto emojiDoc = proxy->document(); const auto shortSide = std::min( @@ -663,10 +671,14 @@ void Scene::startTextEditing(ItemText *item) { cancelDrawing(); setTextEditing(true); + _textEditStyle = int(item->textStyle()); _textEdit.proxy.reset(new TextEditProxy()); const auto proxy = _textEdit.proxy.get(); - setupTextProxy(proxy, item->color(), item->fontSize()); + setupTextProxy( + proxy, + EffectiveTextColor(item->color(), item->textStyle()), + item->fontSize()); proxy->setPlainText(item->text()); ReplaceEmoji(proxy->document()); diff --git a/Telegram/SourceFiles/editor/scene/scene.h b/Telegram/SourceFiles/editor/scene/scene.h index ff487e7fba..5b4a31657e 100644 --- a/Telegram/SourceFiles/editor/scene/scene.h +++ b/Telegram/SourceFiles/editor/scene/scene.h @@ -96,6 +96,7 @@ private: QColor _textColor; float64 _textFontSize = 0.; int _textStyle = 0; + int _textEditStyle = 0; struct { std::weak_ptr item; diff --git a/Telegram/SourceFiles/editor/scene/scene_item_text.cpp b/Telegram/SourceFiles/editor/scene/scene_item_text.cpp index a68f98c6db..538515bc61 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_text.cpp +++ b/Telegram/SourceFiles/editor/scene/scene_item_text.cpp @@ -257,6 +257,15 @@ QPainterPath BuildConnectedBackground( } // namespace +QColor EffectiveTextColor(const QColor &color, TextStyle style) { + if (style != TextStyle::Framed) { + return color; + } + return (ComputeBrightness(color) >= kBrightnessFramedThreshold) + ? QColor(0, 0, 0) + : QColor(255, 255, 255); +} + ItemText::ItemText( const QString &text, const QColor &color, diff --git a/Telegram/SourceFiles/editor/scene/scene_item_text.h b/Telegram/SourceFiles/editor/scene/scene_item_text.h index fa2c128186..a1898b2b3e 100644 --- a/Telegram/SourceFiles/editor/scene/scene_item_text.h +++ b/Telegram/SourceFiles/editor/scene/scene_item_text.h @@ -22,6 +22,8 @@ enum class TextStyle : uchar { Plain, }; +[[nodiscard]] QColor EffectiveTextColor(const QColor &color, TextStyle style); + class ItemText : public ItemBase { public: enum { Type = ItemBase::Type + 2 };