Initial source commit
This commit is contained in:
commit
f1384c11ee
335 changed files with 52715 additions and 0 deletions
122
minorGems/ui/ProgressBar.cpp
Normal file
122
minorGems/ui/ProgressBar.cpp
Normal file
|
@ -0,0 +1,122 @@
|
|||
// Jason Rohrer
|
||||
// ProgressBar.cpp
|
||||
|
||||
/**
|
||||
*
|
||||
* ProgressBar Gui element implementation
|
||||
*
|
||||
*
|
||||
* Created 11-6-99
|
||||
* Mods:
|
||||
* Jason Rohrer 11-8-99 Changed to use GraphicBuffer object as screen buffer
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
|
||||
#include "ProgressBar.h"
|
||||
|
||||
|
||||
ProgressBar::ProgressBar(int x, int y, int w, int h, Color bordC, Color hC, Color tipC) {
|
||||
|
||||
startX = x;
|
||||
startY = y;
|
||||
wide = w;
|
||||
high = h;
|
||||
|
||||
barWide = wide - 2*borderWide;
|
||||
barHigh = high - 2*borderWide;
|
||||
|
||||
|
||||
borderC = bordC;
|
||||
highC = hC;
|
||||
barTipC = tipC;
|
||||
|
||||
|
||||
imageMap = new unsigned long[high * wide];
|
||||
|
||||
mapYOffset = new int[high];
|
||||
|
||||
// precalc y offsets into 2d image map
|
||||
for( int y=0; y<high; y++ ) {
|
||||
mapYOffset[y] = y*wide;
|
||||
}
|
||||
|
||||
// prepare image map
|
||||
for( int y=0; y<high; y++ ) {
|
||||
int yContrib = mapYOffset[y];
|
||||
|
||||
for( int x=0; x<wide; x++ ) {
|
||||
|
||||
if( y<borderWide || x<borderWide || y>high-borderWide-1 || x>wide-borderWide-1 ) {
|
||||
imageMap[ yContrib + x ] = borderC.composite; // border
|
||||
}
|
||||
else {
|
||||
imageMap[ yContrib + x ] = 0xFF000000; // black inside
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
lastProgress = 0;
|
||||
}
|
||||
|
||||
|
||||
ProgressBar::~ProgressBar() {
|
||||
delete [] imageMap;
|
||||
delete [] mapYOffset;
|
||||
}
|
||||
|
||||
|
||||
void ProgressBar::setProgress(float fractionFull) {
|
||||
|
||||
if( fractionFull < 0) fractionFull = 0;
|
||||
if( fractionFull > 1) fractionFull = 1;
|
||||
|
||||
if( fractionFull < lastProgress ) { // decreasing proress, erase part of bar
|
||||
|
||||
|
||||
int deleteXStart = (int)((fractionFull) * barWide + borderWide);
|
||||
|
||||
int deleteXEnd = (int)((lastProgress) * barWide + borderWide);
|
||||
|
||||
|
||||
for( int y=borderWide; y<high-borderWide; y++ ) {
|
||||
|
||||
int yContrib = mapYOffset[y];
|
||||
|
||||
for( int x=deleteXStart; x<=deleteXEnd; x++ ) {
|
||||
imageMap[ yContrib + x ] = 0xFF000000; // erase to black
|
||||
}
|
||||
// color bar tip
|
||||
imageMap[yContrib + deleteXStart] = barTipC.composite;
|
||||
}
|
||||
}
|
||||
else if( fractionFull > lastProgress) { //progress has increased
|
||||
|
||||
int addXStart = (int)((lastProgress) * barWide + borderWide);
|
||||
int addXEnd = (int)((fractionFull) * barWide + borderWide);
|
||||
|
||||
float weight = lastProgress;
|
||||
float deltaWeight = (fractionFull - lastProgress) / (addXEnd - addXStart);
|
||||
|
||||
for( int x=addXStart; x<addXEnd; x++) {
|
||||
// weighted color
|
||||
unsigned long thisColor = highC.getWeightedComposite(weight);
|
||||
weight += deltaWeight;
|
||||
for( int y=borderWide; y<high-borderWide; y++) {
|
||||
imageMap[mapYOffset[y] + x] = thisColor;
|
||||
}
|
||||
}
|
||||
// color bar tip
|
||||
for( int y=borderWide; y<high-borderWide; y++) {
|
||||
imageMap[mapYOffset[y] + addXEnd] = barTipC.composite;
|
||||
}
|
||||
}
|
||||
|
||||
lastProgress = fractionFull;
|
||||
}
|
||||
|
||||
|
||||
|
Loading…
Add table
Add a link
Reference in a new issue