QortalOS Brooklyn for Raspberry Pi 4
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 lines
2.0 KiB

/*
SPDX-FileCopyrightText: 2019 Harald Sitter <[email protected]>
SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
*/
#include "doodad.h"
#include <QKeyEvent>
#include <QX11Info>
#include "application.h"
#include "shape.h"
Doodad *Doodad::factorize(XkbDoodadPtr doodad, XkbDescPtr xkb, QObject *parent)
{
switch (doodad->any.type) {
case XkbOutlineDoodad:
case XkbSolidDoodad:
return new ShapeDoodad(doodad, xkb, parent);
case XkbTextDoodad:
return new TextDoodad(doodad, xkb, parent);
case XkbIndicatorDoodad:
return new IndicatorDoodad(doodad, xkb, parent);
case XkbLogoDoodad:
return new LogoDoodad(doodad, xkb, parent);
}
Q_UNREACHABLE();
return nullptr;
}
Doodad::Doodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent)
: XkbObject(xkb_, parent)
, doodad(doodad_)
{
}
ShapeDoodad::ShapeDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent)
: Doodad(doodad_, xkb_, parent)
, shape(new Shape(xkb->geom->shapes + doodad_->shape.shape_ndx, xkb, this))
, outlineOnly(doodad->any.type == XkbOutlineDoodad)
{
}
TextDoodad::TextDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent)
: Doodad(doodad_, xkb_, parent)
{
}
IndicatorDoodad::IndicatorDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent)
: Doodad(doodad_, xkb_, parent)
, shape(new Shape(xkb->geom->shapes + doodad_->indicator.shape_ndx, xkb, this))
{
connect(Application::instance(), &Application::keyEvent, this, &IndicatorDoodad::refreshState);
refreshState();
}
void IndicatorDoodad::refreshState()
{
int onInt = False;
if (!XkbGetNamedIndicator(QX11Info::display(), doodad->indicator.name, nullptr, &onInt, nullptr, nullptr)) {
on = false;
} else {
on = onInt == True ? true : false;
}
Q_EMIT onChanged();
}
LogoDoodad::LogoDoodad(XkbDoodadPtr doodad_, XkbDescPtr xkb_, QObject *parent)
: ShapeDoodad(doodad_, xkb_, parent)
{
}