void qt5_update_internal(void *data, int width, int height)
{
- QMatrix matrix = QMatrix();
- QPixmap pixmap = QPixmap();
- QLabel *screenWidget = mainwindow->getScreenWidget();
+ QImage image((uchar *)data, width, height, QImage::Format_RGB32);
- matrix.scale(mainwindow->getUIState()->getScaleFactor(),
- mainwindow->getUIState()->getScaleFactor());
- matrix.rotate(mainwindow->uiInfo->getMainFormDisplayType()->getAngle());
-
- QImage image = QImage((uchar *)data, width, height, QImage::Format_RGB32);
- pixmap.convertFromImage(image.transformed(matrix, Qt::SmoothTransformation));
- screenWidget->setPixmap(pixmap);
+ mainwindow->getScreenWidget()->setPixmap(
+ QPixmap::fromImage(image.transformed(
+ mainwindow->getDisplayMatrix(), Qt::SmoothTransformation)));
}
void qt5_switch_internal(void)
{
+ /* do nothing */
}
void qt5_refresh_internal(void)
void stopGuideImg();
bool getIsGimgReady();
bool getGimgState();
+
void switchForm(DisplayType *displayForm);
void scaleForm(qreal scaleFactor);
void update();
*/
#include "displayswwidget.h"
+#include "input/multitouchtracker.h"
DisplaySWWidget::DisplaySWWidget(QWidget *parent,
DisplayType *displayForm, qreal scaleFactor) :
QLabel(parent), DisplayBase(displayForm, scaleFactor, this)
{
- /* do nothing */
+ this->mtTracker = getTouchScreenHelper()->getMtTracker();
+
+ /* fill the screen with black surface */
+ QPixmap initImage(
+ displayForm->getRect().width() * scaleFactor,
+ displayForm->getRect().height() * scaleFactor);
+ initImage.fill(Qt::black);
+ setPixmap(initImage);
}
+/* override */
void DisplaySWWidget::paintEvent(QPaintEvent *event)
{
QLabel::paintEvent(event);
handlePaint(event);
+
+ /* draw multi-touch points */
+ QPainter painter(this);
+
+ QList<TouchPoint *> pointList = mtTracker->getTouchPointList();
+ for (int i = 0; i < pointList.count(); i++) {
+ TouchPoint *point = pointList.at(i);
+ if (point != NULL) {
+ painter.drawImage(
+ point->getHostPos().x() - mtTracker->getPointRadius(),
+ point->getHostPos().y() - mtTracker->getPointRadius(),
+ mtTracker->getPointImage());
+ }
+ }
}
+/* override */
void DisplaySWWidget::resizeEvent(QResizeEvent *event)
{
QLabel::resizeEvent(event);
handleResize(event);
+
+ repaint();
}
+/* override */
void DisplaySWWidget::mousePressEvent(QMouseEvent *event)
{
handleMousePress(event);
}
+/* override */
void DisplaySWWidget::mouseReleaseEvent(QMouseEvent *event)
{
handleMouseRelease(event);
}
+/* override */
void DisplaySWWidget::mouseMoveEvent(QMouseEvent *event)
{
handleMouseMove(event);
#ifndef DISPLAYSWWIDGET_H
#define DISPLAYSWWIDGET_H
-#include <QLabel>
+#include <QtWidgets>
#include "displaybase.h"
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
+
+private:
+ MultiTouchTracker *mtTracker;
};
#endif // DISPLAYSWWIDGET_H
qt5_graphic_hw_invalidate();
}
+
MultiTouchTracker::MultiTouchTracker(
TouchScreenHelper* parent, int maxTouchPoint):
touchPointImage(32, 32, QImage::Format_ARGB32)
touchPointImage.fill(Qt::transparent);
- QPainter p(&touchPointImage);
- p.setPen(QColor(255, 255, 255, 255));
- p.setBrush(QBrush(QColor(128, 128, 128, 128)));
- p.drawEllipse(0, 0, 31, 31);
+ QPainter painter(&touchPointImage);
+ painter.setPen(QColor(255, 255, 255, 255));
+ painter.setBrush(QBrush(QColor(128, 128, 128, 128)));
+ painter.setRenderHint(QPainter::Antialiasing, true);
+ painter.drawEllipse(0, 0, 31, 31);
qt5_mt_points = new float[2 * maxTouchPoint]();
qt5_mt_count = 0;
qt5_mt_width = qt5_mt_height = 32;
}
+int MultiTouchTracker::getPointRadius()
+{
+ return pointRadius;
+}
+
+const QImage &MultiTouchTracker::getPointImage()
+{
+ return touchPointImage;
+}
+
int MultiTouchTracker::getMaxTouchPoint()
{
return maxTouchPoint;
}
+QList<TouchPoint *> MultiTouchTracker::getTouchPointList()
+{
+ return touchPointList;
+}
+
int MultiTouchTracker::addTouchPoint(QPoint hostPos, QPoint guestPos)
{
const int touchCnt = touchPointList.count();
MultiTouchTracker(TouchScreenHelper* parent, int maxTouchPoint);
~MultiTouchTracker();
+ int getPointRadius();
+ const QImage &getPointImage();
int getMaxTouchPoint();
+ QList<TouchPoint *> getTouchPointList();
+
int addTouchPoint(QPoint hostPos, QPoint guestPos);
TouchPoint *searchTouchPoint(QPoint targetPos);
TouchPoint *searchTouchPoint(int targetID);
/* windowing */
setWindowTitle("Emulator");
- setWindowIcon(QIcon(QPixmap(":/icons/emulator_icon.ico")));
+ setWindowIcon(QIcon(":/icons/emulator_icon.ico"));
setWindowFlags(Qt::FramelessWindowHint);
setMinimumSize(0, 0);
}
/* display */
+ updateDisplayMatrix();
display = createDisplay(uiInfo->getMainFormDisplayType());
/* set HW Key shortcut */
return &(uiInfo->uiState);
}
+const QMatrix &MainWindow::getDisplayMatrix()
+{
+ return dpyMatrix;
+}
+
SkinView *MainWindow::getSkinView()
{
return skinView;
}
}
+void MainWindow::updateDisplayMatrix()
+{
+ dpyMatrix.reset();
+ dpyMatrix.scale(
+ getUIState()->getScaleFactor(), getUIState()->getScaleFactor());
+ dpyMatrix.rotate(uiInfo->getMainFormDisplayType()->getAngle());
+}
+
void MainWindow::switchForm(int index)
{
qDebug("window switch : %d", index);
/* layout switching */
getUIState()->mainFormIndex = index;
+ updateDisplayMatrix();
+
if (getDockingCon() != NULL) {
getDockingCon()->updateGeometry();
}
{
qDebug("window scale : %d", scale);
+ /* scale changing */
getUIState()->mainFormScale = scale;
+ updateDisplayMatrix();
+
if (getDockingCon() != NULL) {
getDockingCon()->updateGeometry();
}
~MainWindow();
UIState *getUIState(void);
+ const QMatrix &getDisplayMatrix();
SkinView *getSkinView();
ContextMenu *getPopupMenu();
DisplayBase *getDisplay();
KeyboardShortcut *getKeyboardShortcut();
QLabel *getScreenWidget();
+ void updateDisplayMatrix();
void switchForm(int angle);
void scaleForm(int scale);
void capture(void);
/* windowing */
QHBoxLayout *winLayout;
+ QMatrix dpyMatrix;
QGraphicsScene *skinScene;
SkinView *skinView;
DisplayBase *display;