hwkey: HW key re-masking on skin
authorGiWoong Kim <giwoong.kim@samsung.com>
Tue, 25 Aug 2015 09:47:05 +0000 (18:47 +0900)
committerSeokYeon Hwang <syeon.hwang@samsung.com>
Tue, 1 Sep 2015 05:14:15 +0000 (14:14 +0900)
do re-masking when side key(volume or power HW key on mobile) is pressed

Change-Id: Ic2f36366a15ad4d3ef1c2c84c73c55b858091377
Signed-off-by: GiWoong Kim <giwoong.kim@samsung.com>
14 files changed:
tizen/src/ui/controller/dockingconview.cpp
tizen/src/ui/controller/dockingconview.h
tizen/src/ui/controller/floatingconview.cpp
tizen/src/ui/controller/floatingconview.h
tizen/src/ui/layout/hardwarekey.cpp
tizen/src/ui/layout/hardwarekey.h
tizen/src/ui/mainview.cpp
tizen/src/ui/mainview.h
tizen/src/ui/skinkeyitem.cpp
tizen/src/ui/skinkeyitem.h
tizen/src/ui/skinview.cpp
tizen/src/ui/skinview.h
tizen/src/ui/uiinformation.cpp
tizen/src/ui/uiinformation.h

index 3e430a2a2b8d90f7a3f83d885fa68743bfef217a..a94a602ea804b0fac0884a9a3e2c84aabab8c607 100644 (file)
@@ -49,7 +49,7 @@ DockingConView::DockingConView(QWidget *parent,
 void DockingConView::createItems(ControllerForm *conForm)
 {
     /* bezel */
-    bezelItem = createBezelItem(conForm);
+    bezelItem = createBezelItem(NULL, conForm);
     scene()->addItem(bezelItem);
 
     /* HW keys */
@@ -60,9 +60,7 @@ void DockingConView::createItems(ControllerForm *conForm)
         for (int i = 0; i < keyList.count(); i++) {
             hwKey = keyList.at(i);
             if (hwKey != NULL) {
-                new SkinKeyItem(bezelItem, hwKey,
-                    conForm->skinImg[LayoutForm::pressed].copy(hwKey->getRegion()),
-                    conForm->getHoverType());
+                createKeyItem(bezelItem, conForm, hwKey);
             }
         }
     } else {
@@ -75,6 +73,15 @@ void DockingConView::createItems(ControllerForm *conForm)
     }
 }
 
