1
0
Fork 0
forked from len0rd/rockbox

Theme Editor: SBS will now render underneath WPS, if both are present in project

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@27265 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Robert Bieber 2010-07-03 22:57:42 +00:00
parent 8da13a5d4b
commit 2f68e5be59
6 changed files with 88 additions and 10 deletions

View file

@ -29,18 +29,18 @@
RBScreen::RBScreen(const RBRenderInfo& info, bool remote,
QGraphicsItem *parent)
:QGraphicsItem(parent), backdrop(0), project(project),
albumArt(0)
albumArt(0), customUI(0)
{
if(remote)
{
width = info.device()->data("remotewidth").toInt();
height = info.device()->data("remoteheight").toInt();
fullWidth = info.device()->data("remotewidth").toInt();
fullHeight = info.device()->data("remoteheight").toInt();
}
else
{
width = info.device()->data("screenwidth").toInt();
height = info.device()->data("screenheight").toInt();
fullWidth = info.device()->data("screenwidth").toInt();
fullHeight = info.device()->data("screenheight").toInt();
}
QString bg = info.settings()->value("background color", "FFFFFF");
@ -63,8 +63,8 @@ RBScreen::RBScreen(const RBRenderInfo& info, bool remote,
/* If a backdrop has been found, use its width and height */
if(!backdrop->isNull())
{
width = backdrop->width();
height = backdrop->height();
fullWidth = backdrop->width();
fullHeight = backdrop->height();
}
else
{
@ -74,6 +74,17 @@ RBScreen::RBScreen(const RBRenderInfo& info, bool remote,
}
fonts.insert(0, new RBFont("Nothin'"));
if(parent == 0)
{
width = fullWidth;
height = fullHeight;
}
else
{
width = parent->boundingRect().width();
height = parent->boundingRect().height();
}
}
RBScreen::~RBScreen()
@ -108,6 +119,9 @@ QRectF RBScreen::boundingRect() const
void RBScreen::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget)
{
if(parentItem() != 0)
return;
if(backdrop)
{
painter->drawPixmap(0, 0, width, height, *backdrop);
@ -191,9 +205,18 @@ void RBScreen::makeCustomUI(QString id)
namedViewports.value(id)->at(i)->makeCustomUI();
for(int i = 0; i < namedViewports.value(id)->count(); i++)
namedViewports.value(id)->at(i)->show();
customUI = namedViewports.value(id)->at(0);
}
}
void RBScreen::breakSBS()
{
width = fullWidth;
height = fullHeight;
setParentItem(0);
}
QColor RBScreen::stringToColor(QString str, QColor fallback)
{

View file

@ -67,6 +67,8 @@ public:
void setBackdrop(QString filename);
bool hasBackdrop(){ return backdrop != 0; }
void makeCustomUI(QString id);
void setCustomUI(RBViewport* viewport){ customUI = viewport; }
RBViewport* getCustomUI(){ return customUI; }
static QColor stringToColor(QString str, QColor fallback);
@ -84,10 +86,13 @@ public:
}
}
void breakSBS();
private:
int width;
int height;
int fullWidth;
int fullHeight;
QColor bgColor;
QColor fgColor;
QPixmap* backdrop;
@ -102,6 +107,7 @@ private:
QList<QString> displayedViewports;
RBAlbumArt* albumArt;
RBViewport* customUI;
};
#endif // RBSCREEN_H

View file

@ -113,12 +113,22 @@ RBViewport::RBViewport(skin_element* node, const RBRenderInfo& info)
if(h < 0)
h = info.screen()->getHeight() + h - y;
/* Adjusting to screen coordinates if necessary */
if(screen->parentItem() != 0)
{
x -= screen->parentItem()->pos().x();
y -= screen->parentItem()->pos().y();
}
setPos(x, y);
size = QRectF(0, 0, w, h);
}
debug = info.device()->data("showviewports").toBool();
lineHeight = font->lineHeight();
if(customUI)
screen->setCustomUI(this);
}
RBViewport::~RBViewport()

View file

@ -290,7 +290,9 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project,
settings.insert("themebase", base.canonicalPath());
}
/* Finding imagebase and determining remote/wps status */
bool remote = false;
bool wps = false;
if(file)
{
QString skinFile = *file;
@ -304,14 +306,50 @@ QGraphicsScene* ParseTreeModel::render(ProjectModel* project,
QString extension = decomp.last();
if(extension[0] == 'r')
remote = true;
if(extension.right(3) == "wps")
wps = true;
}
/* Rendering SBS, if necessary */
RBScreen* sbsScreen = 0;
if(wps && device->data("rendersbs").toBool())
{
QString sbsFile = settings.value(remote ? "rsbs" : "sbs", "");
sbsFile.replace("/.rockbox" , settings.value("themebase",""));
if(QFile::exists(sbsFile))
{
QFile sbs(sbsFile);
sbs.open(QFile::ReadOnly | QFile::Text);
ParseTreeModel sbsModel(QString(sbs.readAll()).toAscii());
if(sbsModel.root != 0)
{
RBRenderInfo sbsInfo(&sbsModel, project, &settings, device,
sbsScreen);
sbsScreen = new RBScreen(sbsInfo, remote);
scene->addItem(sbsScreen);
sbsInfo = RBRenderInfo(&sbsModel, project, &settings, device,
sbsScreen);
sbsModel.root->render(sbsInfo);
}
}
}
RBScreen* screen = 0;
RBRenderInfo info(this, project, &settings, device, screen);
/* Adding the screen */
screen = new RBScreen(info, remote);
scene->addItem(screen);
if(sbsScreen)
screen = new RBScreen(info, remote, sbsScreen->getCustomUI());
else
screen = new RBScreen(info, remote);
if(!sbsScreen)
scene->addItem(screen);
info = RBRenderInfo(this, project, &settings, device, screen);

View file

@ -629,7 +629,7 @@ bool ParseTreeNode::execTag(const RBRenderInfo& info, RBViewport* viewport)
{
case 'd':
/* %wd */
/* Disable SBS rendering */
info.screen()->breakSBS();
return true;
case 'e':

View file

@ -36,6 +36,7 @@ screenheight ; Screen Height ; spin(0,800) ; 200
remotewidth ; Remote Width ; spin(0,800) ; 100
remoteheight ; Remote Height ; spin(0,800); 50
showviewports ; Show Viewports ; check ; false
rendersbs ; Render SBS If Available ; check ; true
[ID3 Info]
ia ; Artist ; text ; Current Artist