More image dialog fixes

This commit is contained in:
Nicolas Werner 2022-05-10 03:19:53 +02:00
parent 8f6ed458a6
commit a6b2be112b
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
35 changed files with 95 additions and 50 deletions

View file

@ -284,7 +284,7 @@ Pane {
destroyOnClose(dialog); destroyOnClose(dialog);
} }
function onShowImageOverlay(room, eventId, url, proportionalHeight, originalWidth) { function onShowImageOverlay(room, eventId, url, originalWidth, proportionalHeight) {
var dialog = imageOverlay.createObject(timelineRoot, { var dialog = imageOverlay.createObject(timelineRoot, {
"room": room, "room": room,
"eventId": eventId, "eventId": eventId,
@ -292,6 +292,7 @@ Pane {
"originalWidth": originalWidth ?? 0, "originalWidth": originalWidth ?? 0,
"proportionalHeight": proportionalHeight ?? 0 "proportionalHeight": proportionalHeight ?? 0
}); });
dialog.showFullScreen(); dialog.showFullScreen();
destroyOnClose(dialog); destroyOnClose(dialog);
} }

View file

@ -67,7 +67,7 @@ AbstractButton {
eventId: parent.eventId eventId: parent.eventId
} }
onClicked :Settings.openImageExternal ? room.openMedia(eventId) : TimelineManager.openImageOverlay(room, url, eventId); onClicked :Settings.openImageExternal ? room.openMedia(eventId) : TimelineManager.openImageOverlay(room, url, eventId, originalWidth, proportionalHeight);
Item { Item {
id: overlay id: overlay

View file

@ -29,18 +29,17 @@ Window {
} }
Item { Item {
id: imgContainer id: imgContainer
property int imgSrcWidth: (originalWidth && originalWidth > 200) ? originalWidth : Screen.width property int imgSrcWidth: (imageOverlay.originalWidth && imageOverlay.originalWidth > 100) ? imageOverlay.originalWidth : Screen.width
property int imgSrcHeight: proportionalHeight ? imgSrcWidth * proportionalHeight : Screen.height property int imgSrcHeight: imageOverlay.proportionalHeight ? imgSrcWidth * imageOverlay.proportionalHeight : Screen.height
height: Math.min(parent.height, imgSrcHeight) height: Math.min(parent.height || Screen.height, imgSrcHeight)
width: Math.min(parent.width, imgSrcWidth) width: Math.min(parent.width || Screen.width, imgSrcWidth)
x: (parent.width - width) x: (parent.width - width) / 2
y: (parent.height - height) y: (parent.height - height) / 2
Image { Image {
id: img id: img

View file

@ -66,7 +66,7 @@ ApplicationWindow {
displayName: profile.displayName displayName: profile.displayName
userid: profile.userid userid: profile.userid
Layout.alignment: Qt.AlignHCenter Layout.alignment: Qt.AlignHCenter
onClicked: TimelineManager.openImageOverlay(null, profile.avatarUrl, "") onClicked: TimelineManager.openImageOverlay(null, profile.avatarUrl, "", 0, 0)
ImageButton { ImageButton {
hoverEnabled: true hoverEnabled: true

View file

@ -20,7 +20,8 @@ public:
BlurhashRunnable(const QString &id, const QSize &requestedSize) BlurhashRunnable(const QString &id, const QSize &requestedSize)
: m_id(id) : m_id(id)
, m_requestedSize(requestedSize) , m_requestedSize(requestedSize)
{} {
}
void run() override; void run() override;
signals: signals:

View file

@ -96,7 +96,8 @@ struct MegolmSessionIndex
MegolmSessionIndex(std::string room_id_, const mtx::events::msg::Encrypted &e) MegolmSessionIndex(std::string room_id_, const mtx::events::msg::Encrypted &e)
: room_id(std::move(room_id_)) : room_id(std::move(room_id_))
, session_id(e.session_id) , session_id(e.session_id)
{} {
}
//! The room in which this session exists. //! The room in which this session exists.
std::string room_id; std::string room_id;

View file

@ -10,7 +10,8 @@ class ColorImageProvider : public QQuickImageProvider
public: public:
ColorImageProvider() ColorImageProvider()
: QQuickImageProvider(QQuickImageProvider::Pixmap) : QQuickImageProvider(QQuickImageProvider::Pixmap)
{} {
}
QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override; QPixmap requestPixmap(const QString &id, QSize *size, const QSize &requestedSize) override;
}; };

View file

@ -15,8 +15,8 @@
namespace nheko { namespace nheko {
struct nonesuch struct nonesuch
{ {
~nonesuch() = delete; ~nonesuch() = delete;
nonesuch(nonesuch const &) = delete; nonesuch(nonesuch const &) = delete;
void operator=(nonesuch const &) = delete; void operator=(nonesuch const &) = delete;
}; };

View file

@ -12,7 +12,8 @@
InviteesModel::InviteesModel(QObject *parent) InviteesModel::InviteesModel(QObject *parent)
: QAbstractListModel{parent} : QAbstractListModel{parent}
{} {
}
void void
InviteesModel::addUser(QString mxid) InviteesModel::addUser(QString mxid)

View file

@ -83,7 +83,8 @@ JdenticonRunnable::JdenticonRunnable(const QString &key,
, m_crop{crop} , m_crop{crop}
, m_radius{radius} , m_radius{radius}
, m_requestedSize(requestedSize.isValid() ? requestedSize : QSize(100, 100)) , m_requestedSize(requestedSize.isValid() ? requestedSize : QSize(100, 100))
{} {
}
void void
JdenticonRunnable::run() JdenticonRunnable::run()

View file

@ -56,7 +56,10 @@ public:
void showChatPage(); void showChatPage();
#ifdef NHEKO_DBUS_SYS #ifdef NHEKO_DBUS_SYS
bool dbusAvailable() const { return dbusAvailable_; } bool dbusAvailable() const
{
return dbusAvailable_;
}
#endif #endif
Q_INVOKABLE void addPerRoomWindow(const QString &room, QWindow *window); Q_INVOKABLE void addPerRoomWindow(const QString &room, QWindow *window);

View file

@ -29,7 +29,8 @@ public:
, m_requestedSize(requestedSize) , m_requestedSize(requestedSize)
, m_crop(crop) , m_crop(crop)
, m_radius(radius) , m_radius(radius)
{} {
}
void run(); void run();

View file

@ -44,7 +44,8 @@ RoomInfoItem::RoomInfoItem(const QString &roomId,
, roomName_{title} , roomName_{title}
, image_{image} , image_{image}
, unreadNotifications_{unreadNotifications} , unreadNotifications_{unreadNotifications}
{} {
}
RoomInfoItem::RoomInfoItem(const RoomInfoItem &other) RoomInfoItem::RoomInfoItem(const RoomInfoItem &other)
: QObject{other.parent()} : QObject{other.parent()}
@ -53,7 +54,8 @@ RoomInfoItem::RoomInfoItem(const RoomInfoItem &other)
, roomName_{other.roomName_} , roomName_{other.roomName_}
, image_{other.image_} , image_{other.image_}
, unreadNotifications_{other.unreadNotifications_} , unreadNotifications_{other.unreadNotifications_}
{} {
}
RoomInfoItem & RoomInfoItem &
RoomInfoItem::operator=(const RoomInfoItem &other) RoomInfoItem::operator=(const RoomInfoItem &other)

View file

@ -16,7 +16,8 @@
NhekoDBusBackend::NhekoDBusBackend(RoomlistModel *parent) NhekoDBusBackend::NhekoDBusBackend(RoomlistModel *parent)
: QObject{parent} : QObject{parent}
, m_parent{parent} , m_parent{parent}
{} {
}
QVector<nheko::dbus::RoomInfoItem> QVector<nheko::dbus::RoomInfoItem>
NhekoDBusBackend::rooms(const QDBusMessage &message) NhekoDBusBackend::rooms(const QDBusMessage &message)

View file

@ -631,7 +631,7 @@ DeviceVerificationFlow::startVerificationRequest()
req.hashes = {"sha256"}; req.hashes = {"sha256"};
req.message_authentication_codes = {"hkdf-hmac-sha256"}; req.message_authentication_codes = {"hkdf-hmac-sha256"};
req.short_authentication_string = {mtx::events::msg::SASMethods::Decimal, req.short_authentication_string = {mtx::events::msg::SASMethods::Decimal,
mtx::events::msg::SASMethods::Emoji}; mtx::events::msg::SASMethods::Emoji};
if (this->type == DeviceVerificationFlow::Type::ToDevice) { if (this->type == DeviceVerificationFlow::Type::ToDevice) {
mtx::requests::ToDeviceMessages<mtx::events::msg::KeyVerificationStart> body; mtx::requests::ToDeviceMessages<mtx::events::msg::KeyVerificationStart> body;

View file

@ -15,7 +15,8 @@
VerificationManager::VerificationManager(TimelineViewManager *o) VerificationManager::VerificationManager(TimelineViewManager *o)
: QObject(o) : QObject(o)
, rooms_(o->rooms()) , rooms_(o->rooms())
{} {
}
static bool static bool
isValidTime(std::optional<uint64_t> t) isValidTime(std::optional<uint64_t> t)

View file

@ -102,7 +102,8 @@ registerSignalHandlers()
// No implementation for systems with no stacktrace support. // No implementation for systems with no stacktrace support.
void void
registerSignalHandlers() registerSignalHandlers()
{} {
}
#endif #endif

View file

@ -44,7 +44,8 @@ init()
NotificationsManager::NotificationsManager(QObject *parent) NotificationsManager::NotificationsManager(QObject *parent)
: QObject(parent) : QObject(parent)
{} {
}
void void
NotificationsManager::postNotification(const mtx::responses::Notification &notification, NotificationsManager::postNotification(const mtx::responses::Notification &notification,

View file

@ -14,7 +14,8 @@
CommunitiesModel::CommunitiesModel(QObject *parent) CommunitiesModel::CommunitiesModel(QObject *parent)
: QAbstractListModel(parent) : QAbstractListModel(parent)
{} {
}
QHash<int, QByteArray> QHash<int, QByteArray>
CommunitiesModel::roleNames() const CommunitiesModel::roleNames() const

View file

@ -74,7 +74,8 @@ private:
DelegateIncubator(DelegateChooser &parent) DelegateIncubator(DelegateChooser &parent)
: QQmlIncubator(QQmlIncubator::AsynchronousIfNested) : QQmlIncubator(QQmlIncubator::AsynchronousIfNested)
, chooser(parent) , chooser(parent)
{} {
}
void statusChanged(QQmlIncubator::Status status) override; void statusChanged(QQmlIncubator::Status status) override;
DelegateChooser &chooser; DelegateChooser &chooser;

View file

@ -39,7 +39,8 @@ class InputVideoSurface : public QAbstractVideoSurface
public: public:
InputVideoSurface(QObject *parent) InputVideoSurface(QObject *parent)
: QAbstractVideoSurface(parent) : QAbstractVideoSurface(parent)
{} {
}
bool present(const QVideoFrame &frame) override; bool present(const QVideoFrame &frame) override;

View file

@ -19,7 +19,8 @@ class PresenceEmitter : public QObject
public: public:
PresenceEmitter(QObject *p = nullptr) PresenceEmitter(QObject *p = nullptr)
: QObject(p) : QObject(p)
{} {
}
void sync(const std::vector<mtx::events::Event<mtx::events::presence::Presence>> &presences); void sync(const std::vector<mtx::events::Event<mtx::events::presence::Presence>> &presences);

View file

@ -1366,7 +1366,8 @@ struct SendMessageVisitor
{ {
explicit SendMessageVisitor(TimelineModel *model) explicit SendMessageVisitor(TimelineModel *model)
: model_(model) : model_(model)
{} {
}
template<typename T, mtx::events::EventType Event> template<typename T, mtx::events::EventType Event>
void sendRoomEvent(mtx::events::RoomEvent<T> msg) void sendRoomEvent(mtx::events::RoomEvent<T> msg)
@ -1390,7 +1391,8 @@ struct SendMessageVisitor
// Do-nothing operator for all unhandled events // Do-nothing operator for all unhandled events
template<typename T> template<typename T>
void operator()(const mtx::events::Event<T> &) void operator()(const mtx::events::Event<T> &)
{} {
}
// Operator for m.room.message events that contain a msgtype in their content // Operator for m.room.message events that contain a msgtype in their content
template<typename T, template<typename T,

View file

@ -147,7 +147,8 @@ class StateKeeper
public: public:
StateKeeper(std::function<void()> &&fn) StateKeeper(std::function<void()> &&fn)
: fn_(std::move(fn)) : fn_(std::move(fn))
{} {
}
~StateKeeper() { fn_(); } ~StateKeeper() { fn_(); }

View file

@ -242,13 +242,17 @@ TimelineViewManager::escapeEmoji(QString str) const
} }
void void
TimelineViewManager::openImageOverlay(TimelineModel *room, QString mxcUrl, QString eventId) TimelineViewManager::openImageOverlay(TimelineModel *room,
QString mxcUrl,
QString eventId,
double originalWidth,
double proportionalHeight)
{ {
if (mxcUrl.isEmpty()) { if (mxcUrl.isEmpty()) {
return; return;
} }
emit showImageOverlay(room, eventId, mxcUrl); emit showImageOverlay(room, eventId, mxcUrl, originalWidth, proportionalHeight);
} }
void void

View file

@ -54,7 +54,11 @@ public:
Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; } Q_INVOKABLE bool isInitialSync() const { return isInitialSync_; }
bool isConnected() const { return isConnected_; } bool isConnected() const { return isConnected_; }
Q_INVOKABLE void openImageOverlay(TimelineModel *room, QString mxcUrl, QString eventId); Q_INVOKABLE void openImageOverlay(TimelineModel *room,
QString mxcUrl,
QString eventId,
double originalWidth,
double proportionalHeight);
Q_INVOKABLE void openImagePackSettings(QString roomid); Q_INVOKABLE void openImagePackSettings(QString roomid);
Q_INVOKABLE void saveMedia(QString mxcUrl); Q_INVOKABLE void saveMedia(QString mxcUrl);
Q_INVOKABLE QColor userColor(QString id, QColor background); Q_INVOKABLE QColor userColor(QString id, QColor background);
@ -87,7 +91,11 @@ signals:
void openProfile(UserProfile *profile); void openProfile(UserProfile *profile);
void showImagePackSettings(TimelineModel *room, ImagePackListModel *packlist); void showImagePackSettings(TimelineModel *room, ImagePackListModel *packlist);
void openLeaveRoomDialog(QString roomid, QString reason = ""); void openLeaveRoomDialog(QString roomid, QString reason = "");
void showImageOverlay(TimelineModel *room, QString eventId, QString url); void showImageOverlay(TimelineModel *room,
QString eventId,
QString url,
double originalWidth,
double proportionalHeight);
public slots: public slots:
void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids); void updateReadReceipts(const QString &room_id, const std::vector<QString> &event_ids);

View file

@ -18,7 +18,8 @@ class HiddenEvents : public QObject
public: public:
explicit HiddenEvents(QObject *p = nullptr) explicit HiddenEvents(QObject *p = nullptr)
: QObject(p) : QObject(p)
{} {
}
Q_INVOKABLE void toggle(int type); Q_INVOKABLE void toggle(int type);
Q_INVOKABLE void save(); Q_INVOKABLE void save();

View file

@ -193,7 +193,8 @@ MxcAnimatedImage::updatePaintNode(QSGNode *oldNode, QQuickItem::UpdatePaintNodeD
} }
QSizeF r = img.size(); QSizeF r = img.size();
r.scale(size(), Qt::KeepAspectRatio); if (height() != 0 || width() != 0)
r.scale(size(), Qt::KeepAspectRatio);
n->setRect((width() - r.width()) / 2, (height() - r.height()) / 2, r.width(), r.height()); n->setRect((width() - r.width()) / 2, (height() - r.height()) / 2, r.width(), r.height());
n->setFiltering(QSGTexture::Linear); n->setFiltering(QSGTexture::Linear);

View file

@ -10,7 +10,8 @@
NhekoCursorShape::NhekoCursorShape(QQuickItem *parent) NhekoCursorShape::NhekoCursorShape(QQuickItem *parent)
: QQuickItem(parent) : QQuickItem(parent)
, currentShape_(Qt::CursorShape::ArrowCursor) , currentShape_(Qt::CursorShape::ArrowCursor)
{} {
}
Qt::CursorShape Qt::CursorShape
NhekoCursorShape::cursorShape() const NhekoCursorShape::cursorShape() const

View file

@ -20,7 +20,8 @@ public:
UIA(QObject *parent = nullptr) UIA(QObject *parent = nullptr)
: QObject(parent) : QObject(parent)
{} {
}
mtx::http::UIAHandler genericHandler(QString context); mtx::http::UIAHandler genericHandler(QString context);

View file

@ -45,7 +45,8 @@ public:
, verification_status(verification_status_) , verification_status(verification_status_)
, lastIp(lastIp_) , lastIp(lastIp_)
, lastTs(lastTs_) , lastTs(lastTs_)
{} {
}
DeviceInfo(const QString deviceID, DeviceInfo(const QString deviceID,
const QString displayName, const QString displayName,
verification::Status verification_status_) verification::Status verification_status_)
@ -53,10 +54,12 @@ public:
, display_name(displayName) , display_name(displayName)
, verification_status(verification_status_) , verification_status(verification_status_)
, lastTs(0) , lastTs(0)
{} {
}
DeviceInfo() DeviceInfo()
: verification_status(verification::UNVERIFIED) : verification_status(verification::UNVERIFIED)
{} {
}
QString device_id; QString device_id;
QString display_name; QString display_name;

View file

@ -20,7 +20,8 @@ extern "C"
CallDevices::CallDevices() CallDevices::CallDevices()
: QObject() : QObject()
{} {
}
#ifdef GSTREAMER_AVAILABLE #ifdef GSTREAMER_AVAILABLE
namespace { namespace {

View file

@ -43,6 +43,6 @@ private:
GstDevice *videoDevice(std::pair<int, int> &resolution, std::pair<int, int> &frameRate) const; GstDevice *videoDevice(std::pair<int, int> &resolution, std::pair<int, int> &frameRate) const;
public: public:
CallDevices(CallDevices const &) = delete; CallDevices(CallDevices const &) = delete;
void operator=(CallDevices const &) = delete; void operator=(CallDevices const &) = delete;
}; };

View file

@ -1152,7 +1152,8 @@ WebRTCSession::acceptAnswer(const std::string &)
void void
WebRTCSession::acceptICECandidates(const std::vector<mtx::events::msg::CallCandidates::Candidate> &) WebRTCSession::acceptICECandidates(const std::vector<mtx::events::msg::CallCandidates::Candidate> &)
{} {
}
bool bool
WebRTCSession::isMicMuted() const WebRTCSession::isMicMuted() const
@ -1168,10 +1169,12 @@ WebRTCSession::toggleMicMute()
void void
WebRTCSession::toggleLocalPiP() WebRTCSession::toggleLocalPiP()
{} {
}
void void
WebRTCSession::end() WebRTCSession::end()
{} {
}
#endif #endif

View file

@ -113,6 +113,6 @@ private:
void clear(); void clear();
public: public:
WebRTCSession(WebRTCSession const &) = delete; WebRTCSession(WebRTCSession const &) = delete;
void operator=(WebRTCSession const &) = delete; void operator=(WebRTCSession const &) = delete;
}; };