Changes in recmenu.c

This commit is contained in:
kamel5 2019-06-16 14:01:22 +02:00
parent 82e404a74e
commit 763f9d4e52

View File

@ -55,24 +55,28 @@ int cRecMenu::CalculateOptimalWidth(void) {
bool cRecMenu::CalculateHeight(bool reDraw) { bool cRecMenu::CalculateHeight(bool reDraw) {
int newHeight = 2 * border; int newHeight = 2 * border;
if (header) bool returnvalue = false;
if (header) {
newHeight += headerHeight; newHeight += headerHeight;
}
for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) { for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) {
newHeight += (*item)->GetHeight(); newHeight += (*item)->GetHeight();
} }
if (footer) if (footer) {
newHeight += footerHeight; newHeight += footerHeight;
}
y = (geoManager.osdHeight - newHeight) / 2; y = (geoManager.osdHeight - newHeight) / 2;
if (newHeight != height) { if (newHeight != height) {
height = newHeight; height = newHeight;
returnvalue = true;
}
if (scrollable && !reDraw) { if (scrollable && !reDraw) {
width += scrollbarWidth + border; width += scrollbarWidth + border;
returnvalue = true;
} }
return true; return returnvalue;
}
return false;
} }
void cRecMenu::CreatePixmap(void) { void cRecMenu::CreatePixmap(void) {
@ -141,7 +145,6 @@ void cRecMenu::InitMenu(bool complete) {
} }
void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) { void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) {
item->Show(); item->Show();
if (!inFront) if (!inFront)
@ -153,7 +156,7 @@ void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) {
bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item, bool inFront) { bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item, bool inFront) {
currentHeight += item->GetHeight(); currentHeight += item->GetHeight();
int totalHeight = headerHeight + footerHeight + currentHeight + 2*border; int totalHeight = headerHeight + footerHeight + currentHeight + 2*border;
if (totalHeight >= geoManager.osdHeight - 10) { if (totalHeight >= geoManager.osdHeight - 80) {
scrollable = true; scrollable = true;
currentHeight -= item->GetHeight(); currentHeight -= item->GetHeight();
if (deleteMenuItems) { if (deleteMenuItems) {
@ -434,14 +437,16 @@ void cRecMenu::JumpBegin(void) {
if (currentItem >= numItems) if (currentItem >= numItems)
break; break;
} }
Arrange(true); if (CalculateHeight(true))
CreatePixmap();
Arrange(false);
startIndex = 0; startIndex = 0;
stopIndex = numItems - 1; stopIndex = numItems - 1;
cRecMenuItem *first = menuItems.front(); cRecMenuItem *first = menuItems.front();
first->setActive(); first->setActive();
first->setBackground(); first->setBackground();
first->Draw(); first->Draw();
Display(true); Display(false);
} }
} }
@ -480,7 +485,9 @@ void cRecMenu::JumpEnd(void) {
if (itemsAdded >= numItems) if (itemsAdded >= numItems)
break; break;
} }
Arrange(true); if (CalculateHeight(true))
CreatePixmap();
Arrange(false);
stopIndex = totalNumItems; stopIndex = totalNumItems;
startIndex = stopIndex - numItems; startIndex = stopIndex - numItems;
if (footer) { if (footer) {
@ -493,7 +500,7 @@ void cRecMenu::JumpEnd(void) {
last->setBackground(); last->setBackground();
last->Draw(); last->Draw();
} }
Display(true); Display(false);
} }
} }