Skip to content

Commit

Permalink
fix: the incorrect coordinate position display
Browse files Browse the repository at this point in the history
the incorrect coordinate position display

Log: the incorrect coordinate position display
Bug: https://pms.uniontech.com/bug-view-261623.html
  • Loading branch information
add-uos committed Jul 12, 2024
1 parent f027b8c commit 1fd1cc2
Showing 1 changed file with 164 additions and 0 deletions.
164 changes: 164 additions & 0 deletions src/main_window.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2406,6 +2406,170 @@ void MainWindow::updateToolBarPos()
//快捷全屏录制不需要显示工具栏
if(m_isFullScreenRecord) return;
m_toolbarLastPoint = toolbarPoint;
// handel the screen misaligned
if (m_screenInfo.size() == 2 && m_screenInfo.at(0).y != m_screenInfo.at(1).y && m_screenInfo.at(0).x != m_screenInfo.at(1).x) {

// 1. fix the error screen list
QList<ScreenInfo> tmp_screenInfo;

if (m_screenInfo.at(0).x == 0) {
tmp_screenInfo.append(m_screenInfo.at(0));
tmp_screenInfo.append(m_screenInfo.at(1));
} else {
tmp_screenInfo.append(m_screenInfo.at(1));
tmp_screenInfo.append(m_screenInfo.at(0));
}

// 2. get the cross area
double area_1 = 0, area_2 = 0;
bool is_inScreen1 = false, is_inScreen2 = false;
QRect rect_1, rect_2;
QRect screen_1(tmp_screenInfo.at(0).x, tmp_screenInfo.at(0).y, tmp_screenInfo.at(0).width, tmp_screenInfo.at(0).height);
QRect screen_2(tmp_screenInfo.at(1).x, tmp_screenInfo.at(1).y, tmp_screenInfo.at(1).width, tmp_screenInfo.at(1).height);

if (is_inScreen1 = QRect(recordX, recordY, recordWidth, recordHeight).intersects(screen_1)) {
rect_1 = QRect(recordX, recordY, recordWidth, recordHeight).intersected(QRect(tmp_screenInfo.at(0).x, tmp_screenInfo.at(0).y, tmp_screenInfo.at(0).width, tmp_screenInfo.at(0).height));
area_1 = rect_1.width() * rect_1.height();
}

if (is_inScreen2 = QRect(recordX, recordY, recordWidth, recordHeight).intersects(screen_2)) {
rect_2 = QRect(recordX, recordY, recordWidth, recordHeight).intersected(QRect(tmp_screenInfo.at(1).x, tmp_screenInfo.at(1).y, tmp_screenInfo.at(1).width, tmp_screenInfo.at(1).height));
area_2 = rect_2.width() * rect_2.height();
}

qDebug() << "record rect: " << QRect(dragRecordX, dragRecordY, dragRecordWidth, dragRecordHeight);
qDebug() << "cross rect: " << rect_1 << rect_2;
qDebug() << "screen rect: " << screen_1 << screen_2;
qDebug() << "corss : " << is_inScreen1 << is_inScreen2;
qDebug() << "tarbar size : " << m_toolBar->size();

// 3. screen-1 intersect screen-2
if (area_1 != 0 && area_2 != 0 && is_inScreen1 && is_inScreen2) {
int x = toolbarPoint.x(), y = toolbarPoint.y();

Check warning on line 2448 in src/main_window.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Redundant initialization for 'x'. The initialized value is overwritten before it is read.
int type = 0;
if (rect_1.x() < rect_2.x() && rect_1.y() < rect_2.y()) {
qDebug() << "west->south direction";
type = 1;
} else if (rect_1.x() < rect_2.x() && rect_1.y() > rect_2.y()) {
qDebug() << "west-worth direction";
type = 2;
} else {
qDebug() << "w-line";
type = 0;
}

if (area_1 > area_2) { // screen1
qDebug() << "screen 1 larger";
x = tmp_screenInfo.at(0).x + tmp_screenInfo.at(0).width - m_toolBar->width() - SIDEBAR_X_SPACING;
if (type == 1) {
if (rect_1.y() < m_toolBar->height()) {
y = rect_1.y() + rect_1.height();
} else {
y = rect_1.y() - m_toolBar->height();
}
}
if (type == 2) {
y = rect_1.y() + rect_1.height();
}
if (type == 0) {
if (rect_1.x() + rect_1.width() == tmp_screenInfo.at(0).x + tmp_screenInfo.at(0).width) {
qDebug() << "cross-1 out right x" << x << rect_1.x() << tmp_screenInfo.at(0).width;
}

if (rect_1.y() <= tmp_screenInfo.at(0).y) {
y = rect_1.y() + rect_1.height();
} else {
if (rect_1.y() - tmp_screenInfo.at(0).y > m_toolBar->height() && rect_1.y() + rect_1.height() + m_toolBar->height() > tmp_screenInfo.at(1).y + tmp_screenInfo.at(1).height) {
y = rect_1.y() - m_toolBar->height();
}
}
}
} else { // screen2
qDebug() << "screen 2 larger";
x = rect_2.x() + SIDEBAR_X_SPACING;
if (type == 1) {
y = rect_2.y() + rect_2.height();
}
if (type == 2) {
if (rect_2.y() < m_toolBar->height()) {
y = rect_2.y() + rect_2.height();
} else {
y = rect_2.y() - m_toolBar->height();
}
}
if (type == 0) {
if (rect_2.y() < m_toolBar->height()) {
y = rect_2.y() + rect_2.height();
} else {
if (rect_2.y() + rect_2.height() + m_toolBar->height() > tmp_screenInfo.at(1).y + tmp_screenInfo.at(1).height) {
y = rect_2.y() - m_toolBar->height();
}
}
}
}

toolbarPoint.setX(x);
toolbarPoint.setY(y);
}

// 4. screen-1
if (area_1 != 0 && area_2 == 0 && is_inScreen1 && !is_inScreen2 && area_1 != recordWidth * recordHeight) {
int x = toolbarPoint.x(), y = toolbarPoint.y();

Check warning on line 2517 in src/main_window.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Redundant initialization for 'y'. The initialized value is overwritten before it is read.

if (rect_1.x() == tmp_screenInfo.at(0).x || rect_1.x() < m_toolBar->width()) {
x = rect_1.x() + SIDEBAR_X_SPACING;
qDebug() << "screen-1 out left x";
}

if (rect_1.x() + rect_1.width() == tmp_screenInfo.at(0).x + tmp_screenInfo.at(0).width) {
x = tmp_screenInfo.at(0).x + tmp_screenInfo.at(0).width - m_toolBar->width() - SIDEBAR_X_SPACING;
qDebug() << "screen-1 out right x" << x << rect_1.x() << tmp_screenInfo.at(0).width;
}

if (rect_1.y() == tmp_screenInfo.at(0).y) {
y = rect_1.y() + rect_1.height();
qDebug() << "screen-1 out top y";
} else if (rect_1.y() + rect_1.height() == tmp_screenInfo.at(0).y + tmp_screenInfo.at(0).height || rect_1.y() + rect_1.height() + m_toolBar->height() >= tmp_screenInfo.at(0).y + tmp_screenInfo.at(0).height) {
y = rect_1.y() - m_toolBar->height();
qDebug() << "screen-1 out bottom y";
} else {
y = recordY + recordHeight;
qDebug() << "screen-1 normal y";
}

toolbarPoint.setX(x);
toolbarPoint.setY(y);
}

// 5. screen-2
if (area_1 == 0 && area_2 != 0 && !is_inScreen1 && is_inScreen2 && area_2 != recordWidth * recordHeight) {
int x = toolbarPoint.x(), y = toolbarPoint.y();

Check warning on line 2546 in src/main_window.cpp

View workflow job for this annotation

GitHub Actions / cppcheck

Redundant initialization for 'y'. The initialized value is overwritten before it is read.
if (rect_2.x() == tmp_screenInfo.at(1).x || mapToGlobal(m_toolBar->pos()).x() < tmp_screenInfo.at(1).x) {
x = rect_2.x() + SIDEBAR_X_SPACING;
qDebug() << "screen-2 out left x";
}

if (rect_2.x() + rect_2.width() == tmp_screenInfo.at(1).x + tmp_screenInfo.at(1).width) {
x = tmp_screenInfo.at(1).x + tmp_screenInfo.at(1).width - m_toolBar->width() - SIDEBAR_X_SPACING;
qDebug() << "screen-2 out right x" << x << rect_2.x() << tmp_screenInfo.at(1).width;
}

if (rect_2.y() == tmp_screenInfo.at(1).y) {
y = rect_2.y() + rect_2.height();
qDebug() << "screen-2 out top y";
} else if (rect_2.y() + rect_2.height() == tmp_screenInfo.at(1).y + tmp_screenInfo.at(1).height || rect_2.y() + rect_2.height() + m_toolBar->height() >= tmp_screenInfo.at(1).y + tmp_screenInfo.at(1).height) {
y = rect_2.y() - m_toolBar->height();
qDebug() << "screen-2 out bottom y";
} else {
y = recordY + recordHeight;
qDebug() << "screen-2 normal y";
}

toolbarPoint.setX(x);
toolbarPoint.setY(y);
}
}

m_toolBar->showAt(toolbarPoint);
//qDebug() << "==================2=================";
}
Expand Down

0 comments on commit 1fd1cc2

Please sign in to comment.