diff options
-rw-r--r-- | displaymenu.c | 29 | ||||
-rw-r--r-- | displaymenu.h | 1 |
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); |