layout->setMargin(0);
layout->setSpacing(0);
+ if (dockPos & Qt::AlignCenter) {
+ layout->setAlignment(Qt::AlignCenter);
+ } else if (dockPos & Qt::AlignTop) {
+ layout->setAlignment(Qt::AlignTop);
+ } else if (dockPos & Qt::AlignBottom) {
+ layout->setAlignment(Qt::AlignBottom);
+ }
+
QGraphicsScene *conScene = new QGraphicsScene(this);
conScene->setBackgroundBrush(Qt::black);
layout->addWidget(conView);
}
+DockingConView *DockingController::getConView()
+{
+ return conView;
+}
+
int DockingController::getDockPos()
{
return dockPos;
win->getUIState()->conState.dockingCon = NULL;
}
-void DockingController::setRegion(QImage baseImage)
-{
- qDebug("set region");
-
- /*
- if (baseImage.isNull() == true) {
- qWarning("invalid image for region");
- return;
- }
-
- QImage region = baseImage.createAlphaMask();
- setMask(QRegion(QBitmap::fromImage(region)));
- */
-}
-
DockingController::~DockingController()
{
qDebug("destroy docking contoller");
QAction *menu, int dockPos, QWidget *parent = 0);
~DockingController();
+ DockingConView *getConView();
int getDockPos();
protected:
void showEvent(QShowEvent *event);
void closeEvent(QCloseEvent *event);
- void setRegion(QImage baseImage);
-
private:
DockingConView *conView;
ControllerForm *conForm;
DockingConView::DockingConView(ControllerForm *conForm, QGraphicsScene *scene, QWidget *parent)
: QGraphicsView(scene, parent)
{
+ this->parent = (DockingController *)parent;
+
setStyleSheet("background: transparent");
setStyleSheet("border-style: none");
}
if (event->button() == Qt::LeftButton) {
- QWidget *win = ((QWidget *)this->parent()->parent());
+ QWidget *win = ((QWidget *)parent->parent());
grabPos = event->globalPos();
eventPos = event->pos();
- rubberPos = win->pos() + ((QWidget *)this->parent())->pos();
+ rubberPos.setX(win->pos().x() + parent->pos().x());
+ rubberPos.setY(win->pos().y() + pos().y());
if (rubberBand != NULL) {
rubberBand->setGeometry(QRect(rubberPos, size()));
}
/* toggle */
- MainWindow *win = ((MainWindow *)this->parent()->parent());
+ MainWindow *win = ((MainWindow *)parent->parent());
win->getUIState()->conState.recentlyFloatPos = event->globalPos() - eventPos;
win->openController(win->getUIState()->conState.conFormIndex, -1);
#include "skinbezelitem.h"
#include "controllerform.h"
+class DockingController;
+
class DockingConView : public QGraphicsView
{
public:
private:
void createItems(ControllerForm *conForm);
+ DockingController *parent;
SkinBezelItem *bezelItem;
QRubberBand *rubberBand;
};
layout->addWidget(conView);
}
+FloatingConView *FloatingController::getConView()
+{
+ return conView;
+}
+
void FloatingController::showEvent(QShowEvent *event)
{
if (menu != NULL) {
menu->setChecked(true);
}
- setRegion(conForm->conImg[ControllerForm::normal]);
+ setRegion(&(conForm->conImg[ControllerForm::normal]));
}
void FloatingController::closeEvent(QCloseEvent *event) {
win->getUIState()->conState.floatingCon = NULL;
}
-void FloatingController::setRegion(QImage baseImage)
+void FloatingController::setRegion(QImage *baseImage)
{
- //qDebug("set region");
+ qDebug("set region");
- if (baseImage.isNull() == true) {
+ if (baseImage->isNull() == true) {
qWarning("invalid image for region");
return;
}
- QImage region = baseImage.createAlphaMask();
- setMask(QRegion(QBitmap::fromImage(region)));
+ setMask(QRegion(QBitmap::fromImage(baseImage->createAlphaMask())));
}
FloatingController::~FloatingController()
explicit FloatingController(ControllerForm *conForm, QAction *menu, QWidget *parent = 0);
~FloatingController();
+ FloatingConView *getConView();
+
protected:
void showEvent(QShowEvent *event);
void closeEvent(QCloseEvent *event);
- void setRegion(QImage baseImage);
+ void setRegion(QImage *baseImage);
private:
FloatingConView *conView;
FloatingConView::FloatingConView(ControllerForm *conForm, QGraphicsScene *scene, QWidget *parent)
: QGraphicsView(scene, parent)
{
+ this->parent = (FloatingController *)parent;
+
setStyleSheet("background: transparent");
setStyleSheet("border-style: none");
}
if (event->button() == Qt::LeftButton) {
- QWidget *con = ((QWidget *) this->parent());
-
grabPos = event->globalPos();
- conPos = con->pos();
+ conPos = parent->pos();
}
}
grabPos = QPoint(-1, -1);
}
- QWidget *con = ((QWidget *)this->parent());
+ QWidget *con = ((QWidget *)parent);
QWidget *dst = ((QWidget *)con->parent());
int dockPos = isDockable(dst, con);
return;
}
- QWidget *con = ((QWidget *)this->parent());
if (grabPos != QPoint(-1, -1)) {
- con->move(conPos + (event->globalPos() - grabPos));
+ parent->move(conPos + (event->globalPos() - grabPos));
}
}
#include "skinbezelitem.h"
#include "controllerform.h"
+class FloatingController;
+
class FloatingConView : public QGraphicsView
{
public:
private:
void createItems(ControllerForm *conForm);
+ FloatingController *parent;
SkinBezelItem *bezelItem;
};
getFloatingCon()->show();
} else {
- // TODO: alignment
winLayout->addWidget(getDockingCon());
}
}
{
qDebug("resize main window");
- resize(uiInfo->getMainSize().width(),
- uiInfo->getMainSize().height());
+ resize(uiInfo->getUiSize());
setRegion();
}
{
//qDebug("set region");
- setMask(uiInfo->getMainRegion());
+ setMask(uiInfo->getUiRegion());
}
void MainWindow::rotate(int angle)
MainWindow *win = ((MainWindow *)this->parent());
/* geometry */
- const int width = win->uiInfo->getMainSize().width();
- const int height = win->uiInfo->getMainSize().height();
+ const int width = win->uiInfo->getUiSize().width();
+ const int height = win->uiInfo->getUiSize().height();
setGeometry(0, 0, width, height);
/* scaling */
return QSize(0, 0);
}
- QSize mainSize = mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
+ return mainForm->skinImg[MainForm::normal].size() * uiState.getScaleFactor();
+}
+
+QSize UIInformation::getConSize()
+{
+ ControllerForm *conForm = getConForm();
+ if (conForm == NULL) {
+ qWarning("controller form is null");
+ return QSize(0, 0);
+ }
+
+ return conForm->conImg[ControllerForm::normal].size();
+}
+
+QSize UIInformation::getUiSize()
+{
+ QSize uiSize = getMainSize();
/* docking controller */
if (uiState.conState.dockingCon != NULL) {
- ControllerForm *conForm = getConForm();
- if (conForm != NULL) {
- QSize conSize = conForm->conImg[ControllerForm::normal].size();
-
- mainSize.setWidth(mainSize.width() + conSize.width());
- }
+ QSize conSize = getConSize();
+ uiSize.setWidth(uiSize.width() + conSize.width());
}
- return mainSize;
+ return uiSize;
}
QRegion UIInformation::getMainRegion()
}
QImage *mainImage = &(mainForm->skinImg[MainForm::normal]);
-
QImage regionImage = mainImage->scaled(
mainImage->width() * uiState.getScaleFactor(),
mainImage->height() * uiState.getScaleFactor()).createAlphaMask();
- QRegion region(QBitmap::fromImage(regionImage));
+ return QRegion(QBitmap::fromImage(regionImage));
+}
+
+QRegion UIInformation::getConRegion()
+{
+ ControllerForm *conForm = getConForm();
+ if (conForm == NULL) {
+ qWarning("controller form is null");
+ return QRegion(0, 0, 0, 0);
+ }
+
+ QImage *conImage = &(conForm->conImg[ControllerForm::normal]);
+
+ return QRegion(QBitmap::fromImage(conImage->createAlphaMask()));
+}
+
+QRegion UIInformation::getUiRegion()
+{
+ QRegion uiRegion = getMainRegion();
/* docking controller */
DockingController *con = uiState.conState.dockingCon;
if (con != NULL) {
- ControllerForm *conForm = getConForm();
- if (conForm != NULL) {
- QImage *conImage = &(conForm->conImg[ControllerForm::normal]);
- QRegion regionCon(QBitmap::fromImage(conImage->createAlphaMask()));
-
- // TODO: height shift
- regionCon.translate(regionImage.width() + 1, 0);
- region = region.united(regionCon);
+ QRegion conRegion = getConRegion();
+
+ int vShift = 0;
+ if (getMainSize().height() > getConSize().height()) {
+ if (con->getDockPos() & Qt::AlignCenter) {
+ vShift = (getMainSize().height() / 2)
+ - (getConSize().height() / 2);
+ } else if (con->getDockPos() & Qt::AlignBottom) {
+ vShift = getMainSize().height() - getConSize().height();
+ }
}
+
+ conRegion.translate(getMainSize().width() + 1, vShift);
+ uiRegion = uiRegion.united(conRegion);
}
- return region;
+ return uiRegion;
}
UIInformation::~UIInformation()
MainForm *getMainForm(); /* current */
ControllerForm *getConForm();
QSize getMainSize();
+ QSize getConSize();
+ QSize getUiSize(); /* size included main, docking con */
QRegion getMainRegion();
+ QRegion getConRegion();
+ QRegion getUiRegion(); /* size included main, docking con */
};
#endif // UIINFORMATION_H