Mercurial > vim
annotate src/testdir/samples/box.txt @ 36186:631e068e17a9 draft default tip
Added tag v9.1.0741 for changeset 9a68d0ac2749673c4ca12d108958c3e12b7c6845
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Mon, 23 Sep 2024 20:45:07 +0200 |
parents | 58c9f11eae5b |
children |
rev | line source |
---|---|
33844
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
1 void BackgroundBox::prepare() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
2 setTitle(tr::lng_backgrounds_header()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
3 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
4 addButton(tr::lng_close(), [=] { closeBox(); }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
5 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
6 setDimensions(st::boxWideWidth, st::boxMaxListHeight); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
7 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
8 auto wrap = object_ptr<Ui::VerticalLayout>(this); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
9 const auto container = wrap.data(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
10 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
11 Settings::AddSkip(container); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
12 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
13 const auto button = container->add(Settings::CreateButton( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
14 container, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
15 tr::lng_settings_bg_from_file(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
16 st::infoProfileButton)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
17 object_ptr<Info::Profile::FloatingIcon>( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
18 button, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
19 st::infoIconMediaPhoto, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
20 st::infoSharedMediaButtonIconPosition); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
21 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
22 button->setClickedCallback([=] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
23 chooseFromFile(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
24 }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
25 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
26 Settings::AddSkip(container); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
27 Settings::AddDivider(container); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
28 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
29 _inner = container->add( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
30 object_ptr<Inner>(this, &_controller->session(), _forPeer)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
31 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
32 container->resizeToWidth(st::boxWideWidth); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
33 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
34 setInnerWidget(std::move(wrap), st::backgroundScroll); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
35 setInnerTopSkip(st::lineWidth); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
36 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
37 _inner->chooseEvents( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
38 ) | rpl::start_with_next([=](const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
39 chosen(paper); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
40 }, _inner->lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
41 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
42 _inner->removeRequests( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
43 ) | rpl::start_with_next([=](const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
44 removePaper(paper); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
45 }, _inner->lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
46 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
47 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
48 void BackgroundBox::chooseFromFile() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
49 const auto filterStart = _forPeer |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
50 ? u"Image files (*"_q |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
51 : u"Theme files (*.tdesktop-theme *.tdesktop-palette *"_q; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
52 auto filters = QStringList( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
53 filterStart |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
54 + Ui::ImageExtensions().join(u" *"_q) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
55 + u")"_q); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
56 filters.push_back(FileDialog::AllFilesFilter()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
57 const auto callback = [=](const FileDialog::OpenResult &result) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
58 if (result.paths.isEmpty() && result.remoteContent.isEmpty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
59 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
60 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
61 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
62 if (!_forPeer && !result.paths.isEmpty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
63 const auto filePath = result.paths.front(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
64 const auto hasExtension = [&](QLatin1String extension) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
65 return filePath.endsWith(extension, Qt::CaseInsensitive); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
66 }; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
67 if (hasExtension(qstr(".tdesktop-theme")) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
68 || hasExtension(qstr(".tdesktop-palette"))) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
69 Window::Theme::Apply(filePath); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
70 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
71 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
72 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
73 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
74 auto image = Images::Read({ |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
75 .path = result.paths.isEmpty() ? QString() : result.paths.front(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
76 .content = result.remoteContent, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
77 .forceOpaque = true, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
78 }).image; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
79 if (image.isNull() || image.width() <= 0 || image.height() <= 0) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
80 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
81 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
82 auto local = Data::CustomWallPaper(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
83 local.setLocalImageAsThumbnail(std::make_shared<Image>( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
84 std::move(image))); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
85 _controller->show(Box<BackgroundPreviewBox>( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
86 _controller, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
87 local, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
88 BackgroundPreviewArgs{ _forPeer })); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
89 }; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
90 FileDialog::GetOpenPath( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
91 this, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
92 tr::lng_choose_image(tr::now), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
93 filters.join(u";;"_q), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
94 crl::guard(this, callback)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
95 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
96 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
97 bool BackgroundBox::hasDefaultForPeer() const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
98 Expects(_forPeer != nullptr); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
99 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
100 const auto paper = _forPeer->wallPaper(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
101 if (!paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
102 return true; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
103 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
104 const auto reset = _inner->resolveResetCustomPaper(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
105 Assert(reset.has_value()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
106 return (paper->id() == reset->id()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
107 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
108 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
109 bool BackgroundBox::chosenDefaultForPeer( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
110 const Data::WallPaper &paper) const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
111 if (!_forPeer) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
112 return false; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
113 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
114 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
115 const auto reset = _inner->resolveResetCustomPaper(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
116 Assert(reset.has_value()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
117 return (paper.id() == reset->id()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
118 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
119 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
120 void BackgroundBox::chosen(const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
121 if (chosenDefaultForPeer(paper)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
122 if (!hasDefaultForPeer()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
123 const auto reset = crl::guard(this, [=](Fn<void()> close) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
124 resetForPeer(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
125 close(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
126 }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
127 _controller->show(Ui::MakeConfirmBox({ |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
128 .text = tr::lng_background_sure_reset_default(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
129 .confirmed = reset, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
130 .confirmText = tr::lng_background_reset_default(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
131 })); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
132 } else { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
133 closeBox(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
134 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
135 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
136 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
137 _controller->show(Box<BackgroundPreviewBox>( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
138 _controller, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
139 paper, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
140 BackgroundPreviewArgs{ _forPeer })); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
141 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
142 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
143 void BackgroundBox::resetForPeer() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
144 const auto api = &_controller->session().api(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
145 api->request(MTPmessages_SetChatWallPaper( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
146 MTP_flags(0), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
147 _forPeer->input, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
148 MTPInputWallPaper(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
149 MTPWallPaperSettings(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
150 MTPint() |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
151 )).done([=](const MTPUpdates &result) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
152 api->applyUpdates(result); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
153 }).send(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
154 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
155 const auto weak = Ui::MakeWeak(this); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
156 _forPeer->setWallPaper(std::nullopt); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
157 if (weak) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
158 _controller->finishChatThemeEdit(_forPeer); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
159 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
160 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
161 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
162 void BackgroundBox::removePaper(const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
163 const auto session = &_controller->session(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
164 const auto remove = [=, weak = Ui::MakeWeak(this)](Fn<void()> &&close) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
165 close(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
166 if (weak) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
167 weak->_inner->removePaper(paper); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
168 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
169 session->data().removeWallpaper(paper); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
170 session->api().request(MTPaccount_SaveWallPaper( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
171 paper.mtpInput(session), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
172 MTP_bool(true), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
173 paper.mtpSettings() |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
174 )).send(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
175 }; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
176 _controller->show(Ui::MakeConfirmBox({ |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
177 .text = tr::lng_background_sure_delete(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
178 .confirmed = remove, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
179 .confirmText = tr::lng_selected_delete(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
180 })); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
181 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
182 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
183 BackgroundBox::Inner::Inner( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
184 QWidget *parent, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
185 not_null<Main::Session*> session, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
186 PeerData *forPeer) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
187 : RpWidget(parent) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
188 , _session(session) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
189 , _forPeer(forPeer) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
190 , _api(&_session->mtp()) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
191 , _check(std::make_unique<Ui::RoundCheckbox>(st::overviewCheck, [=] { update(); })) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
192 _check->setChecked(true, anim::type::instant); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
193 resize(st::boxWideWidth, 2 * (st::backgroundSize.height() + st::backgroundPadding) + st::backgroundPadding); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
194 Window::Theme::IsNightModeValue( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
195 ) | rpl::start_with_next([=] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
196 updatePapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
197 }, lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
198 requestPapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
199 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
200 _session->downloaderTaskFinished( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
201 ) | rpl::start_with_next([=] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
202 update(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
203 }, lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
204 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
205 style::PaletteChanged( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
206 ) | rpl::start_with_next([=] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
207 _check->invalidateCache(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
208 }, lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
209 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
210 using Update = Window::Theme::BackgroundUpdate; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
211 Window::Theme::Background()->updates( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
212 ) | rpl::start_with_next([=](const Update &update) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
213 if (update.type == Update::Type::New) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
214 sortPapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
215 requestPapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
216 this->update(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
217 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
218 }, lifetime()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
219 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
220 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
221 setMouseTracking(true); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
222 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
223 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
224 void BackgroundBox::Inner::requestPapers() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
225 _api.request(MTPaccount_GetWallPapers( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
226 MTP_long(_session->data().wallpapersHash()) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
227 )).done([=](const MTPaccount_WallPapers &result) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
228 if (_session->data().updateWallpapers(result)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
229 updatePapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
230 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
231 }).send(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
232 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
233 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
234 auto BackgroundBox::Inner::resolveResetCustomPaper() const |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
235 -> std::optional<Data::WallPaper> { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
236 if (!_forPeer) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
237 return {}; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
238 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
239 const auto nonCustom = Window::Theme::Background()->paper(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
240 const auto themeEmoji = _forPeer->themeEmoji(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
241 if (themeEmoji.isEmpty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
242 return nonCustom; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
243 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
244 const auto &themes = _forPeer->owner().cloudThemes(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
245 const auto theme = themes.themeForEmoji(themeEmoji); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
246 if (!theme) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
247 return nonCustom; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
248 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
249 using Type = Data::CloudTheme::Type; XXXXX |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
250 const auto dark = Window::Theme::IsNightMode(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
251 const auto i = theme->settings.find(dark ? Type::Dark : Type::Light); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
252 if (i != end(theme->settings) && i->second.paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
253 return *i->second.paper; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
254 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
255 return nonCustom; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
256 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
257 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
258 void BackgroundBox::Inner::pushCustomPapers() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
259 auto customId = uint64(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
260 if (const auto custom = _forPeer ? _forPeer->wallPaper() : nullptr) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
261 customId = custom->id(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
262 const auto j = ranges::find( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
263 _papers, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
264 custom->id(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
265 [](const Paper &paper) { return paper.data.id(); }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
266 if (j != end(_papers)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
267 j->data = j->data.withParamsFrom(*custom); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
268 } else { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
269 _papers.insert(begin(_papers), Paper{ *custom }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
270 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
271 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
272 if (const auto reset = resolveResetCustomPaper()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
273 _insertedResetId = reset->id(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
274 const auto j = ranges::find( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
275 _papers, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
276 _insertedResetId, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
277 [](const Paper &paper) { return paper.data.id(); }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
278 if (j != end(_papers)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
279 if (_insertedResetId != customId) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
280 j->data = j->data.withParamsFrom(*reset); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
281 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
282 } else { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
283 _papers.insert(begin(_papers), Paper{ *reset }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
284 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
285 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
286 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
287 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
288 void BackgroundBox::Inner::sortPapers() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
289 const auto currentCustom = _forPeer ? _forPeer->wallPaper() : nullptr; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
290 _currentId = currentCustom |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
291 ? currentCustom->id() |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
292 : _insertedResetId |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
293 ? _insertedResetId |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
294 : Window::Theme::Background()->id(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
295 const auto dark = Window::Theme::IsNightMode(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
296 ranges::stable_sort(_papers, std::greater<>(), [&](const Paper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
297 const auto &data = paper.data; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
298 return std::make_tuple( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
299 _insertedResetId && (_insertedResetId == data.id()), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
300 data.id() == _currentId, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
301 dark ? data.isDark() : !data.isDark(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
302 Data::IsDefaultWallPaper(data), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
303 !data.isDefault() && !Data::IsLegacy1DefaultWallPaper(data), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
304 Data::IsLegacy3DefaultWallPaper(data), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
305 Data::IsLegacy2DefaultWallPaper(data), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
306 Data::IsLegacy1DefaultWallPaper(data)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
307 }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
308 if (!_papers.empty() |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
309 && _papers.front().data.id() == _currentId |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
310 && !currentCustom |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
311 && !_insertedResetId) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
312 _papers.front().data = _papers.front().data.withParamsFrom( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
313 Window::Theme::Background()->paper()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
314 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
315 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
316 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
317 void BackgroundBox::Inner::updatePapers() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
318 if (_session->data().wallpapers().empty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
319 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
320 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
321 _over = _overDown = Selection(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
322 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
323 _papers = _session->data().wallpapers( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
324 ) | ranges::views::filter([&](const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
325 return (!paper.isPattern() || !paper.backgroundColors().empty()) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
326 && (!_forPeer |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
327 || (!Data::IsDefaultWallPaper(paper) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
328 && (Data::IsCloudWallPaper(paper) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
329 || Data::IsCustomWallPaper(paper)))); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
330 }) | ranges::views::transform([](const Data::WallPaper &paper) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
331 return Paper{ paper }; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
332 }) | ranges::to_vector; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
333 pushCustomPapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
334 sortPapers(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
335 resizeToContentAndPreload(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
336 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
337 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
338 void BackgroundBox::Inner::resizeToContentAndPreload() { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
339 const auto count = _papers.size(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
340 const auto rows = (count / kBackgroundsInRow) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
341 + (count % kBackgroundsInRow ? 1 : 0); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
342 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
343 resize( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
344 st::boxWideWidth, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
345 (rows * (st::backgroundSize.height() + st::backgroundPadding) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
346 + st::backgroundPadding)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
347 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
348 const auto preload = kBackgroundsInRow * 3; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
349 for (const auto &paper : _papers | ranges::views::take(preload)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
350 if (!paper.data.localThumbnail() && !paper.dataMedia) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
351 if (const auto document = paper.data.document()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
352 paper.dataMedia = document->createMediaView(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
353 paper.dataMedia->thumbnailWanted(paper.data.fileOrigin()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
354 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
355 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
356 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
357 update(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
358 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
359 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
360 void BackgroundBox::Inner::paintEvent(QPaintEvent *e) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
361 QRect r(e->rect()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
362 auto p = QPainter(this); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
363 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
364 if (_papers.empty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
365 p.setFont(st::noContactsFont); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
366 p.setPen(st::noContactsColor); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
367 p.drawText(QRect(0, 0, width(), st::noContactsHeight), tr::lng_contacts_loading(tr::now), style::al_center); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
368 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
369 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
370 auto row = 0; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
371 auto column = 0; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
372 for (const auto &paper : _papers) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
373 const auto increment = gsl::finally([&] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
374 ++column; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
375 if (column == kBackgroundsInRow) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
376 column = 0; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
377 ++row; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
378 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
379 }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
380 if ((st::backgroundSize.height() + st::backgroundPadding) * (row + 1) <= r.top()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
381 continue; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
382 } else if ((st::backgroundSize.height() + st::backgroundPadding) * row >= r.top() + r.height()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
383 break; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
384 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
385 paintPaper(p, paper, column, row); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
386 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
387 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
388 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
389 void BackgroundBox::Inner::validatePaperThumbnail( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
390 const Paper &paper) const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
391 if (!paper.thumbnail.isNull()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
392 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
393 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
394 const auto localThumbnail = paper.data.localThumbnail(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
395 if (!localThumbnail) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
396 if (const auto document = paper.data.document()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
397 if (!paper.dataMedia) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
398 paper.dataMedia = document->createMediaView(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
399 paper.dataMedia->thumbnailWanted(paper.data.fileOrigin()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
400 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
401 if (!paper.dataMedia->thumbnail()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
402 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
403 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
404 } else if (!paper.data.backgroundColors().empty()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
405 paper.thumbnail = Ui::PixmapFromImage( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
406 Ui::GenerateBackgroundImage( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
407 st::backgroundSize * cIntRetinaFactor(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
408 paper.data.backgroundColors(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
409 paper.data.gradientRotation())); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
410 paper.thumbnail.setDevicePixelRatio(cRetinaFactor()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
411 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
412 } else { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
413 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
414 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
415 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
416 const auto thumbnail = localThumbnail |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
417 ? localThumbnail |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
418 : paper.dataMedia->thumbnail(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
419 auto original = thumbnail->original(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
420 if (paper.data.isPattern()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
421 original = Ui::PreparePatternImage( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
422 std::move(original), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
423 paper.data.backgroundColors(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
424 paper.data.gradientRotation(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
425 paper.data.patternOpacity()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
426 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
427 paper.thumbnail = Ui::PixmapFromImage(TakeMiddleSample( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
428 original, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
429 st::backgroundSize)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
430 paper.thumbnail.setDevicePixelRatio(cRetinaFactor()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
431 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
432 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
433 void BackgroundBox::Inner::paintPaper( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
434 QPainter &p, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
435 const Paper &paper, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
436 int column, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
437 int row) const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
438 const auto x = st::backgroundPadding + column * (st::backgroundSize.width() + st::backgroundPadding); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
439 const auto y = st::backgroundPadding + row * (st::backgroundSize.height() + st::backgroundPadding); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
440 validatePaperThumbnail(paper); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
441 if (!paper.thumbnail.isNull()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
442 p.drawPixmap(x, y, paper.thumbnail); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
443 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
444 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
445 const auto over = !v::is_null(_overDown) ? _overDown : _over; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
446 if (paper.data.id() == _currentId) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
447 const auto checkLeft = x + st::backgroundSize.width() - st::overviewCheckSkip - st::overviewCheck.size; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
448 const auto checkTop = y + st::backgroundSize.height() - st::overviewCheckSkip - st::overviewCheck.size; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
449 _check->paint(p, checkLeft, checkTop, width()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
450 } else if (Data::IsCloudWallPaper(paper.data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
451 && !Data::IsDefaultWallPaper(paper.data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
452 && !Data::IsLegacy2DefaultWallPaper(paper.data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
453 && !Data::IsLegacy3DefaultWallPaper(paper.data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
454 && !v::is_null(over) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
455 && (&paper == &_papers[getSelectionIndex(over)])) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
456 const auto deleteSelected = v::is<DeleteSelected>(over); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
457 const auto deletePos = QPoint(x + st::backgroundSize.width() - st::stickerPanDeleteIconBg.width(), y); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
458 p.setOpacity(deleteSelected ? st::stickerPanDeleteOpacityBgOver : st::stickerPanDeleteOpacityBg); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
459 st::stickerPanDeleteIconBg.paint(p, deletePos, width()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
460 p.setOpacity(deleteSelected ? st::stickerPanDeleteOpacityFgOver : st::stickerPanDeleteOpacityFg); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
461 st::stickerPanDeleteIconFg.paint(p, deletePos, width()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
462 p.setOpacity(1.); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
463 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
464 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
465 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
466 void BackgroundBox::Inner::mouseMoveEvent(QMouseEvent *e) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
467 const auto newOver = [&] { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
468 const auto x = e->pos().x(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
469 const auto y = e->pos().y(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
470 const auto width = st::backgroundSize.width(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
471 const auto height = st::backgroundSize.height(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
472 const auto skip = st::backgroundPadding; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
473 const auto row = int((y - skip) / (height + skip)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
474 const auto column = int((x - skip) / (width + skip)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
475 const auto result = row * kBackgroundsInRow + column; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
476 if (y - row * (height + skip) > skip + height) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
477 return Selection(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
478 } else if (x - column * (width + skip) > skip + width) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
479 return Selection(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
480 } else if (result >= _papers.size()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
481 return Selection(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
482 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
483 auto &data = _papers[result].data; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
484 const auto deleteLeft = (column + 1) * (width + skip) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
485 - st::stickerPanDeleteIconBg.width(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
486 const auto deleteBottom = row * (height + skip) + skip |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
487 + st::stickerPanDeleteIconBg.height(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
488 const auto inDelete = (x >= deleteLeft) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
489 && (y < deleteBottom) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
490 && Data::IsCloudWallPaper(data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
491 && !Data::IsDefaultWallPaper(data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
492 && !Data::IsLegacy2DefaultWallPaper(data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
493 && !Data::IsLegacy3DefaultWallPaper(data) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
494 && (_currentId != data.id()); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
495 return (result >= _papers.size()) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
496 ? Selection() |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
497 : inDelete |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
498 ? Selection(DeleteSelected{ result }) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
499 : Selection(Selected{ result }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
500 }(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
501 if (_over != newOver) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
502 repaintPaper(getSelectionIndex(_over)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
503 _over = newOver; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
504 repaintPaper(getSelectionIndex(_over)); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
505 setCursor((!v::is_null(_over) || !v::is_null(_overDown)) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
506 ? style::cur_pointer |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
507 : style::cur_default); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
508 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
509 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
510 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
511 void BackgroundBox::Inner::repaintPaper(int index) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
512 if (index < 0 || index >= _papers.size()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
513 return; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
514 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
515 const auto row = (index / kBackgroundsInRow); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
516 const auto column = (index % kBackgroundsInRow); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
517 const auto width = st::backgroundSize.width(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
518 const auto height = st::backgroundSize.height(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
519 const auto skip = st::backgroundPadding; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
520 update( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
521 (width + skip) * column + skip, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
522 (height + skip) * row + skip, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
523 width, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
524 height); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
525 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
526 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
527 void BackgroundBox::Inner::mousePressEvent(QMouseEvent *e) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
528 _overDown = _over; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
529 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
530 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
531 int BackgroundBox::Inner::getSelectionIndex( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
532 const Selection &selection) const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
533 return v::match(selection, [](const Selected &data) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
534 return data.index; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
535 }, [](const DeleteSelected &data) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
536 return data.index; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
537 }, [](v::null_t) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
538 return -1; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
539 }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
540 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
541 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
542 void BackgroundBox::Inner::mouseReleaseEvent(QMouseEvent *e) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
543 if (base::take(_overDown) == _over && !v::is_null(_over)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
544 const auto index = getSelectionIndex(_over); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
545 if (index >= 0 && index < _papers.size()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
546 if (std::get_if<DeleteSelected>(&_over)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
547 _backgroundRemove.fire_copy(_papers[index].data); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
548 } else if (std::get_if<Selected>(&_over)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
549 auto &paper = _papers[index]; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
550 if (!paper.dataMedia) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
551 if (const auto document = paper.data.document()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
552 // Keep it alive while it is on the screen. |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
553 paper.dataMedia = document->createMediaView(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
554 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
555 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
556 _backgroundChosen.fire_copy(paper.data); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
557 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
558 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
559 } else if (v::is_null(_over)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
560 setCursor(style::cur_default); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
561 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
562 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
563 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
564 void BackgroundBox::Inner::visibleTopBottomUpdated( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
565 int visibleTop, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
566 int visibleBottom) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
567 for (auto i = 0, count = int(_papers.size()); i != count; ++i) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
568 const auto row = (i / kBackgroundsInRow); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
569 const auto height = st::backgroundSize.height(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
570 const auto skip = st::backgroundPadding; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
571 const auto top = skip + row * (height + skip); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
572 const auto bottom = top + height; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
573 if ((bottom <= visibleTop || top >= visibleBottom) |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
574 && !_papers[i].thumbnail.isNull()) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
575 _papers[i].dataMedia = nullptr; |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
576 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
577 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
578 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
579 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
580 rpl::producer<Data::WallPaper> BackgroundBox::Inner::chooseEvents() const { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
581 return _backgroundChosen.events(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
582 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
583 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
584 auto BackgroundBox::Inner::removeRequests() const |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
585 -> rpl::producer<Data::WallPaper> { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
586 return _backgroundRemove.events(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
587 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
588 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
589 void BackgroundBox::Inner::removePaper(const Data::WallPaper &data) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
590 const auto i = ranges::find( |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
591 _papers, |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
592 data.id(), |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
593 [](const Paper &paper) { return paper.data.id(); }); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
594 if (i != end(_papers)) { |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
595 _papers.erase(i); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
596 _over = _overDown = Selection(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
597 resizeToContentAndPreload(); |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
598 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
599 } |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
600 |
58c9f11eae5b
patch 9.0.2134: ml_get error when scrolling
Christian Brabandt <cb@256bit.org>
parents:
diff
changeset
|
601 BackgroundBox::Inner::~Inner() = default; |