diff --git a/Telegram/Resources/langs/lang.strings b/Telegram/Resources/langs/lang.strings index a20f6d64e..49f97b1ce 100644 --- a/Telegram/Resources/langs/lang.strings +++ b/Telegram/Resources/langs/lang.strings @@ -2767,6 +2767,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL "lng_filters_remove_sure" = "This will remove the folder, your chats will not be deleted."; "lng_filters_remove_yes" = "Remove"; +"lng_photo_editor_menu_delete" = "Delete"; +"lng_photo_editor_menu_flip" = "Flip"; +"lng_photo_editor_menu_duplicate" = "Duplicate"; + // Wnd specific "lng_wnd_choose_program_menu" = "Choose Default Program..."; diff --git a/Telegram/SourceFiles/editor/scene_item_base.cpp b/Telegram/SourceFiles/editor/scene_item_base.cpp index 4edffa77b..8b781d848 100644 --- a/Telegram/SourceFiles/editor/scene_item_base.cpp +++ b/Telegram/SourceFiles/editor/scene_item_base.cpp @@ -179,11 +179,14 @@ void ItemBase::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) { } _menu = base::make_unique_q(nullptr); - _menu->addAction(tr::lng_selected_delete(tr::now), [=] { + _menu->addAction(tr::lng_photo_editor_menu_delete(tr::now), [=] { if (const auto s = static_cast(scene())) { s->removeItem(this); } }); + _menu->addAction(tr::lng_photo_editor_menu_flip(tr::now), [=] { + setFlip(!flipped()); + }); _menu->popup(event->screenPos()); } @@ -233,4 +236,18 @@ ItemBase::HandleType ItemBase::handleType(const QPointF &pos) const { : HandleType::None; } +bool ItemBase::flipped() const { + return _flipped; +} + +void ItemBase::setFlip(bool value) { + if (_flipped != value) { + performFlip(); + _flipped = value; + } +} + +void ItemBase::performFlip() { +} + } // namespace Editor diff --git a/Telegram/SourceFiles/editor/scene_item_base.h b/Telegram/SourceFiles/editor/scene_item_base.h index f7246c127..a9e20b81b 100644 --- a/Telegram/SourceFiles/editor/scene_item_base.h +++ b/Telegram/SourceFiles/editor/scene_item_base.h @@ -47,6 +47,9 @@ public: const QStyleOptionGraphicsItem *option, QWidget *widget) override; int type() const override; + + bool flipped() const; + void setFlip(bool value); protected: enum HandleType { None, @@ -66,6 +69,7 @@ protected: float64 verticalSize() const; void setAspectRatio(float64 aspectRatio); + virtual void performFlip(); private: HandleType handleType(const QPointF &pos) const; QRectF rightHandleRect() const; @@ -88,6 +92,8 @@ private: float64 _aspectRatio = 1.0; HandleType _handle = HandleType::None; + bool _flipped = false; + rpl::lifetime _lifetime; }; diff --git a/Telegram/SourceFiles/editor/scene_item_sticker.cpp b/Telegram/SourceFiles/editor/scene_item_sticker.cpp index c7af5512e..1a517fe91 100644 --- a/Telegram/SourceFiles/editor/scene_item_sticker.cpp +++ b/Telegram/SourceFiles/editor/scene_item_sticker.cpp @@ -97,4 +97,8 @@ int ItemSticker::type() const { return Type; } +void ItemSticker::performFlip() { + _pixmap = _pixmap.transformed(QTransform().scale(-1, 1)); +} + } // namespace Editor diff --git a/Telegram/SourceFiles/editor/scene_item_sticker.h b/Telegram/SourceFiles/editor/scene_item_sticker.h index 68c4d18a8..edf819e4c 100644 --- a/Telegram/SourceFiles/editor/scene_item_sticker.h +++ b/Telegram/SourceFiles/editor/scene_item_sticker.h @@ -36,6 +36,8 @@ public: QWidget *widget) override; MTPInputDocument sticker() const; int type() const override; +protected: + void performFlip() override; private: const not_null _document; const std::shared_ptr _mediaView;