+/* override */
+QRegion DockingConView::getKeyWinRegion(
+    QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
+{
+    return ((MainWindow *)parent->parentWidget())->
+        uiInfo->getConKeyRegion(base, keyRect, type);
+}
+
+/* override */
 void DockingConView::resizeEvent(QResizeEvent *event)
 {
     /* do nothing */
@@ -82,6 +89,7 @@ void DockingConView::resizeEvent(QResizeEvent *event)
     SkinView::resizeEvent(event);
 }
 
+/* override */
 void DockingConView::mousePressEvent(QMouseEvent *event)
 {
     SkinView::mousePressEvent(event);
@@ -108,6 +116,7 @@ void DockingConView::mousePressEvent(QMouseEvent *event)
     setConViewStatus(CONVIEW_PRESSED);
 }
 
+/* override */
 void DockingConView::mouseDoubleClickEvent(QMouseEvent *event)
 {
     SkinView::mouseDoubleClickEvent(event);
@@ -125,6 +134,7 @@ void DockingConView::mouseDoubleClickEvent(QMouseEvent *event)
     setConViewStatus(CONVIEW_DOUBLECLICKED);
 }
 
+/* override */
 void DockingConView::mouseReleaseEvent(QMouseEvent *event)
 {
     SkinView::mouseReleaseEvent(event);
@@ -152,6 +162,7 @@ void DockingConView::mouseReleaseEvent(QMouseEvent *event)
     setConViewStatus(CONVIEW_RELEASED);
 }
 
+/* override */
 void DockingConView::mouseMoveEvent(QMouseEvent *event)
 {
     SkinView::mouseMoveEvent(event);
index ecec99fe48d1c8417ea0fc717db05bdc76a540be..3854972378697b831dd1f2b7fe437d13a683799a 100644 (file)
@@ -57,6 +57,9 @@ public:
     int getConViewStatus();
 
 protected:
+    QRegion getKeyWinRegion(
+        QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type);
+
     void resizeEvent(QResizeEvent *event);
     void mousePressEvent(QMouseEvent *event);
     void mouseDoubleClickEvent(QMouseEvent *event);
index 293920e007bb18f1d8adf2aa17423e0e72aa14e7..f2809860bc8471a7bad3b4c9bd138fccb3797630 100644 (file)
@@ -50,7 +50,7 @@ FloatingConView::FloatingConView(QWidget *parent,
 void FloatingConView::createItems(ControllerForm *conForm)
 {
     /* bezel */
-    bezelItem = createBezelItem(conForm);
+    bezelItem = createBezelItem(NULL, conForm);
     scene()->addItem(bezelItem);
 
     /* HW keys */
@@ -61,9 +61,7 @@ void FloatingConView::createItems(ControllerForm *conForm)
         for (int i = 0; i < keyList.count(); i++) {
             hwKey = keyList.at(i);
             if (hwKey != NULL) {
-                new SkinKeyItem(bezelItem, hwKey,
-                    conForm->skinImg[LayoutForm::pressed].copy(hwKey->getRegion()),
-                    conForm->getHoverType());
+                createKeyItem(bezelItem, conForm, hwKey);
             }
         }
     } else {
@@ -76,6 +74,15 @@ void FloatingConView::createItems(ControllerForm *conForm)
     }
 }
 
+/* override */
+QRegion FloatingConView::getKeyWinRegion(
+    QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
+{
+    return ((MainWindow *)parent->parentWidget())->
+        uiInfo->getConKeyRegion(base, keyRect, type);
+}
+
+/* override */
 void FloatingConView::resizeEvent(QResizeEvent *event)
 {
     /* do nothing */
@@ -140,6 +147,7 @@ int FloatingConView::isDockable(QWidget *object, QWidget *subject)
     return -1;
 }
 
+/* override */
 void FloatingConView::mousePressEvent(QMouseEvent *event)
 {
     SkinView::mousePressEvent(event);
@@ -155,6 +163,7 @@ void FloatingConView::mousePressEvent(QMouseEvent *event)
     }
 }
 
+/* override */
 void FloatingConView::mouseReleaseEvent(QMouseEvent *event)
 {
     SkinView::mouseReleaseEvent(event);
@@ -182,6 +191,7 @@ void FloatingConView::mouseReleaseEvent(QMouseEvent *event)
     }
 }
 
+/* override */
 void FloatingConView::mouseMoveEvent(QMouseEvent *event)
 {
     SkinView::mouseMoveEvent(event);
index 71b05c1894f859ed6aca1dd47f0dedf5e8c1d2ee..c31938b7355fac14c021a46f2a1cd4ed1edf8bf5 100644 (file)
@@ -45,6 +45,9 @@ public:
     ~FloatingConView();
 
 protected:
+    QRegion getKeyWinRegion(
+        QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type);
+
     void resizeEvent(QResizeEvent *event);
     void mousePressEvent(QMouseEvent *event);
     void mouseReleaseEvent(QMouseEvent *event);
index b09e86f59ef0cf6f496a2d55327016ea2c58eb68..db1d584934d6eba7e3a4033ff2d7408ee9b57a1a 100644 (file)
@@ -63,7 +63,7 @@ bool HardwareKey::hasLongPressKeycode()
     return (keycodeType->getLongPressKeycode() > 0);
 }
 
-QRect HardwareKey::getRegion()
+QRect &HardwareKey::getRect()
 {
     return region;
 }
index 9d0531b01efec86b5874213ba305bf255f64ec6c..af25b9f59acb40fad865fb825cff4f8f4ccc4cbe 100644 (file)
@@ -45,7 +45,7 @@ public:
     KeycodeType *getKeycodeType();
     int getKeycode();
     bool hasLongPressKeycode();
-    QRect getRegion();
+    QRect &getRect();
     QString getTooltip();
     QKeySequence getKeySequence();
 
index fec57b6ff0cd12a3dbb31283ccc35ab2da0450f0..1c626242b133f886f7beee75cf8b0d6a8cb305a3 100644 (file)
@@ -38,8 +38,8 @@ MainView::MainView(QGraphicsScene *scene, QWidget *parent) :
     SkinView(parent, scene)
 {
     this->win = ((MainWindow *)parent);
-    this->kbdHelper = new KeyboardHelper(this);
     this->grabWinPos = QPoint(-1, -1);
+    this->kbdHelper = new KeyboardHelper(this);
 
     updateLayout();
 }
@@ -47,7 +47,7 @@ MainView::MainView(QGraphicsScene *scene, QWidget *parent) :
 void MainView::createItems(MainForm *form)
 {
     /* bezel */
-    SkinBezelItem *bezelItem = createBezelItem(form);
+    bezelItem = createBezelItem(NULL, form);
     scene()->addItem(bezelItem);
 
     /* HW keys */
@@ -57,13 +57,18 @@ void MainView::createItems(MainForm *form)
     for (int i = 0; i < keyList.count(); i++) {
         hwKey = keyList.at(i);
         if (hwKey != NULL) {
-            new SkinKeyItem(bezelItem, hwKey,
-                form->skinImg[LayoutForm::pressed].copy(hwKey->getRegion()),
-                form->getHoverType());
+            createKeyItem(bezelItem, form, hwKey);
         }
     }
 }
 
+/* override */
+QRegion MainView::getKeyWinRegion(
+    QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
+{
+    return win->uiInfo->getMainKeyRegion(base, keyRect, type);
+}
+
 KeyboardHelper *MainView::getKbdHelper()
 {
     return kbdHelper;
@@ -114,31 +119,46 @@ void MainView::resizeEvent(QResizeEvent *event)
 /* override */
 void MainView::mousePressEvent(QMouseEvent *event)
 {
+    SkinView::mousePressEvent(event);
+
+    if (bezelItem->isHWKeyHandling() == true) {
+        /* do nothing */
+        return;
+    }
+
     if (event->button() == Qt::LeftButton) {
         grabWindow(event->globalPos());
     }
-
-    SkinView::mousePressEvent(event);
 }
 
 /* override */
 void MainView::mouseReleaseEvent(QMouseEvent *event)
 {
+    SkinView::mouseReleaseEvent(event);
+
+    if (bezelItem->isHWKeyHandling() == true) {
+        /* do nothing */
+        return;
+    }
+
     if (event->button() == Qt::LeftButton) {
         releaseWindow();
     }
-
-    SkinView::mouseReleaseEvent(event);
 }
 
 /* override */
 void MainView::mouseMoveEvent(QMouseEvent *event)
 {
+    SkinView::mouseMoveEvent(event);
+
+    if (bezelItem->isHWKeyHandling() == true) {
+        /* do nothing */
+        return;
+    }
+
     if (isGrabWindow() == true) {
         win->move(grabWinPos + (event->globalPos() - grabPos));
     }
-
-    SkinView::mouseMoveEvent(event);
 }
 
 /* override */
index f5244b5f1c73f9928466c8d2e3cea17e0f65f547..a829952befe0ec1ed461c44933ea46d140394ef5 100644 (file)
@@ -52,8 +52,9 @@ public:
     void updateLayout();
 
 protected:
-    void resizeEvent(QResizeEvent *event);
+    QRegion getKeyWinRegion(QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type);
 
+    void resizeEvent(QResizeEvent *event);
     void mousePressEvent(QMouseEvent *event);
     void mouseReleaseEvent(QMouseEvent *event);
     void mouseMoveEvent(QMouseEvent *event);
@@ -62,6 +63,7 @@ protected:
     void focusOutEvent(QFocusEvent *event);
 
     MainWindow *win;
+    SkinBezelItem *bezelItem;
     QPoint grabWinPos;
     KeyboardHelper *kbdHelper;
 
index 241c27ca916332c11f776d6aa9439a4c98f6be20..5cc4d44f11f92494f1fb0f9fe54607b7c81e26c5 100644 (file)
 #include <QDebug>
 
 #include "skinkeyitem.h"
+#include "skinview.h"
 
 extern "C" {
 #include "emul_state.h"
 #include "util/ui_operations.h"
 }
 
-SkinKeyItem::SkinKeyItem(SkinBezelItem *parent,
-    HardwareKey *hwKey, QImage pressedImg, HoverType *hover) :
-    QGraphicsRectItem(hwKey->getRegion(), (QGraphicsItem *)parent)
+SkinKeyItem::SkinKeyItem(QGraphicsItem *parent, HardwareKey *hwKey,
+    QImage pressedImg, bool reMasking, HoverType *hover) :
+    QGraphicsRectItem(hwKey->getRect(), parent)
 {
-    this->bezelParent = parent;
-    this->pressedImg = pressedImg;
+    this->viewer = (SkinView *)scene()->views().at(0);
+    this->bezelParent = (SkinBezelItem *)parent;
     this->hwKey = hwKey;
+    this->pressedImg = pressedImg;
+    this->reMasking = reMasking;
     this->isPressed = false;
 
     if (hover != NULL) {
@@ -69,6 +72,18 @@ void SkinKeyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
 {
     bezelParent->setHWKeyHandling(isPressed = true);
 
+    hoverPen.setColor(Qt::transparent);
+    update();
+
+    if (reMasking == true && viewer != NULL) {
+        /* re-masking for HW key region */
+        qDebug() << "HW key re-masking:" << hwKey->getName();
+
+        QWidget *target = viewer->topLevelWidget();
+        target->setMask(viewer->getKeyWinRegion(
+            target, hwKey->getRect(), LayoutForm::pressed));
+    }
+
     if (hwKey->hasLongPressKeycode() == true) {
         /* long press checking first */
         longPressTimer->start();
@@ -76,12 +91,8 @@ void SkinKeyItem::mousePressEvent(QGraphicsSceneMouseEvent *event)
     }
 
     const int keycode = hwKey->getKeycode();
-
     qDebug() << hwKey->getName() << "key pressed:" << keycode;
     do_hw_key_event(KEY_PRESSED, keycode);
-
-    hoverPen.setColor(Qt::transparent);
-    update();
 }
 
 /* override */
@@ -89,6 +100,15 @@ void SkinKeyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 {
     bezelParent->setHWKeyHandling(isPressed = false);
 
+    update();
+
+    if (reMasking == true && viewer != NULL) {
+        /* reset re-masking */
+        QWidget *target = viewer->topLevelWidget();
+        target->setMask(viewer->getKeyWinRegion(
+            target, hwKey->getRect(), LayoutForm::normal));
+    }
+
     int keycode = hwKey->getKeycode();
 
     if (hwKey->hasLongPressKeycode() == true) {
@@ -108,8 +128,6 @@ void SkinKeyItem::mouseReleaseEvent(QGraphicsSceneMouseEvent *event)
 
     qDebug() << hwKey->getName() << "key released:" << keycode;
     do_hw_key_event(KEY_RELEASED, keycode);
-
-    update();
 }
 
 /* override */
@@ -139,7 +157,8 @@ void SkinKeyItem::paint(QPainter *painter,
 
     if (hoverPen.color() != Qt::transparent) {
         painter->setPen(hoverPen);
-        painter->drawRect(rect());
+        painter->drawRect(rect().x(), rect().y(),
+            rect().width() - 1, rect().height() - 1);
     }
 
     if (isPressed == true) {
index c5fec9500274c3ce6f3ff67714b2247c2ad6821e..0032f8f4346bb9cab9c57f985bcc98b7317f59ce 100644 (file)
 #include "layout/hardwarekey.h"
 #include "layout/hovertype.h"
 
+class SkinView;
+
 class SkinKeyItem : public QObject, public QGraphicsRectItem
 {
     Q_OBJECT
 
 public:
-    SkinKeyItem(SkinBezelItem *parent,
-        HardwareKey *hwKey, QImage pressedImg, HoverType *hover);
+    SkinKeyItem(QGraphicsItem *parent, HardwareKey *hwKey,
+        QImage pressedImg, bool reMasking, HoverType *hover);
     ~SkinKeyItem();
 
-    HardwareKey *hwKey;
-    QImage pressedImg;
-    QTimer *longPressTimer;
-
 protected:
     void mousePressEvent(QGraphicsSceneMouseEvent *event);
     void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
@@ -64,11 +62,17 @@ protected slots:
     void longPressHook();
 
 private:
+    SkinView *viewer;
     SkinBezelItem *bezelParent;
+    HardwareKey *hwKey;
+
+    QImage pressedImg;
+    bool reMasking;
     bool isPressed;
     QColor hoverColor;
     QPen hoverPen;
     QBrush brush;
+    QTimer *longPressTimer;
 };
 
 #endif // SKINKEYITEM_H
index a0ecc2f8c7b2edf50c53aad4d1e69102ec7a6dcd..90301630319c9bdbfa826cc508988831b9d268e0 100644 (file)
@@ -27,6 +27,8 @@
  *
  */
 
+#include <QtWidgets>
+
 #include "skinview.h"
 
 SkinView::SkinView(QWidget *parent, QGraphicsScene *scene) :
@@ -40,12 +42,29 @@ SkinView::SkinView(QWidget *parent, QGraphicsScene *scene) :
     setAlignment(Qt::AlignLeft | Qt::AlignTop);
 }
 
-SkinBezelItem *SkinView::createBezelItem(LayoutForm *form)
+SkinBezelItem *SkinView::createBezelItem(QGraphicsItem *parent, LayoutForm *form)
 {
-    return new SkinBezelItem(NULL,
+    return new SkinBezelItem(parent,
         QPixmap::fromImage(form->skinImg[LayoutForm::normal]));
 }
 
+SkinKeyItem *SkinView::createKeyItem(QGraphicsItem *parent,
+    LayoutForm *form, HardwareKey *hwKey)
+{
+    bool reMasking = false;
+
+    QImage normalKeyImg = form->skinImg[LayoutForm::normal].copy(hwKey->getRect());
+    QImage pressedKeyImg = form->skinImg[LayoutForm::pressed].copy(hwKey->getRect());
+    QImage normalMask = normalKeyImg.createAlphaMask();
+    QImage pressedMask = pressedKeyImg.createAlphaMask();
+    if (normalMask != pressedMask) {
+        reMasking = true;
+    }
+
+    return new SkinKeyItem(parent, hwKey,
+        pressedKeyImg, reMasking, form->getHoverType());
+}
+
 SkinView::~SkinView()
 {
     /* do nothing */
index 4874de34961ac492e79fa37120c0737c449e511b..a45b35dd4b1058001a0f7161fcb16bd3cc4c635d 100644 (file)
@@ -33,6 +33,7 @@
 #include <QGraphicsView>
 
 #include "skinbezelitem.h"
+#include "skinkeyitem.h"
 #include "layout/layoutform.h"
 
 class SkinView : public QGraphicsView
@@ -41,8 +42,13 @@ public:
     SkinView(QWidget *parent, QGraphicsScene *scene);
     ~SkinView();
 
+    virtual QRegion getKeyWinRegion(
+        QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type) = 0;
+
 protected:
-    SkinBezelItem *createBezelItem(LayoutForm *form);
+    SkinBezelItem *createBezelItem(QGraphicsItem *parent, LayoutForm *form);
+    SkinKeyItem *createKeyItem(QGraphicsItem *parent,
+        LayoutForm *form, HardwareKey *hwKey);
 
     QPoint grabPos;
 };
index f0774ab2edb32e8b29d116b62c6df51b0e541a76..c864d17b15378618f8cc6aac2490fb8b7abee696 100644 (file)
@@ -76,7 +76,12 @@ MainForm *UIInformation::getMainForm()
         index = uiState.mainFormIndex = 0;
     }
 
-    return mainFormList.at(index);
+    MainForm *mainForm = mainFormList.at(index);
+    if (mainForm == NULL) {
+        qFatal(MSG_INVALID_MAIN_FORM);
+    }
+
+    return mainForm;
 }
 
 DisplayType *UIInformation::getMainFormDisplayType()
@@ -100,12 +105,8 @@ ControllerForm *UIInformation::getConForm()
 /* size */
 QSize UIInformation::getMainSize()
 {
-    MainForm *mainForm = getMainForm();
-    if (mainForm == NULL) {
-        qFatal(MSG_INVALID_MAIN_FORM);
-    }
-
-    return mainForm->skinImg[LayoutForm::normal].size() * uiState.getScaleFactor();
+    return getMainForm()->
+        skinImg[LayoutForm::normal].size() * uiState.getScaleFactor();
 }
 
 QSize UIInformation::getConSize()
@@ -136,13 +137,7 @@ QSize UIInformation::getUiSize()
 /* region */
 QRegion UIInformation::getMainRegion()
 {
-    MainForm *mainForm = getMainForm();
-    if (mainForm == NULL) {
-        qWarning("main form is null");
-        return QRegion(0, 0, 0, 0);
-    }
-
-    QImage *mainImage = &(mainForm->skinImg[LayoutForm::normal]);
+    QImage *mainImage = &(getMainForm()->skinImg[LayoutForm::normal]);
     QImage regionImage = mainImage->scaled(
         mainImage->width() * uiState.getScaleFactor(),
         mainImage->height() * uiState.getScaleFactor()).createAlphaMask();
@@ -188,6 +183,58 @@ QRegion UIInformation::getUiRegion()
     return uiRegion;
 }
 
+QRegion UIInformation::getMainKeyRegion(
+    QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
+{
+    QRegion baseRegion = base->mask().subtracted(QRect(
+        keyRect.topLeft() * uiState.getScaleFactor(),
+        keyRect.size() * uiState.getScaleFactor()));
+
+    QImage keyImage = getMainForm()->skinImg[type].copy(keyRect);
+    QImage regionImage = keyImage.scaled(
+        keyImage.width() * uiState.getScaleFactor(),
+        keyImage.height() * uiState.getScaleFactor()).createAlphaMask();
+
+    QRegion keyRegion(QBitmap::fromImage(regionImage));
+    keyRegion.translate(keyRect.topLeft() * uiState.getScaleFactor());
+
+    return baseRegion.united(keyRegion);
+}
+
+QRegion UIInformation::getConKeyRegion(
+    QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type)
+{
+    if (getConForm() == NULL) {
+        qWarning("controller form is null");
+        return QRegion();
+    }
+
+    QRegion baseRegion;
+    QRegion keyRegion;
+
+    if (uiState.conState.dockingCon != NULL) {
+        /* docking controller */
+        const int shiftW = getMainSize().width();
+
+        baseRegion = getUiRegion().subtracted(QRect(
+            keyRect.x() + shiftW, keyRect.y(),
+            keyRect.width(), keyRect.height()));
+
+        QImage keyImage = getConForm()->skinImg[type].copy(keyRect);
+        keyRegion = QRegion(QBitmap::fromImage(keyImage.createAlphaMask()));
+        keyRegion.translate(keyRect.left() + shiftW, keyRect.top());
+    } else {
+        baseRegion = base->mask().subtracted(QRect(
+            keyRect.x(), keyRect.y(), keyRect.width(), keyRect.height()));
+
+        QImage keyImage = getConForm()->skinImg[type].copy(keyRect);
+        keyRegion = QRegion(QBitmap::fromImage(keyImage.createAlphaMask()));
+        keyRegion.translate(keyRect.left(), keyRect.top());
+    }
+
+    return baseRegion.united(keyRegion);
+}
+
 UIInformation::~UIInformation()
 {
     qDebug("destroy UI info");
index 1e8c02d12bf3c3dbee9c8f8bf3db33fc406482b3..97b24d0ceb2d6a417a6da86bc153c74f7d9a21c4 100644 (file)
@@ -63,10 +63,13 @@ public:
     ControllerForm *getConForm();
     QSize getMainSize();
     QSize getConSize();
-    QSize getUiSize(); /* size included main, docking con */
+    QSize getUiSize(); /* main + docking con */
+
     QRegion getMainRegion();
     QRegion getConRegion();
-    QRegion getUiRegion(); /* size included main, docking con */
+    QRegion getUiRegion(); /* main + docking con */
+    QRegion getMainKeyRegion(QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type);
+    QRegion getConKeyRegion(QWidget *base, QRect &keyRect, LayoutForm::SkinImgType type);
 };
 
 #endif // UIINFORMATION_H