stickers_panel_controller.cpp 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  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. #include "editor/controllers/stickers_panel_controller.h"
  8. #include "chat_helpers/tabbed_panel.h"
  9. #include "chat_helpers/tabbed_selector.h"
  10. #include "window/window_session_controller.h" // Window::GifPauseReason
  11. #include "styles/style_chat_helpers.h"
  12. #include "styles/style_media_view.h"
  13. namespace Editor {
  14. StickersPanelController::StickersPanelController(
  15. not_null<Ui::RpWidget*> panelContainer,
  16. std::shared_ptr<ChatHelpers::Show> show)
  17. : _stickersPanel(
  18. base::make_unique_q<ChatHelpers::TabbedPanel>(
  19. panelContainer,
  20. ChatHelpers::TabbedPanelDescriptor{
  21. .ownedSelector = object_ptr<ChatHelpers::TabbedSelector>(
  22. nullptr,
  23. ChatHelpers::TabbedSelectorDescriptor{
  24. .show = show,
  25. .st = st::storiesComposeControls.tabbed,
  26. .level = Window::GifPauseReason::Layer,
  27. .mode = ChatHelpers::TabbedSelector::Mode::MediaEditor,
  28. .features = {
  29. .megagroupSet = false,
  30. .stickersSettings = false,
  31. .openStickerSets = false,
  32. },
  33. }),
  34. })) {
  35. _stickersPanel->setDesiredHeightValues(
  36. 1.,
  37. st::emojiPanMinHeight / 2,
  38. st::emojiPanMinHeight);
  39. _stickersPanel->hide();
  40. }
  41. auto StickersPanelController::stickerChosen() const
  42. -> rpl::producer<not_null<DocumentData*>> {
  43. return _stickersPanel->selector()->fileChosen(
  44. ) | rpl::map([](const ChatHelpers::FileChosen &data) {
  45. return data.document;
  46. });
  47. }
  48. rpl::producer<bool> StickersPanelController::panelShown() const {
  49. return _stickersPanel->shownValue();
  50. }
  51. void StickersPanelController::setShowRequestChanges(
  52. rpl::producer<ShowRequest> &&showRequest) {
  53. std::move(
  54. showRequest
  55. ) | rpl::start_with_next([=](ShowRequest show) {
  56. if (show == ShowRequest::ToggleAnimated) {
  57. _stickersPanel->toggleAnimated();
  58. _stickersPanel->raise();
  59. } else if (show == ShowRequest::ShowAnimated) {
  60. _stickersPanel->showAnimated();
  61. _stickersPanel->raise();
  62. } else if (show == ShowRequest::HideAnimated) {
  63. _stickersPanel->hideAnimated();
  64. } else if (show == ShowRequest::HideFast) {
  65. _stickersPanel->hideFast();
  66. }
  67. }, _stickersPanel->lifetime());
  68. }
  69. void StickersPanelController::setMoveRequestChanges(
  70. rpl::producer<QPoint> &&moveRequest) {
  71. std::move(
  72. moveRequest
  73. ) | rpl::start_with_next([=](const QPoint &point) {
  74. _stickersPanel->moveBottomRight(
  75. point.y(),
  76. point.x() + _stickersPanel->width() / 2);
  77. }, _stickersPanel->lifetime());
  78. }
  79. } // namespace Editor