diff --git a/src/browsedialog.cpp b/src/browsedialog.cpp index 829dec3..d5e7d76 100644 --- a/src/browsedialog.cpp +++ b/src/browsedialog.cpp @@ -282,7 +282,6 @@ void BrowseDialog::paint() } gmenu2x->s->clearClipRect(); - gmenu2x->drawScrollBar( - numRows,fl->size(), firstElement, clipRect.y, clipRect.h); + gmenu2x->drawScrollBar(numRows,fl->size(), firstElement); gmenu2x->s->flip(); } diff --git a/src/gmenu2x.cpp b/src/gmenu2x.cpp index 2be87ad..31e1da0 100644 --- a/src/gmenu2x.cpp +++ b/src/gmenu2x.cpp @@ -1188,21 +1188,23 @@ int GMenu2X::drawButtonRight(Surface *s, const string &btn, const string &text, return x-6; } -void GMenu2X::drawScrollBar(uint pagesize, uint totalsize, uint pagepos, uint top, uint height) { - if (totalsize<=pagesize) return; +void GMenu2X::drawScrollBar(uint pageSize, uint totalSize, uint pagePos) { + if (totalSize <= pageSize) { + // Everything fits on one screen, no scroll bar needed. + return; + } - s->rectangle(resX-8, top, 7, height, skinConfColors[COLOR_SELECTION_BG]); + const uint top = skinConfInt["topBarHeight"] + 1; + const uint bottomBarHeight = 21; + const uint height = resY - top - (bottomBarHeight + 1); - //internal bar total height = height-2 - //bar size - 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->rectangle(resX - 8, top, 7, height, skinConfColors[COLOR_SELECTION_BG]); + const uint barSize = (height - 4) * pageSize / totalSize; + const uint barPos = (height - 4 - barSize) * pagePos / (totalSize - pageSize); - s->box(resX-6, by, 3, bs, skinConfColors[COLOR_SELECTION_BG]); + s->box(resX - 6, top + 2 + barPos, 3, barSize, + skinConfColors[COLOR_SELECTION_BG]); } void GMenu2X::drawTopBar(Surface *s) { diff --git a/src/gmenu2x.h b/src/gmenu2x.h index de9cf88..aa4e50c 100644 --- a/src/gmenu2x.h +++ b/src/gmenu2x.h @@ -190,7 +190,7 @@ public: 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 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 drawBottomBar(Surface *s=NULL); diff --git a/src/menu.cpp b/src/menu.cpp index 4ed63e5..21b2c69 100644 --- a/src/menu.cpp +++ b/src/menu.cpp @@ -231,8 +231,7 @@ void Menu::paint(Surface &s) { vector §ionLinks = links[iSection]; const uint numLinks = sectionLinks.size(); gmenu2x->drawScrollBar( - linkRows, (numLinks + linkColumns - 1) / linkColumns, iFirstDispRow, - topBarHeight + 1, height - topBarHeight - bottomBarHeight - 2); + linkRows, (numLinks + linkColumns - 1) / linkColumns, iFirstDispRow); //Links const uint linksPerPage = linkColumns * linkRows; diff --git a/src/selector.cpp b/src/selector.cpp index 5aac770..c289338 100644 --- a/src/selector.cpp +++ b/src/selector.cpp @@ -124,7 +124,7 @@ int Selector::exec(int startSelection) { } gmenu2x->s->clearClipRect(); - gmenu2x->drawScrollBar(SELECTOR_ELEMENTS,fl.size(),firstElement,42,175); + gmenu2x->drawScrollBar(SELECTOR_ELEMENTS, fl.size(), firstElement); gmenu2x->s->flip(); switch (gmenu2x->input.waitForPressedButton()) { diff --git a/src/settingsdialog.cpp b/src/settingsdialog.cpp index e9d9b50..28759c9 100644 --- a/src/settingsdialog.cpp +++ b/src/settingsdialog.cpp @@ -122,9 +122,7 @@ bool SettingsDialog::exec() { } gmenu2x->s->clearClipRect(); - gmenu2x->drawScrollBar( - numRows, voices.size(), firstElement, clipRect.y + 1, clipRect.h - ); + gmenu2x->drawScrollBar(numRows, voices.size(), firstElement); //description writeSubTitle(voices[sel]->getDescription()); diff --git a/src/textdialog.cpp b/src/textdialog.cpp index 1859c04..46a45a3 100644 --- a/src/textdialog.cpp +++ b/src/textdialog.cpp @@ -94,7 +94,7 @@ void TextDialog::drawText(vector *text, unsigned firstRow, } gmenu2x->s->clearClipRect(); - gmenu2x->drawScrollBar(rowsPerPage,text->size(),firstRow,42,gmenu2x->resY-65); + gmenu2x->drawScrollBar(rowsPerPage, text->size(), firstRow); } void TextDialog::exec() { diff --git a/src/wallpaperdialog.cpp b/src/wallpaperdialog.cpp index e2c2d66..96cfc5b 100644 --- a/src/wallpaperdialog.cpp +++ b/src/wallpaperdialog.cpp @@ -110,7 +110,7 @@ bool WallpaperDialog::exec() } gmenu2x->s->clearClipRect(); - gmenu2x->drawScrollBar(10,wallpapers.size(),firstElement,44,170); + gmenu2x->drawScrollBar(10, wallpapers.size(), firstElement); gmenu2x->s->flip(); switch(gmenu2x->input.waitForPressedButton()) {