/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "ui/rp_widget.h" #include "ui/effects/animations.h" #include "editor/photo_editor_common.h" #include "editor/photo_editor_inner_common.h" namespace Ui { class IconButton; } // namespace Ui namespace Editor { class EdgeButton; class ButtonBar; struct Controllers; class PhotoEditorControls final : public Ui::RpWidget { public: PhotoEditorControls( not_null parent, std::shared_ptr controllers, const PhotoModifications modifications, bool doneControls = true); [[nodiscard]] rpl::producer rotateRequests() const; [[nodiscard]] rpl::producer<> flipRequests() const; [[nodiscard]] rpl::producer<> paintModeRequests() const; [[nodiscard]] rpl::producer<> doneRequests() const; [[nodiscard]] rpl::producer<> cancelRequests() const; [[nodiscard]] rpl::producer colorLinePositionValue() const; [[nodiscard]] rpl::producer colorLineShownValue() const; [[nodiscard]] bool animating() const; bool handleKeyPress(not_null e) const; void applyMode(const PhotoEditorMode &mode); private: void showAnimated( PhotoEditorMode::Mode mode, anim::type animated = anim::type::normal); int bottomButtonsTop() const; const style::color &_bg; const int _buttonHeight; const base::unique_qptr _transformButtons; const base::unique_qptr _paintTopButtons; const base::unique_qptr _paintBottomButtons; const base::unique_qptr _transformCancel; const base::unique_qptr _rotateButton; const base::unique_qptr _flipButton; const base::unique_qptr _paintModeButton; const base::unique_qptr _transformDone; const base::unique_qptr _paintCancel; const base::unique_qptr _undoButton; const base::unique_qptr _redoButton; const base::unique_qptr _paintModeButtonActive; const base::unique_qptr _stickersButton; const base::unique_qptr _paintDone; bool _flipped = false; Ui::Animations::Simple _toggledBarAnimation; rpl::variable _mode; rpl::event_stream _keyPresses; }; } // namespace Editor