Changes in recmenu.c

This commit is contained in:
kamel5 2019-06-16 14:01:22 +02:00
parent 82e404a74e
commit 763f9d4e52
1 changed files with 27 additions and 20 deletions

View File

@ -5,7 +5,7 @@
cRecMenu::cRecMenu(void) { cRecMenu::cRecMenu(void) {
border = geoManager.borderRecMenus; border = geoManager.borderRecMenus;
height = 2*border; height = 2 * border;
headerHeight = 0; headerHeight = 0;
footerHeight = 0; footerHeight = 0;
currentHeight = 0; currentHeight = 0;
@ -54,25 +54,29 @@ 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++) {
newHeight += (*item)->GetHeight();
} }
if (footer) for (std::list<cRecMenuItem*>::iterator item = menuItems.begin(); item != menuItems.end(); item++) {
newHeight += (*item)->GetHeight();
}
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;
if (scrollable && !reDraw) { returnvalue = true;
width += scrollbarWidth + border;
}
return true;
} }
return false; if (scrollable && !reDraw) {
width += scrollbarWidth + border;
returnvalue = true;
}
return returnvalue;
} }
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);
} }
} }
@ -470,7 +475,7 @@ void cRecMenu::JumpEnd(void) {
activeItem->setBackground(); activeItem->setBackground();
ClearMenuItems(); ClearMenuItems();
int totalNumItems = GetTotalNumMenuItems(); int totalNumItems = GetTotalNumMenuItems();
int currentItem = totalNumItems-1; int currentItem = totalNumItems - 1;
int itemsAdded = 0; int itemsAdded = 0;
cRecMenuItem *newItem = NULL; cRecMenuItem *newItem = NULL;
while (newItem = GetMenuItem(currentItem)) { while (newItem = GetMenuItem(currentItem)) {
@ -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);
} }
} }
@ -692,4 +699,4 @@ cImage *cRecMenu::createScrollbar(int width, int height, tColor clrBgr, tColor c
} }
} }
return image; return image;
} }