/* 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/image/image.h" #include "base/unique_qptr.h" #include "editor/photo_editor_common.h" #include "editor/photo_editor_inner_common.h" namespace Ui { class LayerWidget; class Show; } // namespace Ui namespace ChatHelpers { class Show; } // namespace ChatHelpers namespace Window { class Controller; } // namespace Window namespace Editor { class ColorPicker; class PhotoEditorContent; class PhotoEditorControls; struct Controllers; class PhotoEditor final : public Ui::RpWidget { public: PhotoEditor( not_null parent, not_null controller, std::shared_ptr photo, PhotoModifications modifications, EditorData data = EditorData()); PhotoEditor( not_null parent, std::shared_ptr show, std::shared_ptr sessionShow, std::shared_ptr photo, PhotoModifications modifications, EditorData data = EditorData()); void save(); [[nodiscard]] rpl::producer doneRequests() const; [[nodiscard]] rpl::producer<> cancelRequests() const; private: void keyPressEvent(QKeyEvent *e) override; PhotoModifications _modifications; const std::shared_ptr _controllers; base::unique_qptr _content; base::unique_qptr _controls; const std::unique_ptr _colorPicker; rpl::variable _mode = PhotoEditorMode{ .mode = PhotoEditorMode::Mode::Transform, .action = PhotoEditorMode::Action::None, }; rpl::event_stream _done; rpl::event_stream<> _cancel; }; void InitEditorLayer( not_null layer, not_null editor, Fn doneCallback); } // namespace Editor