summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--displaymenu.c29
-rw-r--r--displaymenu.h1
2 files changed, 27 insertions, 3 deletions
diff --git a/displaymenu.c b/displaymenu.c
index f8716183..89fad873 100644
--- a/displaymenu.c
+++ b/displaymenu.c
@@ -103,6 +103,7 @@ void cFlatDisplayMenu::Clear(void) {
contentHeadPixmap->Fill(clrTransparent);
ContentClear();
DecorBorderClearAll();
+ isScrolling = false;
// DecorBorderClearByFrom( BorderMenuItem );
}
@@ -203,8 +204,10 @@ void cFlatDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool S
ib.Left = Config.decorBorderMenuItemSize;
ib.Top = topBarHeight + marginItem + Config.decorBorderTopBarSize*2 + Config.decorBorderMenuItemSize + y;
ib.Width = menuWidth - Config.decorBorderMenuItemSize*2;
- if( isScrolling )
+ if( isScrolling ) {
ib.Width -= scrollBarWidth;
+ }
+
ib.Height = fontHeight;
ib.Size = Config.decorBorderMenuItemSize;
ib.Type = Config.decorBorderMenuItemType;
@@ -225,7 +228,9 @@ void cFlatDisplayMenu::SetItem(const char *Text, int Index, bool Current, bool S
DecorBorderDraw(ib.Left, ib.Top, ib.Width, ib.Height,
ib.Size, ib.Type, ib.ColorFg, ib.ColorBg, BorderMenuItem);
- ItemBorderInsertUnique(ib);
+ if( !isScrolling ) {
+ ItemBorderInsertUnique(ib);
+ }
SetEditableWidth(menuWidth - Tab(1));
}
@@ -530,10 +535,20 @@ void cFlatDisplayMenu::Flush(void) {
void cFlatDisplayMenu::ItemBorderInsertUnique(sDecorBorder ib) {
std::list<sDecorBorder>::iterator it;
for( it = ItemsBorder.begin(); it != ItemsBorder.end(); it++ ) {
- if( (*it).Left == ib.Left && (*it).Width == ib.Width && (*it).Top == ib.Top && (*it).Height == ib.Height ) {
+ if( (*it).Left == ib.Left && (*it).Top == ib.Top ) {
+ (*it).Left = ib.Left;
+ (*it).Top = ib.Top;
+ (*it).Width = ib.Width;
+ (*it).Height = ib.Height;
+ (*it).Size = ib.Size;
+ (*it).Type = ib.Type;
+ (*it).ColorFg = ib.ColorFg;
+ (*it).ColorBg = ib.ColorBg;
+ (*it).From = ib.From;
return;
}
}
+
ItemsBorder.push_back(ib);
}
@@ -545,6 +560,14 @@ void cFlatDisplayMenu::ItemBorderDrawAllWithScrollbar(void) {
}
}
+void cFlatDisplayMenu::ItemBorderDrawAllWithoutScrollbar(void) {
+ std::list<sDecorBorder>::iterator it;
+ for( it = ItemsBorder.begin(); it != ItemsBorder.end(); it++ ) {
+ DecorBorderDraw((*it).Left, (*it).Top, (*it).Width + scrollBarWidth, (*it).Height, (*it).Size, (*it).Type,
+ (*it).ColorFg, (*it).ColorBg, BorderMenuItem);
+ }
+}
+
void cFlatDisplayMenu::ItemBorderClear(void) {
ItemsBorder.clear();
} \ No newline at end of file
diff --git a/displaymenu.h b/displaymenu.h
index a3424c84..c6a9e1e7 100644
--- a/displaymenu.h
+++ b/displaymenu.h
@@ -29,6 +29,7 @@ class cFlatDisplayMenu : public cFlatBaseRender, public cSkinDisplayMenu {
void ItemBorderInsertUnique(sDecorBorder ib);
void ItemBorderDrawAllWithScrollbar(void);
+ void ItemBorderDrawAllWithoutScrollbar(void);
void ItemBorderClear(void);
void DrawScrollbar(int Total, int Offset, int Shown, int Top, int Height, bool CanScrollUp, bool CanScrollDown);