diff --git a/src/qt/qtclasses.cpp b/src/qt/qtclasses.cpp index 901fe27..dfdbede 100644 --- a/src/qt/qtclasses.cpp +++ b/src/qt/qtclasses.cpp @@ -26,22 +26,37 @@ void ExtendedCheckBox::customEvent(QEvent* ev) { } QRect MainWindow::setSizePosition(int width, int height) { - //setGeometry ignores decoration size xdddd + //setGeometry ignores decoration size, theres others for that QRect trayIconPos = this->trayIcon->geometry(); int tix1, tix2, tiy1, tiy2; trayIconPos.getCoords(&tix1, &tiy1, &tix2, &tiy2); + log_debugcpp("Tray Icon Pos: " + std::to_string(tix1) + " " + std::to_string(tix2)+" " + std::to_string(tiy1) + " " + std::to_string(tiy2)); + + screen = this->getCurrentScreen(); + log_debugcpp("Screen: " + screen->model().toStdString() + " " + screen->name().toStdString()); + this->setScreen(screen); - screen = QGuiApplication::primaryScreen(); QRect screenRes = screen->geometry(); int srx1, srx2, sry1, sry2; screenRes.getCoords(&srx1, &sry1, &srx2, &sry2); + log_debugcpp("Screen Res: " + std::to_string(srx1) + " " + std::to_string(srx2)+" " + std::to_string(sry1) + " " + std::to_string(sry2)); + QRect availableRes = screen->availableGeometry(); int arx1, arx2, ary1, ary2; availableRes.getCoords(&arx1, &ary1, &arx2, &ary2); + log_debugcpp("Available res: " + std::to_string(arx1) + " " + std::to_string(arx2)+" " + std::to_string(ary1) + " " + std::to_string(ary2)); + + if(height > (ary2 - ary1)) height = (ary2 - ary1); + log_debugcpp("Height res: " + std::to_string(height)); uint8_t pos = 0; - pos = tiy2 < (sry2 / 2) ? SpawnPos::UP : SpawnPos::DOWN; - pos = tix2 < (srx2 / 2) ? pos | SpawnPos::LEFT : pos | SpawnPos::RIGHT; + int leftDistance = std::abs(srx1 - tix1); + int rightDistance = std::abs(srx2 - tix1); + int upDistance = std::abs(sry1 - tiy1); + int downDistance = std::abs(sry2 - tiy1); + + pos = (upDistance < downDistance) ? SpawnPos::UP : SpawnPos::DOWN; + pos = (leftDistance < rightDistance) ? pos | SpawnPos::LEFT : pos | SpawnPos::RIGHT; switch (pos) { case SpawnPos::UP | SpawnPos::RIGHT: @@ -84,6 +99,21 @@ void MainWindow::calculateChildWidgetsSize() { setGeometry(setSizePosition(width, height)); } +QScreen* MainWindow::getCurrentScreen() { + //Using cursor pos as screen detector. Flawed. + QPoint cursorPos = QCursor::pos(); + log_debugcpp("Cursor pos: " + std::to_string(cursorPos.ry()) + " " + std::to_string(cursorPos.rx())); + + for (QScreen *screen : QGuiApplication::screens()) { + QRect screenRect = screen->geometry(); + if (screenRect.contains(cursorPos)) { + return screen; + } + } + + return QGuiApplication::primaryScreen(); +} + SessionWidget::SessionWidget(uint64_t idx, SessionHandler* sh, QWidget *parent) : QWidget(parent){ //todo: based on qgridlayout, name+mute should be its own widget, same with channels this->idx = idx; @@ -621,14 +651,11 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), lastRowSpacer(1, /* * Menu bar code */ - mainMenuBar = this->menuBar(); + mainMenuBar = new QToolBar(this); hw = new HeaderWidget(this); - mainMenuBar->setCornerWidget(hw,Qt::TopLeftCorner); - mainMenuBar->show(); - this->setMenuBar(mainMenuBar); - - //setCentralWidget(widget); - //widgetLayout->addWidget(pintas, 0, 0); + mainMenuBar->addWidget(hw); + mainMenuBar->setMovable(false); + this->addToolBar(Qt::BottomToolBarArea, mainMenuBar); reloadEndpointWidgets(); //scrollArea->setMinimumWidth(ews.at(0)->minimumWidth()); diff --git a/src/qt/qtclasses.h b/src/qt/qtclasses.h index d5ee9dc..b3bb7ea 100644 --- a/src/qt/qtclasses.h +++ b/src/qt/qtclasses.h @@ -23,6 +23,8 @@ #include #include #include +#include +#include //#include /* @@ -201,7 +203,8 @@ public: protected: void closeEvent(QCloseEvent *event) override; void customEvent(QEvent* ev) override; - QRect setSizePosition(int width, int height); + QRect setSizePosition(int width, int height); + QScreen* getCurrentScreen(); private slots: void trayIconActivated(QSystemTrayIcon::ActivationReason reason); @@ -229,7 +232,7 @@ private: QScrollArea *scrollArea; HeaderWidget* hw; - QMenuBar *mainMenuBar; + QToolBar *mainMenuBar; QScreen *screen; //todo: ratio //Win10 1080p 120%