Page Menu
Home
Phabricator (Chris)
Search
Configure Global Search
Log In
Files
F126252
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Flag For Later
Award Token
Authored By
Unknown
Size
7 KB
Referenced Files
None
Subscribers
None
View Options
diff --git a/util/gui/scroll-list.cpp b/util/gui/scroll-list.cpp
index 3998b2ef..4cfb6afb 100644
--- a/util/gui/scroll-list.cpp
+++ b/util/gui/scroll-list.cpp
@@ -1,239 +1,193 @@
#include "../bitmap.h"
#include "../trans-bitmap.h"
#include "scroll-list.h"
#include "../font.h"
#include <math.h>
#include "../debug.h"
namespace Gui{
static const double FONT_SPACER = 1.3;
// static const int GradientMax = 50;
-const double EPSILON = 0.001;
-double SCROLL_STEP = 20;
-
+const double EPSILON = 0.01;
const int SCROLL_WAIT = 4;
/*
static int selectedGradientStart(){
static int color = Graphics::makeColor(19, 167, 168);
return color;
}
static int selectedGradientEnd(){
static int color = Graphics::makeColor(27, 237, 239);
return color;
}
*/
ScrollItem::ScrollItem(){
}
ScrollItem::~ScrollItem(){
}
ScrollList::ScrollList():
currentIndex(0),
fontSpacingX(0),
fontSpacingY(0),
currentPosition(0),
scrollWait(0),
scrollMotion(1.2),
// selectedGradient(GradientMax, selectedGradientStart(), selectedGradientEnd()),
// useGradient(false),
useHighlight(false),
allowWrap(true),
scroll(0){}
ScrollList::ScrollList(const ScrollList & copy):
currentIndex(copy.currentIndex),
fontSpacingX(copy.fontSpacingX),
fontSpacingY(copy.fontSpacingY),
currentPosition(copy.currentPosition),
scrollWait(copy.scrollWait),
// selectedGradient(GradientMax, selectedGradientStart(), selectedGradientEnd()),
// useGradient(copy.useGradient),
useHighlight(copy.useHighlight),
allowWrap(true),
scroll(0){}
ScrollList::~ScrollList(){}
ScrollList & ScrollList::operator=(const ScrollList & copy){
return *this;
}
void ScrollList::act(){
if (scrollWait == 0){
if (scroll > EPSILON){
// scroll -= SCROLL_MOTION;
scroll /= scrollMotion;
} else if (scroll < -EPSILON){
// scroll += SCROLL_MOTION;
scroll /= scrollMotion;
} else {
scroll = 0;
currentPosition = currentIndex;
}
} else {
scrollWait -= 1;
}
/*
if (scrollWait > 0){
scrollWait -= 1;
} else {
currentPosition = currentIndex;
}
*/
}
/* this is the smooth scroll stuff from context-box */
void ScrollList::doDraw(int x, int y, int middle_x, int min_y, int max_y, const Font & font, int current, int selected, const Graphics::Bitmap & area, int direction){
- int fadeAlpha = 255;
while (y < max_y && y > min_y){
int pick = current;
while (pick < 0){
pick += text.size();
}
pick = pick % text.size();
Util::ReferenceCount<ScrollItem> option = text[pick];
const int startx = middle_x - option->size(font) / 2;
/* draw current selection, make it glow */
if (current == selected){
- Graphics::Bitmap::transBlender(0, 0, 0, fadeAlpha);
- Graphics::TranslucentBitmap translucent(area);
- // const int color = useGradient ? selectedGradient.current() : selectedGradientStart();
option->draw(x + startx, y, area, font, 0);
-#if 0
- if (option->isAdjustable()){
- const int triangleSize = 14;
- int cx = startx - 15;
- int cy = (int)(y + (font.getHeight()/FONT_SPACER) / 2 + 2);
-
- /* do the triangles need to be translucent? */
- translucent.equilateralTriangle(cx, cy, 180, triangleSize, option->getLeftColor());
-
- cx = (x + startx + font.textLength(option->getName().c_str()))+15;
- translucent.equilateralTriangle(cx, cy, 0, triangleSize, option->getRightColor());
- }
-#endif
} else {
/* draw some other item, and fade it */
int count = current - selected;
- // int count = (int) fabs((double) current - (double) selected);
- /* TODO: maybe scale by the number of total items instead of using 35 */
- /*
- int textAlpha = fadeAlpha - (count * 35);
- if (textAlpha < 0){
- textAlpha = 0;
- }
- Graphics::Bitmap::transBlender(0, 0, 0, textAlpha);
- */
- // const int color = Graphics::makeColor(255,255,255);
option->draw(x + startx, y, area, font, count);
- // font.printf(x + startx, y, color, area.translucent(), option->getName(), 0);
}
if (text.size() == 1){
return;
}
current += direction;
y += direction * font.getHeight() / FONT_SPACER;
}
}
void ScrollList::render(const Graphics::Bitmap & where, const Font & font){
+ /* middle of the bitmap offset by the scroll amount. */
+ int y = where.getHeight() / 2 + scroll * font.getHeight() / 2 - font.getHeight() / 2;
- SCROLL_STEP = font.getHeight() / 2;
- // SCROLL_MOTION = SCROLL_STEP / 8;
-
- // Global::debug(0) << "Scroll is " << scroll << std::endl;
- int y = where.getHeight() / 2 + scroll - font.getHeight() / 2;
+ /* allow options to be drawn a little off the bitmap */
int min_y = 0 - font.getHeight() / FONT_SPACER;
- int max_y = where.getHeight();
+ int max_y = where.getHeight() + font.getHeight() / FONT_SPACER;
+ /* draw down starting from the current selection */
doDraw(0, y, where.getWidth() / 2, min_y, max_y, font, currentIndex, currentIndex, where, 1);
- /* draw above the current selection */
+ /* then draw up, skipping the current selection */
doDraw(0, y - font.getHeight() / FONT_SPACER, where.getWidth() / 2, min_y, max_y, font, currentIndex - 1, currentIndex, where, -1);
-
- /*
- int y = 0;
- int x = 5;
- int current = currentIndex;
- while (y < where.getHeight()){
- Util::ReferenceCount<ScrollItem> & item = this->text[current];
- if (current == currentIndex){
- Graphics::Bitmap::transBlender(0, 0, 0, 255);
- } else {
- Graphics::Bitmap::transBlender(0, 0, 0, 128);
- }
- item->draw(x, y, where.translucent(), font);
- y += font.getHeight();
- current = (current + 1 + this->text.size()) % this->text.size();
- }
- */
}
void ScrollList::addItem(const Util::ReferenceCount<ScrollItem> & text){
this->text.push_back(text);
}
void ScrollList::addItems(const std::vector<Util::ReferenceCount<ScrollItem> > & texts){
this->text.insert(text.end(), texts.begin(), texts.end());
}
void ScrollList::setPosition(const Gui::Coordinate & location){
this->position = location;
}
bool ScrollList::next(){
currentIndex++;
- scroll = SCROLL_STEP;
+ // scroll = SCROLL_STEP;
+ scroll = 1;
if (scrollWait == 0){
scrollWait = SCROLL_WAIT;
}
if (currentIndex >= text.size()){
- if (allowWrap){
- currentIndex = 0;
- return true;
- } else {
- currentIndex = text.size()-1;
- return false;
- }
+ if (allowWrap){
+ currentIndex = 0;
+ return true;
+ } else {
+ currentIndex = text.size()-1;
+ return false;
+ }
}
return true;
}
bool ScrollList::previous(){
- scroll = -SCROLL_STEP;
+ // scroll = -SCROLL_STEP;
+ scroll = -1;
if (scrollWait == 0){
scrollWait = SCROLL_WAIT;
}
if (currentIndex > 0){
- currentIndex--;
+ currentIndex--;
} else if (currentIndex == 0){
- if (allowWrap){
- currentIndex = text.size()-1;
- return true;
- } else {
- return false;
- }
+ if (allowWrap){
+ currentIndex = text.size()-1;
+ return true;
+ } else {
+ return false;
+ }
}
return true;
}
bool ScrollList::setCurrentIndex(unsigned int index){
if (index >= text.size()){
- return false;
+ return false;
}
currentIndex = index;
return true;
}
}
File Metadata
Details
Attached
Mime Type
text/x-diff
Expires
Thu, Jun 11, 11:04 AM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
68622
Default Alt Text
(7 KB)
Attached To
Mode
R75 R-Tech1
Attached
Detach File
Event Timeline