mirror of
https://github.com/barry-ran/QtScrcpy.git
synced 2025-08-03 14:18:45 +00:00
commit
8ac5de9ea8
14 changed files with 227 additions and 92 deletions
|
@ -59,7 +59,7 @@ INCLUDEPATH += \
|
||||||
# 统一版本号入口,只修改这一个地方即可
|
# 统一版本号入口,只修改这一个地方即可
|
||||||
VERSION_MAJOR = 1
|
VERSION_MAJOR = 1
|
||||||
VERSION_MINOR = 2
|
VERSION_MINOR = 2
|
||||||
VERSION_PATCH = 0
|
VERSION_PATCH = 1
|
||||||
|
|
||||||
# qmake变量的方式定义版本号
|
# qmake变量的方式定义版本号
|
||||||
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH}
|
VERSION = $${VERSION_MAJOR}.$${VERSION_MINOR}.$${VERSION_PATCH}
|
||||||
|
|
|
@ -163,7 +163,6 @@ void Device::initSignals()
|
||||||
// update ui
|
// update ui
|
||||||
if (m_videoForm) {
|
if (m_videoForm) {
|
||||||
m_videoForm->setWindowTitle(deviceName);
|
m_videoForm->setWindowTitle(deviceName);
|
||||||
m_videoForm->updateScreenRatio(size);
|
|
||||||
m_videoForm->updateShowSize(size);
|
m_videoForm->updateShowSize(size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
|
||||||
#include "videoform.h"
|
#include "videoform.h"
|
||||||
|
#include "qyuvopenglwidget.h"
|
||||||
#include "mousetap/mousetap.h"
|
#include "mousetap/mousetap.h"
|
||||||
#include "ui_videoform.h"
|
#include "ui_videoform.h"
|
||||||
#include "iconhelper.h"
|
#include "iconhelper.h"
|
||||||
|
@ -59,15 +60,20 @@ void VideoForm::initUI()
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
m_videoWidget = new QYUVOpenGLWidget();
|
||||||
|
m_videoWidget->hide();
|
||||||
|
ui->keepRadioWidget->setWidget(m_videoWidget);
|
||||||
|
ui->keepRadioWidget->setWidthHeightRadio(m_widthHeightRatio);
|
||||||
|
|
||||||
setMouseTracking(true);
|
setMouseTracking(true);
|
||||||
ui->videoWidget->setMouseTracking(true);
|
m_videoWidget->setMouseTracking(true);
|
||||||
ui->videoWidget->hide();
|
ui->keepRadioWidget->setMouseTracking(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoForm::onGrabCursor(bool grab)
|
void VideoForm::onGrabCursor(bool grab)
|
||||||
{
|
{
|
||||||
#if defined(Q_OS_WIN32) || defined(Q_OS_OSX)
|
#if defined(Q_OS_WIN32) || defined(Q_OS_OSX)
|
||||||
MouseTap::getInstance()->enableMouseEventTap(ui->videoWidget, grab);
|
MouseTap::getInstance()->enableMouseEventTap(m_videoWidget, grab);
|
||||||
#else
|
#else
|
||||||
Q_UNUSED(grab)
|
Q_UNUSED(grab)
|
||||||
#endif
|
#endif
|
||||||
|
@ -75,16 +81,16 @@ void VideoForm::onGrabCursor(bool grab)
|
||||||
|
|
||||||
void VideoForm::updateRender(const AVFrame *frame)
|
void VideoForm::updateRender(const AVFrame *frame)
|
||||||
{
|
{
|
||||||
if (ui->videoWidget->isHidden()) {
|
if (m_videoWidget->isHidden()) {
|
||||||
if (m_loadingWidget) {
|
if (m_loadingWidget) {
|
||||||
m_loadingWidget->close();
|
m_loadingWidget->close();
|
||||||
}
|
}
|
||||||
ui->videoWidget->show();
|
m_videoWidget->show();
|
||||||
}
|
}
|
||||||
|
|
||||||
updateShowSize(QSize(frame->width, frame->height));
|
updateShowSize(QSize(frame->width, frame->height));
|
||||||
ui->videoWidget->setFrameSize(QSize(frame->width, frame->height));
|
m_videoWidget->setFrameSize(QSize(frame->width, frame->height));
|
||||||
ui->videoWidget->updateTextures(frame->data[0], frame->data[1], frame->data[2],
|
m_videoWidget->updateTextures(frame->data[0], frame->data[1], frame->data[2],
|
||||||
frame->linesize[0], frame->linesize[1], frame->linesize[2]);
|
frame->linesize[0], frame->linesize[1], frame->linesize[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,6 +104,18 @@ void VideoForm::showToolForm(bool show)
|
||||||
m_toolForm->setVisible(show);
|
m_toolForm->setVisible(show);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoForm::moveCenter()
|
||||||
|
{
|
||||||
|
QDesktopWidget* desktop = QApplication::desktop();
|
||||||
|
if (!desktop) {
|
||||||
|
qWarning() << "QApplication::desktop() is nullptr";
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QRect screenRect = desktop->availableGeometry();
|
||||||
|
// 窗口居中
|
||||||
|
move(screenRect.center() - QRect(0, 0, size().width(), size().height()).center());
|
||||||
|
}
|
||||||
|
|
||||||
void VideoForm::updateStyleSheet(bool vertical)
|
void VideoForm::updateStyleSheet(bool vertical)
|
||||||
{
|
{
|
||||||
if (vertical) {
|
if (vertical) {
|
||||||
|
@ -129,45 +147,37 @@ QMargins VideoForm::getMargins(bool vertical)
|
||||||
return margins;
|
return margins;
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoForm::updateScreenRatio(const QSize &newSize)
|
|
||||||
{
|
|
||||||
m_widthHeightRatio = 1.0f * qMin(newSize.width(),newSize.height()) / qMax(newSize.width(),newSize.height());
|
|
||||||
}
|
|
||||||
|
|
||||||
void VideoForm::updateShowSize(const QSize &newSize)
|
void VideoForm::updateShowSize(const QSize &newSize)
|
||||||
{
|
{
|
||||||
if (m_frameSize != newSize) {
|
if (m_frameSize != newSize) {
|
||||||
m_frameSize = newSize;
|
m_frameSize = newSize;
|
||||||
bool vertical = newSize.height() > newSize.width();
|
|
||||||
|
m_widthHeightRatio = 1.0f * newSize.width() / newSize.height();
|
||||||
|
ui->keepRadioWidget->setWidthHeightRadio(m_widthHeightRatio);
|
||||||
|
|
||||||
|
bool vertical = m_widthHeightRatio < 1.0f ? true : false;
|
||||||
QSize showSize = newSize;
|
QSize showSize = newSize;
|
||||||
QDesktopWidget* desktop = QApplication::desktop();
|
QDesktopWidget* desktop = QApplication::desktop();
|
||||||
if (desktop) {
|
if (!desktop) {
|
||||||
QRect screenRect = desktop->availableGeometry();
|
qWarning() << "QApplication::desktop() is nullptr";
|
||||||
if (vertical) {
|
return;
|
||||||
showSize.setHeight(qMin(newSize.height(), screenRect.height() - 200));
|
}
|
||||||
showSize.setWidth(showSize.height() * m_widthHeightRatio);
|
QRect screenRect = desktop->availableGeometry();
|
||||||
} else {
|
if (vertical) {
|
||||||
showSize.setWidth(qMin(newSize.width(), screenRect.width()/2));
|
showSize.setHeight(qMin(newSize.height(), screenRect.height() - 200));
|
||||||
showSize.setHeight(showSize.width() * m_widthHeightRatio);
|
showSize.setWidth(showSize.height() * m_widthHeightRatio);
|
||||||
}
|
} else {
|
||||||
|
showSize.setWidth(qMin(newSize.width(), screenRect.width()/2));
|
||||||
if (isFullScreen()) {
|
showSize.setHeight(showSize.width() / m_widthHeightRatio);
|
||||||
switchFullScreen();
|
|
||||||
}
|
|
||||||
if (m_skin) {
|
|
||||||
QMargins m = getMargins(vertical);
|
|
||||||
showSize.setWidth(showSize.width() + m.left() + m.right());
|
|
||||||
showSize.setHeight(showSize.height() + m.top() + m.bottom());
|
|
||||||
}
|
|
||||||
|
|
||||||
// 窗口居中
|
|
||||||
move(screenRect.center() - QRect(0, 0, showSize.width(), showSize.height()).center());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_skin) {
|
if (isFullScreen()) {
|
||||||
// 减去标题栏高度
|
switchFullScreen();
|
||||||
int titleBarHeight = style()->pixelMetric(QStyle::PM_TitleBarHeight);
|
}
|
||||||
showSize.setHeight(showSize.height() - titleBarHeight);
|
if (m_skin) {
|
||||||
|
QMargins m = getMargins(vertical);
|
||||||
|
showSize.setWidth(showSize.width() + m.left() + m.right());
|
||||||
|
showSize.setHeight(showSize.height() + m.top() + m.bottom());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (showSize != size()) {
|
if (showSize != size()) {
|
||||||
|
@ -175,6 +185,7 @@ void VideoForm::updateShowSize(const QSize &newSize)
|
||||||
if (m_skin) {
|
if (m_skin) {
|
||||||
updateStyleSheet(vertical);
|
updateStyleSheet(vertical);
|
||||||
}
|
}
|
||||||
|
moveCenter();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -182,7 +193,14 @@ void VideoForm::updateShowSize(const QSize &newSize)
|
||||||
void VideoForm::switchFullScreen()
|
void VideoForm::switchFullScreen()
|
||||||
{
|
{
|
||||||
if (isFullScreen()) {
|
if (isFullScreen()) {
|
||||||
|
// 横屏全屏铺满全屏,恢复时,恢复保持宽高比
|
||||||
|
if (m_widthHeightRatio > 1.0f) {
|
||||||
|
ui->keepRadioWidget->setWidthHeightRadio(m_widthHeightRatio);
|
||||||
|
}
|
||||||
|
|
||||||
showNormal();
|
showNormal();
|
||||||
|
// fullscreen window will move (0,0). qt bug?
|
||||||
|
move(m_fullScreenBeforePos);
|
||||||
|
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
//setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
//setWindowFlags(windowFlags() | Qt::FramelessWindowHint);
|
||||||
|
@ -196,6 +214,12 @@ void VideoForm::switchFullScreen()
|
||||||
::SetThreadExecutionState(ES_CONTINUOUS);
|
::SetThreadExecutionState(ES_CONTINUOUS);
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
// 横屏全屏铺满全屏,不保持宽高比
|
||||||
|
if (m_widthHeightRatio > 1.0f) {
|
||||||
|
ui->keepRadioWidget->setWidthHeightRadio(-1.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_fullScreenBeforePos = pos();
|
||||||
// 这种临时增加标题栏再全屏的方案会导致收不到mousemove事件,导致setmousetrack失效
|
// 这种临时增加标题栏再全屏的方案会导致收不到mousemove事件,导致setmousetrack失效
|
||||||
// mac fullscreen must show title bar
|
// mac fullscreen must show title bar
|
||||||
#ifdef Q_OS_OSX
|
#ifdef Q_OS_OSX
|
||||||
|
@ -256,12 +280,12 @@ void VideoForm::setController(Controller *controller)
|
||||||
|
|
||||||
void VideoForm::mousePressEvent(QMouseEvent *event)
|
void VideoForm::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (ui->videoWidget->geometry().contains(event->pos())) {
|
if (m_videoWidget->geometry().contains(event->pos())) {
|
||||||
if (!m_controller) {
|
if (!m_controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event->setLocalPos(ui->videoWidget->mapFrom(this, event->localPos().toPoint()));
|
event->setLocalPos(m_videoWidget->mapFrom(this, event->localPos().toPoint()));
|
||||||
m_controller->mouseEvent(event, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->mouseEvent(event, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
} else {
|
} else {
|
||||||
if (event->button() == Qt::LeftButton) {
|
if (event->button() == Qt::LeftButton) {
|
||||||
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
|
m_dragPosition = event->globalPos() - frameGeometry().topLeft();
|
||||||
|
@ -276,23 +300,23 @@ void VideoForm::mouseReleaseEvent(QMouseEvent *event)
|
||||||
if (!m_controller) {
|
if (!m_controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event->setLocalPos(ui->videoWidget->mapFrom(this, event->localPos().toPoint()));
|
event->setLocalPos(m_videoWidget->mapFrom(this, event->localPos().toPoint()));
|
||||||
// local check
|
// local check
|
||||||
QPointF local = event->localPos();
|
QPointF local = event->localPos();
|
||||||
if (local.x() < 0) {
|
if (local.x() < 0) {
|
||||||
local.setX(0);
|
local.setX(0);
|
||||||
}
|
}
|
||||||
if (local.x() > ui->videoWidget->width()) {
|
if (local.x() > m_videoWidget->width()) {
|
||||||
local.setX(ui->videoWidget->width());
|
local.setX(m_videoWidget->width());
|
||||||
}
|
}
|
||||||
if (local.y() < 0) {
|
if (local.y() < 0) {
|
||||||
local.setY(0);
|
local.setY(0);
|
||||||
}
|
}
|
||||||
if (local.y() > ui->videoWidget->height()) {
|
if (local.y() > m_videoWidget->height()) {
|
||||||
local.setY(ui->videoWidget->height());
|
local.setY(m_videoWidget->height());
|
||||||
}
|
}
|
||||||
event->setLocalPos(local);
|
event->setLocalPos(local);
|
||||||
m_controller->mouseEvent(event, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->mouseEvent(event, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
} else {
|
} else {
|
||||||
m_dragPosition = QPoint(0, 0);
|
m_dragPosition = QPoint(0, 0);
|
||||||
}
|
}
|
||||||
|
@ -300,12 +324,12 @@ void VideoForm::mouseReleaseEvent(QMouseEvent *event)
|
||||||
|
|
||||||
void VideoForm::mouseMoveEvent(QMouseEvent *event)
|
void VideoForm::mouseMoveEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
if (ui->videoWidget->geometry().contains(event->pos())) {
|
if (m_videoWidget->geometry().contains(event->pos())) {
|
||||||
if (!m_controller) {
|
if (!m_controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
event->setLocalPos(ui->videoWidget->mapFrom(this, event->localPos().toPoint()));
|
event->setLocalPos(m_videoWidget->mapFrom(this, event->localPos().toPoint()));
|
||||||
m_controller->mouseEvent(event, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->mouseEvent(event, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
} else if (!m_dragPosition.isNull()){
|
} else if (!m_dragPosition.isNull()){
|
||||||
if (event->buttons() & Qt::LeftButton) {
|
if (event->buttons() & Qt::LeftButton) {
|
||||||
move(event->globalPos() - m_dragPosition);
|
move(event->globalPos() - m_dragPosition);
|
||||||
|
@ -316,11 +340,11 @@ void VideoForm::mouseMoveEvent(QMouseEvent *event)
|
||||||
|
|
||||||
void VideoForm::wheelEvent(QWheelEvent *event)
|
void VideoForm::wheelEvent(QWheelEvent *event)
|
||||||
{
|
{
|
||||||
if (ui->videoWidget->geometry().contains(event->pos())) {
|
if (m_videoWidget->geometry().contains(event->pos())) {
|
||||||
if (!m_controller) {
|
if (!m_controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
QPointF pos = ui->videoWidget->mapFrom(this, event->pos());
|
QPointF pos = m_videoWidget->mapFrom(this, event->pos());
|
||||||
/*
|
/*
|
||||||
QWheelEvent(const QPointF &pos, const QPointF& globalPos, int delta,
|
QWheelEvent(const QPointF &pos, const QPointF& globalPos, int delta,
|
||||||
Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers,
|
Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers,
|
||||||
|
@ -328,7 +352,7 @@ void VideoForm::wheelEvent(QWheelEvent *event)
|
||||||
*/
|
*/
|
||||||
QWheelEvent wheelEvent(pos, event->globalPosF(), event->delta(),
|
QWheelEvent wheelEvent(pos, event->globalPosF(), event->delta(),
|
||||||
event->buttons(), event->modifiers(), event->orientation());
|
event->buttons(), event->modifiers(), event->orientation());
|
||||||
m_controller->wheelEvent(&wheelEvent, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->wheelEvent(&wheelEvent, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -354,7 +378,7 @@ void VideoForm::keyPressEvent(QKeyEvent *event)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_controller->keyEvent(event, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->keyEvent(event, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoForm::keyReleaseEvent(QKeyEvent *event)
|
void VideoForm::keyReleaseEvent(QKeyEvent *event)
|
||||||
|
@ -362,7 +386,7 @@ void VideoForm::keyReleaseEvent(QKeyEvent *event)
|
||||||
if (!m_controller) {
|
if (!m_controller) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
m_controller->keyEvent(event, ui->videoWidget->frameSize(), ui->videoWidget->size());
|
m_controller->keyEvent(event, m_videoWidget->frameSize(), m_videoWidget->size());
|
||||||
}
|
}
|
||||||
|
|
||||||
void VideoForm::paintEvent(QPaintEvent *paint)
|
void VideoForm::paintEvent(QPaintEvent *paint)
|
||||||
|
@ -382,6 +406,32 @@ void VideoForm::showEvent(QShowEvent *event)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void VideoForm::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
QSize goodSize = ui->keepRadioWidget->goodSize();
|
||||||
|
if (goodSize.isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
QSize curSize = size();
|
||||||
|
// 限制VideoForm尺寸不能小于keepRadioWidget good size
|
||||||
|
if (m_widthHeightRatio > 1.0f) {
|
||||||
|
// hor
|
||||||
|
if (curSize.height() <= goodSize.height()) {
|
||||||
|
setMinimumHeight(goodSize.height());
|
||||||
|
} else {
|
||||||
|
setMinimumHeight(0);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// ver
|
||||||
|
if (curSize.width() <= goodSize.width()) {
|
||||||
|
setMinimumWidth(goodSize.width());
|
||||||
|
} else {
|
||||||
|
setMinimumWidth(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void VideoForm::dragEnterEvent(QDragEnterEvent *event)
|
void VideoForm::dragEnterEvent(QDragEnterEvent *event)
|
||||||
{
|
{
|
||||||
event->acceptProposedAction();
|
event->acceptProposedAction();
|
||||||
|
|
|
@ -12,6 +12,7 @@ struct AVFrame;
|
||||||
class ToolForm;
|
class ToolForm;
|
||||||
class Controller;
|
class Controller;
|
||||||
class FileHandler;
|
class FileHandler;
|
||||||
|
class QYUVOpenGLWidget;
|
||||||
class VideoForm : public QWidget
|
class VideoForm : public QWidget
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
@ -21,7 +22,6 @@ public:
|
||||||
|
|
||||||
void switchFullScreen();
|
void switchFullScreen();
|
||||||
void staysOnTop(bool top = true);
|
void staysOnTop(bool top = true);
|
||||||
void updateScreenRatio(const QSize &newSize);
|
|
||||||
void updateShowSize(const QSize &newSize);
|
void updateShowSize(const QSize &newSize);
|
||||||
void updateRender(const AVFrame *frame);
|
void updateRender(const AVFrame *frame);
|
||||||
void setController(Controller *controller);
|
void setController(Controller *controller);
|
||||||
|
@ -42,6 +42,7 @@ private:
|
||||||
void initUI();
|
void initUI();
|
||||||
|
|
||||||
void showToolForm(bool show = true);
|
void showToolForm(bool show = true);
|
||||||
|
void moveCenter();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event);
|
void mousePressEvent(QMouseEvent *event);
|
||||||
|
@ -53,6 +54,7 @@ protected:
|
||||||
|
|
||||||
void paintEvent(QPaintEvent *);
|
void paintEvent(QPaintEvent *);
|
||||||
void showEvent(QShowEvent *event);
|
void showEvent(QShowEvent *event);
|
||||||
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
|
||||||
void dragEnterEvent(QDragEnterEvent *event);
|
void dragEnterEvent(QDragEnterEvent *event);
|
||||||
void dragMoveEvent(QDragMoveEvent *event);
|
void dragMoveEvent(QDragMoveEvent *event);
|
||||||
|
@ -64,12 +66,14 @@ private:
|
||||||
Ui::videoForm *ui;
|
Ui::videoForm *ui;
|
||||||
QPointer<ToolForm> m_toolForm;
|
QPointer<ToolForm> m_toolForm;
|
||||||
QPointer<QWidget> m_loadingWidget;
|
QPointer<QWidget> m_loadingWidget;
|
||||||
|
QPointer<QYUVOpenGLWidget> m_videoWidget;
|
||||||
|
|
||||||
//inside member
|
//inside member
|
||||||
QSize m_frameSize;
|
QSize m_frameSize;
|
||||||
QPoint m_dragPosition;
|
QPoint m_dragPosition;
|
||||||
float m_widthHeightRatio = 0.5f;
|
float m_widthHeightRatio = 0.5f;
|
||||||
bool m_skin = true;
|
bool m_skin = true;
|
||||||
|
QPoint m_fullScreenBeforePos;
|
||||||
|
|
||||||
//outside member
|
//outside member
|
||||||
QString m_serial = "";
|
QString m_serial = "";
|
||||||
|
|
|
@ -39,15 +39,15 @@
|
||||||
<number>0</number>
|
<number>0</number>
|
||||||
</property>
|
</property>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QYUVOpenGLWidget" name="videoWidget" native="true"/>
|
<widget class="KeepRadioWidget" name="keepRadioWidget" native="true"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>QYUVOpenGLWidget</class>
|
<class>KeepRadioWidget</class>
|
||||||
<extends>QWidget</extends>
|
<extends>QWidget</extends>
|
||||||
<header>qyuvopenglwidget.h</header>
|
<header location="global">keepradiowidget.h</header>
|
||||||
<container>1</container>
|
<container>1</container>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
|
|
|
@ -19,17 +19,17 @@
|
||||||
<key>CFBundlePackageType</key>
|
<key>CFBundlePackageType</key>
|
||||||
<string>APPL</string>
|
<string>APPL</string>
|
||||||
<key>CFBundleShortVersionString</key>
|
<key>CFBundleShortVersionString</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.1</string>
|
||||||
<key>CFBundleSupportedPlatforms</key>
|
<key>CFBundleSupportedPlatforms</key>
|
||||||
<array>
|
<array>
|
||||||
<string>MacOSX</string>
|
<string>MacOSX</string>
|
||||||
</array>
|
</array>
|
||||||
<key>CFBundleVersion</key>
|
<key>CFBundleVersion</key>
|
||||||
<string>1.2.0</string>
|
<string>1.2.1</string>
|
||||||
<key>LSMinimumSystemVersion</key>
|
<key>LSMinimumSystemVersion</key>
|
||||||
<string>10.10</string>
|
<string>10.10</string>
|
||||||
<key>NSAppleEventsUsageDescription</key>
|
<key>NSAppleEventsUsageDescription</key>
|
||||||
<string></string>
|
<string></string>
|
||||||
<key>NSHumanReadableCopyright</key>
|
<key>NSHumanReadableCopyright</key>
|
||||||
<string>Copyright © 2018-2038 rankun. All rights reserved.</string>
|
<string>Copyright © 2018-2038 rankun. All rights reserved.</string>
|
||||||
<key>NSMainStoryboardFile</key>
|
<key>NSMainStoryboardFile</key>
|
||||||
|
|
75
QtScrcpy/uibase/keepradiowidget.cpp
Normal file
75
QtScrcpy/uibase/keepradiowidget.cpp
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
#include <QResizeEvent>
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
#include "keepradiowidget.h"
|
||||||
|
|
||||||
|
KeepRadioWidget::KeepRadioWidget(QWidget *parent) :
|
||||||
|
QWidget(parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
KeepRadioWidget::~KeepRadioWidget()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeepRadioWidget::setWidget(QWidget *w)
|
||||||
|
{
|
||||||
|
if (!w) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
w->setParent(this);
|
||||||
|
m_subWidget = w;
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeepRadioWidget::setWidthHeightRadio(float widthHeightRadio)
|
||||||
|
{
|
||||||
|
if (abs(m_widthHeightRadio - widthHeightRadio) < 0.000001f) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_widthHeightRadio = widthHeightRadio;
|
||||||
|
adjustSubWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
const QSize KeepRadioWidget::goodSize()
|
||||||
|
{
|
||||||
|
if (!m_subWidget || m_widthHeightRadio < 0.0f) {
|
||||||
|
return QSize();
|
||||||
|
}
|
||||||
|
return m_subWidget->size();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeepRadioWidget::resizeEvent(QResizeEvent *event)
|
||||||
|
{
|
||||||
|
Q_UNUSED(event)
|
||||||
|
adjustSubWidget();
|
||||||
|
}
|
||||||
|
|
||||||
|
void KeepRadioWidget::adjustSubWidget()
|
||||||
|
{
|
||||||
|
if (!m_subWidget) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
QSize curSize = size();
|
||||||
|
QPoint pos(0, 0);
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
if (m_widthHeightRadio > 1.0f) {
|
||||||
|
// base width
|
||||||
|
width = curSize.width();
|
||||||
|
height = curSize.width() / m_widthHeightRadio;
|
||||||
|
pos.setY((curSize.height() - height) / 2);
|
||||||
|
} else if (m_widthHeightRadio > 0.0f) {
|
||||||
|
// base height
|
||||||
|
height = curSize.height();
|
||||||
|
width = curSize.height() * m_widthHeightRadio;
|
||||||
|
pos.setX((curSize.width() - width) / 2);
|
||||||
|
} else {
|
||||||
|
// full widget
|
||||||
|
height = curSize.height();
|
||||||
|
width = curSize.width();
|
||||||
|
}
|
||||||
|
m_subWidget->setGeometry(pos.x(), pos.y(), width, height);
|
||||||
|
}
|
29
QtScrcpy/uibase/keepradiowidget.h
Normal file
29
QtScrcpy/uibase/keepradiowidget.h
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#ifndef KEEPRADIOWIDGET_H
|
||||||
|
#define KEEPRADIOWIDGET_H
|
||||||
|
|
||||||
|
#include <QWidget>
|
||||||
|
#include <QPointer>
|
||||||
|
|
||||||
|
class KeepRadioWidget : public QWidget
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
public:
|
||||||
|
explicit KeepRadioWidget(QWidget *parent = nullptr);
|
||||||
|
~KeepRadioWidget();
|
||||||
|
|
||||||
|
void setWidget(QWidget* w);
|
||||||
|
void setWidthHeightRadio(float widthHeightRadio);
|
||||||
|
const QSize goodSize();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void resizeEvent(QResizeEvent *event);
|
||||||
|
void adjustSubWidget();
|
||||||
|
|
||||||
|
private:
|
||||||
|
float m_widthHeightRadio = -1.0f;
|
||||||
|
QPointer<QWidget> m_subWidget;
|
||||||
|
QSize m_goodSize;
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // KEEPRADIOWIDGET_H
|
|
@ -3,7 +3,6 @@
|
||||||
#include <QStyle>
|
#include <QStyle>
|
||||||
|
|
||||||
#include "magneticwidget.h"
|
#include "magneticwidget.h"
|
||||||
#include "ui_magneticwidget.h"
|
|
||||||
|
|
||||||
MagneticWidget::MagneticWidget(QWidget* adsorbWidget, AdsorbPositions adsorbPos)
|
MagneticWidget::MagneticWidget(QWidget* adsorbWidget, AdsorbPositions adsorbPos)
|
||||||
: QWidget(Q_NULLPTR)
|
: QWidget(Q_NULLPTR)
|
||||||
|
|
|
@ -1,19 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>MagneticWidget</class>
|
|
||||||
<widget class="QWidget" name="MagneticWidget">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>400</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string/>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections/>
|
|
||||||
</ui>
|
|
|
@ -1,8 +1,9 @@
|
||||||
FORMS += \
|
FORMS +=
|
||||||
$$PWD/magneticwidget.ui
|
|
||||||
|
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
$$PWD/keepradiowidget.h \
|
||||||
$$PWD/magneticwidget.h
|
$$PWD/magneticwidget.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
|
$$PWD/keepradiowidget.cpp \
|
||||||
$$PWD/magneticwidget.cpp
|
$$PWD/magneticwidget.cpp
|
||||||
|
|
|
@ -169,6 +169,8 @@ int Config::getDesktopOpenGL()
|
||||||
|
|
||||||
int Config::getSkin()
|
int Config::getSkin()
|
||||||
{
|
{
|
||||||
|
// force disable skin
|
||||||
|
return 0;
|
||||||
int skin = 1;
|
int skin = 1;
|
||||||
m_settings->beginGroup(GROUP_COMMON);
|
m_settings->beginGroup(GROUP_COMMON);
|
||||||
skin = m_settings->value(COMMON_SKIN_KEY, COMMON_SKIN_DEF).toInt();
|
skin = m_settings->value(COMMON_SKIN_KEY, COMMON_SKIN_DEF).toInt();
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[common]
|
[common]
|
||||||
# 窗口标题
|
# 窗口标题
|
||||||
WindowTitle=QtScrcpy
|
WindowTitle=QtScrcpy
|
||||||
# 录制文件保存路径(必须以/作为分隔符)
|
# 录制文件保存路径(必须以/作为分隔符)
|
||||||
|
@ -7,8 +7,6 @@ RecordPath=
|
||||||
PushFilePath=/sdcard/
|
PushFilePath=/sdcard/
|
||||||
# 最大fps(仅支持Android 10以上)
|
# 最大fps(仅支持Android 10以上)
|
||||||
MaxFps=60
|
MaxFps=60
|
||||||
# 是否显示手机皮肤,0不显示
|
|
||||||
UseSkin=1
|
|
||||||
# 是否渲染过期视频帧(跳过过期视频帧意味着更低的延迟)
|
# 是否渲染过期视频帧(跳过过期视频帧意味着更低的延迟)
|
||||||
RenderExpiredFrames=0
|
RenderExpiredFrames=0
|
||||||
# 视频解码方式:-1 自动,0 软解,1 dx硬解,2 opengl硬解
|
# 视频解码方式:-1 自动,0 软解,1 dx硬解,2 opengl硬解
|
||||||
|
|
|
@ -8,7 +8,6 @@
|
||||||
## 中优先级
|
## 中优先级
|
||||||
- 脚本
|
- 脚本
|
||||||
- 群控
|
- 群控
|
||||||
- 竖屏全屏不拉伸画面
|
|
||||||
- 软解
|
- 软解
|
||||||
- opengles 3.0 兼容性参考[这里](https://github.com/libretro/glsl-shaders/blob/master/nnedi3/shaders/yuv-to-rgb-2x.glsl)
|
- opengles 3.0 兼容性参考[这里](https://github.com/libretro/glsl-shaders/blob/master/nnedi3/shaders/yuv-to-rgb-2x.glsl)
|
||||||
|
|
||||||
|
@ -16,8 +15,6 @@
|
||||||
- linux打包以及版本号
|
- linux打包以及版本号
|
||||||
- 关于
|
- 关于
|
||||||
- 旋转
|
- 旋转
|
||||||
- 全屏画面拉伸
|
|
||||||
- 拖拽保持窗口比例
|
|
||||||
|
|
||||||
# mark
|
# mark
|
||||||
## ffmpeg
|
## ffmpeg
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue