bezelItem = createBezelItem(NULL, conForm);
scene()->addItem(bezelItem);
- /* HW keys */
- QList<HardwareKey *> &keyList = conForm->getKeyList();
-
if (conForm->isGeneralPurpose() == false) {
+ /* HW keys */
+ QList<HardwareKey *> &keyList = conForm->getKeyList();
HardwareKey *hwKey = NULL;
for (int i = 0; i < keyList.count(); i++) {
hwKey = keyList.at(i);
}
}
} else {
- GeneralPurposeCon *generalCon = new GeneralPurposeCon(parentWidget(), keyList,
- QSize(conForm->getCenteralRect().width(),
- conForm->getCenteralRect().height() - GPC_HEAD_SPACING));
-
- QPoint topLeft = conForm->getCenteralRect().topLeft();
- generalCon->move(topLeft.x(), topLeft.y() + GPC_HEAD_SPACING);
+ GeneralPurposeCon *generalCon = new GeneralPurposeCon();
+ QList<HWKeyButton *> buttons
+ = generalCon->createButtons(parentWidget(), conForm);
}
}
bezelItem = createBezelItem(NULL, conForm);
scene()->addItem(bezelItem);
- /* HW keys */
- QList<HardwareKey *> &keyList = conForm->getKeyList();
-
if (conForm->isGeneralPurpose() == false) {
+ /* HW keys */
+ QList<HardwareKey *> &keyList = conForm->getKeyList();
HardwareKey *hwKey = NULL;
for (int i = 0; i < keyList.count(); i++) {
hwKey = keyList.at(i);
}
}
} else {
- QSize conSize(conForm->getCenteralRect().width(),
- conForm->getCenteralRect().height() - (GPC_HEAD_SPACING + GPC_TAIL_SPACING));
-
- GeneralPurposeCon *generalCon =
- new GeneralPurposeCon(parentWidget(), keyList, conSize);
-
- generalCon->resize(conSize);
- const QPoint topLeft = conForm->getCenteralRect().topLeft();
- generalCon->move(topLeft.x(), topLeft.y() + GPC_HEAD_SPACING);
+ GeneralPurposeCon *generalCon = new GeneralPurposeCon();
+ QList<HWKeyButton *> buttons
+ = generalCon->createButtons(parentWidget(), conForm);
}
}
#include "config-host.h"
#include "generalpurposecon.h"
-#include "hwkeybutton.h"
#include "resource/ui_strings.h"
-GeneralPurposeCon::GeneralPurposeCon(QWidget *parent,
- QList<HardwareKey *> keyList, QSize size) : QWidget(parent)
+GeneralPurposeCon::GeneralPurposeCon()
{
- setStyleSheet("background-color: rgb(38, 38, 38)");
-
- createItems(keyList, size);
+ qDebug("create general purpose controller");
}
-void GeneralPurposeCon::createItems(QList<HardwareKey *> keyList, QSize size)
+QList<HWKeyButton *> GeneralPurposeCon::createButtons(QWidget *parent, ControllerForm *form)
{
- QWidget *buttonGroup = new QWidget(this);
- buttonGroup->setStyleSheet(STYLE_TOOLTIP);
+ QPoint topLeft = form->getCenteralRect().topLeft();
+ topLeft.setX(topLeft.x() + GPC_LEFT_SPACING);
+ topLeft.setY(topLeft.y() + GPC_HEAD_SPACING);
- QVBoxLayout *layout = new QVBoxLayout(buttonGroup);
- layout->setMargin(0);
+ QList<HWKeyButton *> buttonList;
+ // H/W key list
+ createKeyList(parent, form->getKeyList(), topLeft, buttonList);
- layout->setSpacing(GPC_KEYBUTTON_VSPACING);
+ return buttonList;
+}
+void GeneralPurposeCon::createKeyList(QWidget *parent, QList<HardwareKey *> keyList, QPoint topLeft, QList<HWKeyButton *> &buttonList)
+{
HardwareKey *hwKey = NULL;
HWKeyButton *keyButton = NULL;
+
for (int i = 0; i < keyList.count(); i++) {
hwKey = keyList.at(i);
if (hwKey != NULL) {
- keyButton = new HWKeyButton(buttonGroup, hwKey,
- QSize(GPC_KEYBUTTON_WIDTH, GPC_KEYBUTTON_HEIGHT));
-
+ keyButton = new HWKeyButton(parent, hwKey,
+ QSize(GPC_KEYBUTTON_WIDTH, GPC_KEYBUTTON_HEIGHT));
QString tooltip = hwKey->getTooltip();
if (tooltip.isEmpty() == true) {
if (hwKey->getKeySequence().isEmpty() == false) {
tooltip = hwKey->getKeySequence().toString();
-#ifdef CONFIG_DARWIN
+ #ifdef CONFIG_DARWIN
tooltip.replace(XML_QT_METAKEY_STRING, XML_QT_CTRLKEY_STRING);
-#endif
+ #endif
}
}
- keyButton->setToolTip(tooltip);
- layout->addWidget(keyButton);
+ keyButton->setToolTip(hwKey->getName() + " " + tooltip);
+ keyButton->move(topLeft.x(), topLeft.y()
+ + (GPC_KEYBUTTON_VSPACING + GPC_KEYBUTTON_HEIGHT) * i);
+ buttonList.append(keyButton);
}
}
-
- QScrollArea *scrollArea = new QScrollArea(this);
- scrollArea->setFocusPolicy(Qt::NoFocus);
- scrollArea->setFrameShape(QFrame::NoFrame);
- scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
-
- scrollArea->verticalScrollBar()->setStyleSheet(
- "QScrollBar:vertical {"
- "width: " + QString::number(GPC_SCROLLBAR_WIDTH) + ";" +
- "margin: 14px 0px 14px 0px;"
- "background-color: black;"
- "}"
- "QScrollBar::handle:vertical {"
- "min-height: 24px;"
- "margin: 0px 2px 0px 2px;"
- "background-color: QLinearGradient(x1: 1, y1: 0, x2: 0, y2: 0," +
- "stop: 0 #3C3C3C, stop: 1 #737373);"
- "border-radius: 3px;"
- "}"
- "QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {"
- "background: none;"
- "}"
- "QScrollBar::add-line:vertical {"
- "background-color: black;"
- "subcontrol-position: bottom;"
- "subcontrol-origin: margin;"
- "height: 14px;"
- "}"
- "QScrollBar::sub-line:vertical {"
- "background-color: black;"
- "subcontrol-position: top;"
- "subcontrol-origin: margin;"
- "height: 14px;"
- "}"
- "QScrollBar::up-arrow:vertical {"
- "image: url(\":images/controller-skin/scroll_button_up_normal.png\");"
- "border-width: 0px;"
- "}"
- "QScrollBar::up-arrow:vertical:hover {"
- "image: url(\":images/controller-skin/scroll_button_up_hover.png\");"
- "}"
- "QScrollBar::up-arrow:vertical:pressed {"
- "image: url(\":images/controller-skin/scroll_button_up_pushed.png\");"
- "}"
- "QScrollBar::down-arrow:vertical {"
- "image: url(\":images/controller-skin/scroll_button_down_normal.png\");"
- "}"
- "QScrollBar::down-arrow:vertical:hover {"
- "image: url(\":images/controller-skin/scroll_button_down_hover.png\");"
- "}"
- "QScrollBar::down-arrow:vertical:pressed {"
- "image: url(\":images/controller-skin/scroll_button_down_pushed.png\");"
- "}"
- );
-
- scrollArea->setWidget(buttonGroup);
- scrollArea->resize(size);
}
GeneralPurposeCon::~GeneralPurposeCon()
#ifndef GENERALPURPOSECON_H
#define GENERALPURPOSECON_H
-#include <QVBoxLayout>
-#include <QScrollArea>
-#include <QScrollBar>
-
#include "layout/hardwarekey.h"
+#include "controller/hwkeybutton.h"
+#include "layout/controllerform.h"
-#define GPC_HEAD_SPACING (14)
-#define GPC_TAIL_SPACING (3)
-#define GPC_KEYBUTTON_WIDTH (104)
-#define GPC_KEYBUTTON_HEIGHT (29)
-#define GPC_KEYBUTTON_VSPACING (7)
-#define GPC_KEYBUTTON_DEFAULT_CNT (6)
-#define GPC_SCROLLBAR_WIDTH (0)
-#define GPC_SCROLLBAR_HSPACING (4)
+#define GPC_HEAD_SPACING (8)
+#define GPC_LEFT_SPACING (8)
+#define GPC_TAIL_SPACING (8)
+#define GPC_KEYBUTTON_WIDTH (35)
+#define GPC_KEYBUTTON_HEIGHT (35)
+#define GPC_KEYBUTTON_VSPACING (15)
+#define GPC_KEYBUTTON_HSPACING (15)
-class GeneralPurposeCon : public QWidget
+class GeneralPurposeCon
{
+
public:
- GeneralPurposeCon(QWidget *parent,
- QList<HardwareKey *> keyList, QSize size);
+ GeneralPurposeCon();
~GeneralPurposeCon();
+ QList<HWKeyButton *> createButtons(QWidget *parent, ControllerForm *form);
private:
- void createItems(QList<HardwareKey *> keyList, QSize size);
+ void createKeyList(QWidget *parent, QList<HardwareKey *> keyList, QPoint topLeft, QList<HWKeyButton *> &buttonList);
};
#endif // GENERALPURPOSECON_H
{
this->hwKey = hwKey;
+ setText("");
setFocusPolicy(Qt::NoFocus);
setStyleSheet(
"QPushButton {"
"width: " + QString::number(size.width()) + ";" +
"height: " + QString::number(size.height()) + ";" +
"border: none; color: white;"
- "background: url(\":images/controller-skin/keybutton_normal.png\");"
+ "background: url(\":images/controller-skin/" + hwKey->getName() +"_normal.png\");"
"}"
"QPushButton:hover {"
- "background: url(\":images/controller-skin/keybutton_hover.png\");"
+ "background: url(\":images/controller-skin/" + hwKey->getName() +"_hover.png\");"
"}"
"QPushButton:pressed {"
- "background: url(\":images/controller-skin/keybutton_pushed.png\");"
+ "background: url(\":images/controller-skin/" + hwKey->getName() +"_pushed.png\");"
+ "}"
+ "QToolTip {"
+ "color:#2E2E2E; background-color:#CCCCCC;"
"}"
);
}
/* override */
-void HWKeyButton::showEvent(QShowEvent *event)
-{
- // keep 10% space for margin
- setText(fontMetrics().elidedText(text(), Qt::ElideRight, width() * 0.9));
-}
-
-/* override */
void HWKeyButton::mousePressEvent(QMouseEvent *event)
{
const int keycode = hwKey->getKeycode();
~HWKeyButton();
protected:
- void showEvent(QShowEvent *event);
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
<file>images/main-skin/RC.png</file>
<file>images/main-skin/RB.png</file>
- <file>images/controller-skin/scroll_button_up_normal.png</file>
- <file>images/controller-skin/scroll_button_up_hover.png</file>
- <file>images/controller-skin/scroll_button_up_pushed.png</file>
- <file>images/controller-skin/scroll_button_down_normal.png</file>
- <file>images/controller-skin/scroll_button_down_hover.png</file>
- <file>images/controller-skin/scroll_button_down_pushed.png</file>
<file>images/controller-skin/keybutton_normal.png</file>
<file>images/controller-skin/keybutton_hover.png</file>
<file>images/controller-skin/keybutton_pushed.png</file>
- <file>images/controller-skin/LT.png</file>
- <file>images/controller-skin/LC.png</file>
- <file>images/controller-skin/LB.png</file>
- <file>images/controller-skin/TC.png</file>
- <file>images/controller-skin/BC.png</file>
- <file>images/controller-skin/RT.png</file>
- <file>images/controller-skin/RC.png</file>
- <file>images/controller-skin/RB.png</file>
+ <file>images/controller-skin/Back_hover.png</file>
+ <file>images/controller-skin/Back_normal.png</file>
+ <file>images/controller-skin/Back_pushed.png</file>
+ <file>images/controller-skin/Home_hover.png</file>
+ <file>images/controller-skin/Home_normal.png</file>
+ <file>images/controller-skin/Home_pushed.png</file>
+ <file>images/controller-skin/Menu_hover.png</file>
+ <file>images/controller-skin/Menu_normal.png</file>
+ <file>images/controller-skin/Menu_pushed.png</file>
+ <file>images/controller-skin/Power_hover.png</file>
+ <file>images/controller-skin/Power_normal.png</file>
+ <file>images/controller-skin/Power_pushed.png</file>
+ <file>images/controller-skin/VolumeDown_hover.png</file>
+ <file>images/controller-skin/VolumeDown_normal.png</file>
+ <file>images/controller-skin/VolumeDown_pushed.png</file>
+ <file>images/controller-skin/VolumeUp_hover.png</file>
+ <file>images/controller-skin/VolumeUp_normal.png</file>
+ <file>images/controller-skin/VolumeUp_pushed.png</file>
<file>icons/emulator_icon.ico</file>
<file>icons/shell.png</file>
<keycode>116</keycode>
<shortcut>Ctrl+Shift+F8</shortcut>
</key>
- <key name="Volume +">
+ <key name="VolumeUp">
<keycode>115</keycode>
<shortcut>Ctrl+Shift+]</shortcut>
</key>
- <key name="Volume -">
+ <key name="VolumeDown">
<keycode>114</keycode>
<shortcut>Ctrl+Shift+[</shortcut>
</key>
drawSkin(path, centerPatch, degree, tagLeftTop, tagColor);
}
+SkinPainter::SkinPainter(QSize centerPatch, int degree)
+{
+ drawSkin(centerPatch, degree);
+}
+
+void SkinPainter::drawSkin(QSize center, int degree) {
+ qDebug() << "draw skin surface";
+
+ QRect centeralRect(0, 0, center.width(), center.height());
+ QPixmap image(center.width(), center.height());
+ image.fill(Qt::transparent);
+
+ QPainter painter(&image);
+ painter.fillRect(centeralRect, QBrush(QColor(244, 244, 244)));
+
+ /* rotate */
+ QTransform transform;
+ skin = new QPixmap(image.transformed(transform.rotate(degree)));
+
+ this->centeralRect = QRect(centeralRect.topLeft(),
+ transform.mapRect(centeralRect).size());
+}
+
void SkinPainter::drawSkin(QString patchPath, QSize center, int degree,
QPoint tagLeftTop, QColor tagColor)
{
public:
SkinPainter(const QString &patchPath, QSize centerPatch, int degree,
QPoint tagLeftTop, QColor tagColor);
+ SkinPainter(QSize centerPatch, int degree);
~SkinPainter();
QImage getSkinImage() const;
private:
void drawSkin(QString patchPath, QSize center, int degree,
QPoint tagLeftTop, QColor tagColor);
+ void drawSkin(QSize center, int degree);
QPixmap *skin;
QRect centeralRect;
{
const int keyCount = form->getKeyList().count();
- int width = GPC_KEYBUTTON_WIDTH;
+ int width = GPC_KEYBUTTON_WIDTH + GPC_KEYBUTTON_HSPACING;
int height = GPC_HEAD_SPACING;
- if (keyCount < GPC_KEYBUTTON_DEFAULT_CNT) {
- height += (GPC_KEYBUTTON_HEIGHT * keyCount) +
- (GPC_KEYBUTTON_VSPACING * (keyCount - 1)) + GPC_TAIL_SPACING;
- } else {
- width += (GPC_SCROLLBAR_WIDTH + GPC_SCROLLBAR_HSPACING);
- height += (GPC_KEYBUTTON_HEIGHT * GPC_KEYBUTTON_DEFAULT_CNT)
- + (GPC_KEYBUTTON_VSPACING * (GPC_KEYBUTTON_DEFAULT_CNT - 1)) +
- GPC_TAIL_SPACING;
- }
+ height += (GPC_KEYBUTTON_HEIGHT * keyCount) +
+ (GPC_KEYBUTTON_VSPACING * (keyCount - 1)) + GPC_TAIL_SPACING;
- SkinPainter painter("controller-skin",
- QSize(width, qMax(height, QT_LAYOUT_MINIMUM - 20)), 0,
- QPoint(14, GPC_HEAD_SPACING - 1), uiInfo->getVMColor());
+ SkinPainter painter(QSize(width, qMax(height, QT_LAYOUT_MINIMUM - 20)), 0);
form->skinImg[LayoutForm::normal] = painter.getSkinImage();
form->setCenteralRect(painter.getCenteralRect());