Redesigned edit media button. Slightly refactored.

- Added minimal height of thumbs.
 - Removed unused _statusw.
This commit is contained in:
23rd 2019-04-04 19:31:34 +03:00 committed by John Preston
parent 25e0e4b5d3
commit 92d10fd34c
4 changed files with 63 additions and 17 deletions

View File

@ -163,7 +163,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
"lng_pinned_unpin" = "Unpin";
"lng_pinned_notify" = "Notify all members";
"lng_edit_media" = "Edit media";
"lng_edit_media_album_error" = "This file cannot be saved as a part of an album.";
"lng_edit_media_invalid_file" = "Sorry, no way to use this file.";

View File

@ -595,6 +595,23 @@ backgroundScroll: ScrollArea(boxLayerScroll) {
deltab: 10px;
}
editMediaButtonSize: 29px;
editMediaButtonSkip: 8px;
editMediaButtonFileSkipRight: 1px;
editMediaButtonFileSkipTop: 7px;
editMediaButtonIconFile: icon {{ "settings_edit", menuIconFg }};
editMediaButtonIconPhoto: icon {{ "settings_edit", msgServiceFg }};
editMediaButton: IconButton {
width: editMediaButtonSize;
height: editMediaButtonSize;
icon: editMediaButtonIconPhoto;
rippleAreaSize: editMediaButtonSize;
ripple: defaultRippleAnimation;
}
calendarTitleHeight: boxTitleHeight;
calendarPrevious: IconButton {
width: calendarTitleHeight;

View File

@ -174,8 +174,17 @@ EditCaptionBox::EditCaptionBox(
if (!tw || !th) {
tw = th = 1;
}
// Edit media button takes place on thumb preview
// And its height can be greater than height of thumb.
const auto minThumbHeight = st::editMediaButtonSize
+ st::editMediaButtonSkip * 2;
const auto minThumbWidth = minThumbHeight * tw / th;
if (thumbWidth < st::sendMediaPreviewSize) {
thumbWidth = (thumbWidth > 20) ? thumbWidth : 20;
thumbWidth = (thumbWidth > minThumbWidth)
? thumbWidth
: minThumbWidth;
} else {
thumbWidth = st::sendMediaPreviewSize;
}
@ -211,7 +220,7 @@ EditCaptionBox::EditCaptionBox(
_thumb = App::pixmapFromImageInPlace(_thumb.toImage().scaled(
_thumbw * cIntRetinaFactor(),
_thumbh * cIntRetinaFactor(),
Qt::IgnoreAspectRatio,
Qt::KeepAspectRatio,
Qt::SmoothTransformation));
_thumb.setDevicePixelRatio(cRetinaFactor());
};
@ -397,9 +406,20 @@ void EditCaptionBox::updateEditPreview() {
_thumbh = _thumb.height() / cIntRetinaFactor();
_thumbx = (st::boxWideWidth - _thumbw) / 2;
}
updateEditMediaButton();
captionResized();
}
void EditCaptionBox::updateEditMediaButton() {
const auto icon = _doc
? &st::editMediaButtonIconFile
: &st::editMediaButtonIconPhoto;
const auto color = _doc ? &st::windowBgRipple : &st::callFingerprintBg;
_editMedia->setIconOverride(icon);
_editMedia->setRippleColorOverride(color);
_editMedia->setForceRippled(!_doc, anim::type::instant);
}
void EditCaptionBox::createEditMediaButton() {
const auto callback = [=](FileDialog::OpenResult &&result) {
if (result.paths.isEmpty() && result.remoteContent.isEmpty()) {
@ -494,11 +514,15 @@ void EditCaptionBox::createEditMediaButton() {
crl::guard(this, callback));
};
_editMediaClicks.events() | rpl::start_with_next([=] {
buttonCallback();
}, lifetime());
_editMediaClicks.events(
) | rpl::start_with_next(
buttonCallback,
lifetime());
addButton(langFactory(lng_edit_media), buttonCallback);
// Create edit media button.
_editMedia.create(this, st::editMediaButton);
updateEditMediaButton();
_editMedia->setClickedCallback(buttonCallback);
}
void EditCaptionBox::prepare() {
@ -702,11 +726,8 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) {
nameright = 0;
statustop = st::msgFileStatusTop - st::msgFilePadding.top();
}
const auto namewidth = w - nameleft - 0;
if (namewidth > _statusw) {
//w -= (namewidth - _statusw);
//namewidth = _statusw;
}
const auto editButton = _editMedia->width() + st::editMediaButtonSkip;
const auto namewidth = w - nameleft - editButton;
const auto x = (width() - w) / 2, y = st::boxPhotoPadding.top();
// App::roundRect(p, x, y, w, h, st::msgInBg, MessageInCorners, &st::msgInShadow);
@ -746,6 +767,16 @@ void EditCaptionBox::paintEvent(QPaintEvent *e) {
p.setPen(st::boxTextFgError);
p.drawTextLeft(_field->x(), _field->y() + _field->height() + errorTopSkip(), width(), _error);
}
if (_isAllowedEditMedia) {
_editMedia->moveToRight(
st::boxPhotoPadding.right() + (_doc
? st::editMediaButtonFileSkipRight
: st::editMediaButtonSkip),
st::boxPhotoPadding.top() + (_doc
? st::editMediaButtonFileSkipTop
: st::editMediaButtonSkip));
}
}
void EditCaptionBox::resizeEvent(QResizeEvent *e) {
@ -866,9 +897,6 @@ void EditCaptionBox::setName(QString nameString, qint64 size) {
nameString,
Ui::NameTextOptions());
_status = formatSizeText(size);
_statusw = std::max(
_name.maxWidth(),
st::normalFont->width(_status));
}
void EditCaptionBox::keyPressEvent(QKeyEvent *e) {

View File

@ -27,6 +27,7 @@ class Media;
namespace Ui {
class InputField;
class EmojiButton;
class IconButton;
class Checkbox;
} // namespace Ui
@ -67,6 +68,7 @@ private:
void setName(QString nameString, qint64 size);
bool fileFromClipboard(not_null<const QMimeData*> data);
void updateEditPreview();
void updateEditMediaButton();
int errorTopSkip() const;
@ -100,7 +102,6 @@ private:
int _thumbh = 0;
Text _name;
QString _status;
int _statusw = 0;
bool _isAudio = false;
bool _isImage = false;
@ -113,11 +114,12 @@ private:
bool _previewCancelled = false;
mtpRequestId _saveRequestId = 0;
bool _asFile = false;
object_ptr<Ui::IconButton> _editMedia = nullptr;
Ui::SlideWrap<Ui::RpWidget> *_wayWrap = nullptr;
QString _newMediaPath;
bool _isAllowedEditMedia = false;
bool _isAlbum = false;
bool _asFile = false;
rpl::event_stream<> _editMediaClicks;
QString _error;