dark/light mode & accent color
This commit is contained in:
parent
13855c2e6f
commit
60890cecad
9 changed files with 178 additions and 44 deletions
|
|
@ -7,19 +7,27 @@ bool DarkModeEventFilter::nativeEventFilter(const QByteArray &eventType, void *m
|
|||
if (eventType == "windows_generic_MSG") {
|
||||
ProcessedNativeEvent event = osh->processTopLevelWindowMessage(message);
|
||||
switch(event) {
|
||||
case LIGHT_MODE:
|
||||
case COLORS:
|
||||
StylingHelper::setBackgroundColor(osh->isLightMode());
|
||||
|
||||
//Update accent color across entire app
|
||||
{
|
||||
uint32_t color = osh->getAccentColor();
|
||||
uint8_t r, g, b, a;
|
||||
if (StylingHelper::argbToDiscreteValues(osh->getAccentColor(), &r, &g, &b, &a)) {
|
||||
const QWidgetList topLevelWidgets = QApplication::topLevelWidgets();
|
||||
for (QWidget *widget : topLevelWidgets) {
|
||||
if(qobject_cast<MainWindow*>(widget)) {
|
||||
((MainWindow*)widget)->updateColor(r, g, b, a);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
/*
|
||||
* if ([event type] == NSKeyDown) {
|
||||
* // Handle key event
|
||||
* qDebug() << QString::fromNSString([event characters]);
|
||||
* }
|
||||
*/
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
@ -124,8 +132,8 @@ void MeterSlider::paintEvent(QPaintEvent *event) {
|
|||
sliderComplex2.subControls |= QStyle::SC_SliderTickmarks;
|
||||
|
||||
QPainter painter(this);
|
||||
QStyle* stle = QApplication::style();
|
||||
stle->drawComplexControl((QStyle::ComplexControl)CC_MeterSlider, &sliderComplex2, &painter, this);
|
||||
QStyle* style = QApplication::style();
|
||||
style->drawComplexControl((QStyle::ComplexControl)CC_MeterSlider, &sliderComplex2, &painter, this);
|
||||
|
||||
|
||||
//Q_D(QSlider);
|
||||
|
|
@ -252,6 +260,13 @@ QRect MainWindow::setSizePosition(QScreen* screen, int width, int height) {
|
|||
}
|
||||
}
|
||||
|
||||
void MainWindow::updateColor(uint8_t r, uint8_t g, uint8_t b, uint8_t a) {
|
||||
QColor color(r, g, b, a);
|
||||
QPalette pal = QPalette(color);
|
||||
pal.setColor(QPalette::Highlight, color);
|
||||
scrollArea->verticalScrollBar()->setPalette(pal);
|
||||
}
|
||||
|
||||
void MainWindow::compose() {
|
||||
//todo: invalidate layout when adding sessions with window open
|
||||
//We need dynamically added child widgets to expand so that we know their height
|
||||
|
|
@ -1022,6 +1037,10 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
|||
scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
|
||||
scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
scrollArea->setContentsMargins(QMargins(0, 0, 0, 0));
|
||||
|
||||
//ScrollBarFocusFilter focusFilter = new ScrollBarFocusFilter(this);
|
||||
scrollArea->verticalScrollBar()->installEventFilter(this);
|
||||
scrollArea->horizontalScrollBar()->installEventFilter(this);
|
||||
//scrollArea->verticalScrollBar()->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Preferred);
|
||||
//scrollArea->verticalScrollBar()->setSingleStep(1);
|
||||
|
||||
|
|
@ -1070,6 +1089,13 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
|||
this->recentlyClosedTimer->start();
|
||||
}
|
||||
});
|
||||
|
||||
/*
|
||||
* Set accent color
|
||||
*/
|
||||
uint8_t a, r, g, b;
|
||||
if (StylingHelper::argbToDiscreteValues(osh->getAccentColor(), &r, &g, &b, &a))
|
||||
this->updateColor(r, g, b, a);
|
||||
|
||||
/*
|
||||
* Set of function callback definitons for EndpointSituationCallback
|
||||
|
|
@ -1090,6 +1116,50 @@ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
|
|||
|
||||
}
|
||||
|
||||
bool MainWindow::eventFilter(QObject *object, QEvent *event) {
|
||||
//QScrollBar* widgetCast = qobject_cast<QScrollBar*>(object);
|
||||
if (object == scrollArea->verticalScrollBar()) {
|
||||
[[maybe_unused]] QEvent::Type tipo = event->type();
|
||||
if (event->type() == QHoverEvent::HoverEnter) {
|
||||
log_debugcpp("Hover event: ");
|
||||
log_debugcpp("\tGlobal pos: "
|
||||
+ std::to_string(((QHoverEvent*)event)->globalPosition().x())
|
||||
+ ", "
|
||||
+ std::to_string(((QHoverEvent*)event)->globalPosition().y()));
|
||||
log_debugcpp("\tNewWid pos: "
|
||||
+ std::to_string(((QHoverEvent*)event)->position().x())
|
||||
+ ", "
|
||||
+ std::to_string(((QHoverEvent*)event)->position().y()));
|
||||
log_debugcpp("\tOldWid pos: "
|
||||
+ std::to_string(((QHoverEvent*)event)->oldPos().x())
|
||||
+ ", "
|
||||
+ std::to_string(((QHoverEvent*)event)->oldPos().y()));
|
||||
|
||||
}
|
||||
if (event->type() == QScrollEvent::ScrollFinished) {
|
||||
QHoverEvent* hoverEvent = new QHoverEvent(QEvent::HoverEnter,
|
||||
scrollArea->verticalScrollBar()->mapFromGlobal(QCursor::pos()),
|
||||
QCursor::pos(),
|
||||
scrollArea->verticalScrollBar()->mapFromGlobal(QCursor::pos()));
|
||||
log_debugcpp("ScrollFinished event: ");
|
||||
log_debugcpp("\tGlobal pos: "
|
||||
+ std::to_string(QCursor::pos().x())
|
||||
+ ", "
|
||||
+ std::to_string(QCursor::pos().y()));
|
||||
log_debugcpp("\tWidget pos: "
|
||||
+ std::to_string(scrollArea->verticalScrollBar()->mapFromGlobal(QCursor::pos()).x())
|
||||
+ ", "
|
||||
+ std::to_string(scrollArea->verticalScrollBar()->mapFromGlobal(QCursor::pos()).y()));
|
||||
QCoreApplication::instance()->postEvent(scrollArea->verticalScrollBar(), hoverEvent);
|
||||
/*
|
||||
* QCoreApplication::instance()->postEvent(this, new CustomWidgetEvent<SessionHandler*>((QEvent::Type)CustomQEvent::SessionWidgetObsolete, sessionHandler));
|
||||
*/
|
||||
//scrollArea->setFocus(Qt::MouseFocusReason);
|
||||
return false;
|
||||
}}
|
||||
return false;
|
||||
}
|
||||
|
||||
void MainWindow::flushRoleChanges() {
|
||||
//TODO: bucket list deque
|
||||
std::pair<Roles, std::wstring> change = roleBucketList.front();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue