mirror of
git://projects.qi-hardware.com/gmenu2x.git
synced 2024-11-26 11:08:27 +02:00
Don't pass screen coordinates to drawScrollBar()
The scroll bar always spans the content area of the screen: the position and height depend only on the theme and not on who is drawing it. Note that the coordinates passed were wrong in most cases, so this commit fixes the scroll bar positioning for several dialogs.
This commit is contained in:
parent
ea85b10d31
commit
b18e3fa6a8
@ -282,7 +282,6 @@ void BrowseDialog::paint()
|
|||||||
}
|
}
|
||||||
gmenu2x->s->clearClipRect();
|
gmenu2x->s->clearClipRect();
|
||||||
|
|
||||||
gmenu2x->drawScrollBar(
|
gmenu2x->drawScrollBar(numRows,fl->size(), firstElement);
|
||||||
numRows,fl->size(), firstElement, clipRect.y, clipRect.h);
|
|
||||||
gmenu2x->s->flip();
|
gmenu2x->s->flip();
|
||||||
}
|
}
|
||||||
|
@ -1188,21 +1188,23 @@ int GMenu2X::drawButtonRight(Surface *s, const string &btn, const string &text,
|
|||||||
return x-6;
|
return x-6;
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMenu2X::drawScrollBar(uint pagesize, uint totalsize, uint pagepos, uint top, uint height) {
|
void GMenu2X::drawScrollBar(uint pageSize, uint totalSize, uint pagePos) {
|
||||||
if (totalsize<=pagesize) return;
|
if (totalSize <= pageSize) {
|
||||||
|
// Everything fits on one screen, no scroll bar needed.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const uint top = skinConfInt["topBarHeight"] + 1;
|
||||||
|
const uint bottomBarHeight = 21;
|
||||||
|
const uint height = resY - top - (bottomBarHeight + 1);
|
||||||
|
|
||||||
s->rectangle(resX - 8, top, 7, height, skinConfColors[COLOR_SELECTION_BG]);
|
s->rectangle(resX - 8, top, 7, height, skinConfColors[COLOR_SELECTION_BG]);
|
||||||
|
|
||||||
//internal bar total height = height-2
|
const uint barSize = (height - 4) * pageSize / totalSize;
|
||||||
//bar size
|
const uint barPos = (height - 4 - barSize) * pagePos / (totalSize - pageSize);
|
||||||
uint bs = (height-2) * pagesize / totalsize;
|
|
||||||
//bar y position
|
|
||||||
uint by = (height-2) * pagepos / totalsize;
|
|
||||||
by = top+2+by;
|
|
||||||
if (by+bs>top+height-2) by = top+height-2-bs;
|
|
||||||
|
|
||||||
|
s->box(resX - 6, top + 2 + barPos, 3, barSize,
|
||||||
s->box(resX-6, by, 3, bs, skinConfColors[COLOR_SELECTION_BG]);
|
skinConfColors[COLOR_SELECTION_BG]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GMenu2X::drawTopBar(Surface *s) {
|
void GMenu2X::drawTopBar(Surface *s) {
|
||||||
|
@ -190,7 +190,7 @@ public:
|
|||||||
int drawButton(IconButton *btn, int x=5, int y=-10);
|
int drawButton(IconButton *btn, int x=5, int y=-10);
|
||||||
int drawButton(Surface *s, const std::string &btn, const std::string &text, int x=5, int y=-10);
|
int drawButton(Surface *s, const std::string &btn, const std::string &text, int x=5, int y=-10);
|
||||||
int drawButtonRight(Surface *s, const std::string &btn, const std::string &text, int x=5, int y=-10);
|
int drawButtonRight(Surface *s, const std::string &btn, const std::string &text, int x=5, int y=-10);
|
||||||
void drawScrollBar(uint pagesize, uint totalsize, uint pagepos, uint top, uint height);
|
void drawScrollBar(uint pageSize, uint totalSize, uint pagePos);
|
||||||
|
|
||||||
void drawTopBar(Surface *s=NULL);
|
void drawTopBar(Surface *s=NULL);
|
||||||
void drawBottomBar(Surface *s=NULL);
|
void drawBottomBar(Surface *s=NULL);
|
||||||
|
@ -231,8 +231,7 @@ void Menu::paint(Surface &s) {
|
|||||||
vector<Link*> §ionLinks = links[iSection];
|
vector<Link*> §ionLinks = links[iSection];
|
||||||
const uint numLinks = sectionLinks.size();
|
const uint numLinks = sectionLinks.size();
|
||||||
gmenu2x->drawScrollBar(
|
gmenu2x->drawScrollBar(
|
||||||
linkRows, (numLinks + linkColumns - 1) / linkColumns, iFirstDispRow,
|
linkRows, (numLinks + linkColumns - 1) / linkColumns, iFirstDispRow);
|
||||||
topBarHeight + 1, height - topBarHeight - bottomBarHeight - 2);
|
|
||||||
|
|
||||||
//Links
|
//Links
|
||||||
const uint linksPerPage = linkColumns * linkRows;
|
const uint linksPerPage = linkColumns * linkRows;
|
||||||
|
@ -124,7 +124,7 @@ int Selector::exec(int startSelection) {
|
|||||||
}
|
}
|
||||||
gmenu2x->s->clearClipRect();
|
gmenu2x->s->clearClipRect();
|
||||||
|
|
||||||
gmenu2x->drawScrollBar(SELECTOR_ELEMENTS,fl.size(),firstElement,42,175);
|
gmenu2x->drawScrollBar(SELECTOR_ELEMENTS, fl.size(), firstElement);
|
||||||
gmenu2x->s->flip();
|
gmenu2x->s->flip();
|
||||||
|
|
||||||
switch (gmenu2x->input.waitForPressedButton()) {
|
switch (gmenu2x->input.waitForPressedButton()) {
|
||||||
|
@ -122,9 +122,7 @@ bool SettingsDialog::exec() {
|
|||||||
}
|
}
|
||||||
gmenu2x->s->clearClipRect();
|
gmenu2x->s->clearClipRect();
|
||||||
|
|
||||||
gmenu2x->drawScrollBar(
|
gmenu2x->drawScrollBar(numRows, voices.size(), firstElement);
|
||||||
numRows, voices.size(), firstElement, clipRect.y + 1, clipRect.h
|
|
||||||
);
|
|
||||||
|
|
||||||
//description
|
//description
|
||||||
writeSubTitle(voices[sel]->getDescription());
|
writeSubTitle(voices[sel]->getDescription());
|
||||||
|
@ -94,7 +94,7 @@ void TextDialog::drawText(vector<string> *text, unsigned firstRow,
|
|||||||
}
|
}
|
||||||
|
|
||||||
gmenu2x->s->clearClipRect();
|
gmenu2x->s->clearClipRect();
|
||||||
gmenu2x->drawScrollBar(rowsPerPage,text->size(),firstRow,42,gmenu2x->resY-65);
|
gmenu2x->drawScrollBar(rowsPerPage, text->size(), firstRow);
|
||||||
}
|
}
|
||||||
|
|
||||||
void TextDialog::exec() {
|
void TextDialog::exec() {
|
||||||
|
@ -110,7 +110,7 @@ bool WallpaperDialog::exec()
|
|||||||
}
|
}
|
||||||
gmenu2x->s->clearClipRect();
|
gmenu2x->s->clearClipRect();
|
||||||
|
|
||||||
gmenu2x->drawScrollBar(10,wallpapers.size(),firstElement,44,170);
|
gmenu2x->drawScrollBar(10, wallpapers.size(), firstElement);
|
||||||
gmenu2x->s->flip();
|
gmenu2x->s->flip();
|
||||||
|
|
||||||
switch(gmenu2x->input.waitForPressedButton()) {
|
switch(gmenu2x->input.waitForPressedButton()) {
|
||||||
|
Loading…
Reference in New Issue
Block a user