#define DISPLAY_KEYWORD "display"
#define NORMAL_IMG_KEYWORD "normalImage"
#define PRESSED_IMG_KEYWORD "pressedImage"
+#define MASK_IMG_KEYWORD "maskImage"
#define KEYLIST_KEYWORD "keyList"
#define HOVER_KEYWORD "hover"
#define FORM_KEYWORD "form"
DisplayType *XmlLayoutParser::parseDisplay(QXmlStreamReader &xml)
{
- QRect displayRegion;
+ QRect displayRect;
int angle = 0;
+ QPixmap maskImage;
+
+ qDebug("** display {");
QXmlStreamReader::TokenType token = xml.readNext();
if (token == QXmlStreamReader::StartElement) {
if (xml.name() == REGION_KEYWORD) {
/* region */
- displayRegion = parseRegion(xml);
- qDebug("- display : (%d,%d %dx%d)",
- displayRegion.x(), displayRegion.y(),
- displayRegion.width(), displayRegion.height());
+ displayRect = parseRegion(xml);
+ qDebug("- rect : (%d,%d %dx%d)",
+ displayRect.x(), displayRect.y(),
+ displayRect.width(), displayRect.height());
} else if (xml.name() == "angle") {
/* angle */
angle = xml.readElementText().toInt();
+ } else if (xml.name() == MASK_IMG_KEYWORD) {
+ /* display mask */
+ QString maskImageFileName = xml.readElementText();
+ qDebug() << "- maskImage :" << maskImageFileName;
+
+ if (maskImage.load(
+ xmlPath + QDir::separator() + maskImageFileName) == false) {
+ qWarning() << "failed to load mask image";
+ }
}
}
token = xml.readNext();
}
- return new DisplayType(displayRegion, angle);
+ qDebug("** }");
+
+ return new DisplayType(displayRect, angle, maskImage);
}
HardwareKey *XmlLayoutParser::parseKey(QXmlStreamReader &xml)
QString formName = xml.attributes().value(NAME_ATTR_KEYWORD).toString();
MainForm *form = new MainForm(formName);
- qDebug() << form->getName() << "================";
+ qDebug() << '*' << form->getName() << '{';
QXmlStreamReader::TokenType token = xml.readNext();
xmlPath + QDir::separator() + pressedImageFileName) == false) {
qWarning() << "failed to load pressed image";
}
- } else if (xml.name() == "maskImage") {
- /* mask image */
- // TODO:
} else if (xml.name() == KEYLIST_KEYWORD) {
/* HW keys */
int cnt = parseKeyList(xml, form->keyList);
token = xml.readNext();
}
- qDebug() << form->getName() << "================";
+ qDebug("}");
return form;
}
continue;
} else if (xml.name() == FORMLIST_KEYWORD) {
int cnt = parseMainFormList(xml, uiInfo->mainFormList);
- qDebug("- formList : %d", cnt);
+ qDebug("formList : %d", cnt);
} else if (xml.name() == MENULIST_KEYWORD) {
int cnt = parseMenuList(xml, uiInfo->menuList);
- qDebug("- menuList : %d", cnt);
+ qDebug("menuList : %d", cnt);
}
}
}
ControllerForm *form = new ControllerForm(
formName.isEmpty() ? xmlPath.section(QDir::separator(), -1) : formName);
- qDebug() << form->getName() << "================";
+ qDebug() << '*' << form->getName() << "{";
QXmlStreamReader::TokenType token = xml.readNext();
token = xml.readNext();
}
- qDebug() << form->getName() << "================";
+ qDebug("}");
return form;
}
uint32_t qt5_window_height = 0;
int qt5_window_angle = 0;
-DisplayBase::DisplayBase(QRect rect, int angle, qreal scaleFactor,
+DisplayBase::DisplayBase(DisplayType *displayForm, qreal scaleFactor,
QWidget *w) : widget(w)
{
- this->rect = rect;
- this->rotateAngle = angle;
+ this->rect = displayForm->getRect();
+ this->maskImage = displayForm->getMask();
+ this->rotateAngle = displayForm->getAngle();
this->scaleFactor = scaleFactor;
this->isDragging = false;
this->tsHelper = new TouchScreenHelper(this);
updateGeometry();
}
-void DisplayBase::rotate(QRect rect, int angle)
+void DisplayBase::switchForm(DisplayType *displayForm)
{
- qDebug("display rotate : %d", angle);
+ qDebug() << "display switch angle :" << displayForm->getAngle();
- this->rect = rect;
- qt5_window_angle = rotateAngle = angle;
+ rect = displayForm->getRect();
+ maskImage = displayForm->getMask();
+ qt5_window_angle = rotateAngle = displayForm->getAngle();
updateGeometry();
update();
widget->repaint();
}
-void DisplayBase::scale(qreal scaleFactor)
+void DisplayBase::scaleForm(qreal scaleFactor)
{
qDebug() << "display scale factor :" << scaleFactor;
rect.y() * scaleFactor,
rect.width() * scaleFactor,
rect.height() * scaleFactor);
+
+ if (maskImage.size() != QSize(0, 0)) {
+ qDebug("set a mask to display");
+ widget->setMask(maskImage.mask());
+ }
}
void DisplayBase::handlePaint(QPaintEvent *event)
#include <QWidget>
+#include "layout/displaytype.h"
#include "input/touchscreenhelper.h"
extern "C" {
class DisplayBase
{
public:
- void rotate(QRect rect, int angle);
- void scale(qreal scaleFactor);
+ void switchForm(DisplayType *displayForm);
+ void scaleForm(qreal scaleFactor);
void update();
void updateGeometry();
TouchScreenHelper *getTouchScreenHelper();
protected:
- DisplayBase(QRect rect, int angle, qreal scaleFactor, QWidget *w);
+ DisplayBase(DisplayType *displayForm, qreal scaleFactor, QWidget *w);
virtual ~DisplayBase();
void handlePaint(QPaintEvent *event);
void handleMouseMove(QMouseEvent *event);
QRect rect;
+ QPixmap maskImage;
int rotateAngle;
qreal scaleFactor;
bool isDragging;
#include "displayglwidget.h"
-DisplayGLWidget::DisplayGLWidget(QWidget *parent,
- QGLContext *context, QRect rect, int angle, qreal scaleFactor) :
- QGLWidget(context, parent), DisplayBase(rect, angle, scaleFactor, this)
+DisplayGLWidget::DisplayGLWidget(QWidget *parent, QGLContext *context,
+ DisplayType *displayForm, qreal scaleFactor) :
+ QGLWidget(context, parent), DisplayBase(displayForm, scaleFactor, this)
{
setAutoBufferSwap(false);
}
Q_OBJECT
public:
- DisplayGLWidget(QWidget *parent,
- QGLContext *context, QRect rect, int angle, qreal scaleFactor);
+ DisplayGLWidget(QWidget *parent, QGLContext *context,
+ DisplayType *displayForm, qreal scaleFactor);
~DisplayGLWidget();
protected:
#include "displayswwidget.h"
DisplaySWWidget::DisplaySWWidget(QWidget *parent,
- QRect rect, int angle, qreal scaleFactor) :
- QLabel(parent), DisplayBase(rect, angle, scaleFactor, this)
+ DisplayType *displayForm, qreal scaleFactor) :
+ QLabel(parent), DisplayBase(displayForm, scaleFactor, this)
{
/* do nothing */
}
public:
DisplaySWWidget(QWidget *parent,
- QRect rect, int angle, qreal scaleFactor);
+ DisplayType *displayForm, qreal scaleFactor);
~DisplaySWWidget();
protected:
#include "displaytype.h"
-DisplayType::DisplayType(QRect rect, int angle)
+DisplayType::DisplayType(QRect rect, int angle, QPixmap mask)
{
this->rect = rect;
this->angle = angle;
+ this->mask = mask;
}
void DisplayType::setRect(QRect rect)
return angle % 360;
}
+QPixmap DisplayType::getMask()
+{
+ return mask;
+}
+
DisplayType::~DisplayType()
{
/* do nothing */
class DisplayType
{
public:
- DisplayType(QRect rect, int angle);
+ DisplayType(QRect rect, int angle, QPixmap mask);
~DisplayType();
void setRect(QRect rect);
QRect getRect();
int getAngle();
+ QPixmap getMask();
private:
QRect rect;
int angle;
+ QPixmap mask;
};
#endif // DISPLAYTYPE_H
winLayout->addWidget(skinView);
/* display */
- display = createDisplay();
+ display = createDisplay(uiInfo->getMainFormDisplayType());
/* set HW Key shortcut */
keyboardShortcut = new KeyboardShortcut(this);
SLOT(showContextMenu(const QPoint&)));
}
-DisplayBase *MainWindow::createDisplay()
+DisplayBase *MainWindow::createDisplay(DisplayType *displayForm)
{
DisplayBase *displayWidget = NULL;
QGLContext *context = new QGLContext(format);
displayWidget = new DisplayGLWidget(skinView, context,
- uiInfo->getMainFormDisplayType()->getRect(),
- uiInfo->getMainFormDisplayType()->getAngle(),
- getUIState()->getScaleFactor());
+ displayForm, getUIState()->getScaleFactor());
context->setFormat(format);
context->create(wrapperContext);
swapperThread->start();
} else { /* off-screen rendering */
DisplaySWWidget *widget = new DisplaySWWidget(skinView,
- uiInfo->getMainFormDisplayType()->getRect(),
- uiInfo->getMainFormDisplayType()->getAngle(),
- getUIState()->getScaleFactor());
+ displayForm, getUIState()->getScaleFactor());
screenWidget = widget;
displayWidget = widget;
{
qDebug("window switch : %d", index);
+ /* layout switching */
getUIState()->mainFormIndex = index;
if (getDockingCon() != NULL) {
skinView->update();
if (display != NULL) {
- display->rotate(
- uiInfo->getMainFormDisplayType()->getRect(),
- uiInfo->getMainFormDisplayType()->getAngle());
+ display->switchForm(uiInfo->getMainFormDisplayType());
}
setMask(uiInfo->getUiRegion());
skinView->update();
if (display != NULL) {
- display->scale(getUIState()->getScaleFactor());
+ display->scaleForm(getUIState()->getScaleFactor());
}
setMask(uiInfo->getUiRegion());
QLabel *screenWidget;
private:
- DisplayBase *createDisplay();
+ DisplayBase *createDisplay(DisplayType *displayForm);
/* windowing */
QHBoxLayout *winLayout;