photo_editor_content.h 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. /*
  2. This file is part of Telegram Desktop,
  3. the official desktop application for the Telegram messaging service.
  4. For license and copyright information please follow this link:
  5. https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
  6. */
  7. #pragma once
  8. #include "ui/rp_widget.h"
  9. #include "editor/photo_editor_common.h"
  10. #include "editor/photo_editor_inner_common.h"
  11. #include "ui/image/image.h"
  12. namespace Editor {
  13. class Crop;
  14. class Paint;
  15. struct Controllers;
  16. class PhotoEditorContent final : public Ui::RpWidget {
  17. public:
  18. PhotoEditorContent(
  19. not_null<Ui::RpWidget*> parent,
  20. std::shared_ptr<Image> photo,
  21. PhotoModifications modifications,
  22. std::shared_ptr<Controllers> controllers,
  23. EditorData data);
  24. void applyModifications(PhotoModifications modifications);
  25. void applyMode(const PhotoEditorMode &mode);
  26. void applyBrush(const Brush &brush);
  27. void save(PhotoModifications &modifications);
  28. bool handleKeyPress(not_null<QKeyEvent*> e) const;
  29. void setupDragArea();
  30. [[nodiscard]] rpl::producer<QRect> innerRect() const {
  31. return _innerRect.value();
  32. }
  33. private:
  34. const QSize _photoSize;
  35. const base::unique_qptr<Paint> _paint;
  36. const base::unique_qptr<Crop> _crop;
  37. const std::shared_ptr<Image> _photo;
  38. rpl::variable<QRect> _innerRect;
  39. rpl::variable<PhotoModifications> _modifications;
  40. rpl::event_stream<int> _keyPresses;
  41. QRect _imageRect;
  42. QTransform _imageMatrix;
  43. PhotoEditorMode _mode;
  44. };
  45. } // namespace Editor