diff --git a/src/graphics/Graphics.cpp b/src/graphics/Graphics.cpp index 7cc74180c..2bed5eeb7 100644 --- a/src/graphics/Graphics.cpp +++ b/src/graphics/Graphics.cpp @@ -714,73 +714,148 @@ void Graphics::textsize(const char * s, int & width, int & height) height = cHeight; } -void Graphics::draw_icon(int x, int y, Icon icon, unsigned char alpha) +void Graphics::draw_icon(int x, int y, Icon icon, unsigned char alpha, bool invert) { y--; switch(icon) { case IconOpen: - drawchar(x, y, 0x81, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x81, 0, 0, 0, alpha); + else + drawchar(x, y, 0x81, 255, 255, 255, alpha); break; case IconReload: - drawchar(x, y, 0x91, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x91, 0, 0, 0, alpha); + else + drawchar(x, y, 0x91, 255, 255, 255, alpha); break; case IconSave: - drawchar(x, y, 0x82, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x82, 0, 0, 0, alpha); + else + drawchar(x, y, 0x82, 255, 255, 255, alpha); break; case IconVoteUp: - drawchar(x, y, 0xCB, 0, 187, 18, alpha); + if(invert) + drawchar(x, y, 0xCB, 0, 100, 0, alpha); + else + drawchar(x, y, 0xCB, 0, 187, 18, alpha); break; case IconVoteDown: - drawchar(x, y, 0xCA, 187, 40, 0, alpha); + if(invert) + drawchar(x, y, 0xCA, 100, 10, 0, alpha); + else + drawchar(x, y, 0xCA, 187, 40, 0, alpha); break; case IconTag: - drawchar(x, y, 0x83, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x83, 0, 0, 0, alpha); + else + drawchar(x, y, 0x83, 255, 255, 255, alpha); break; case IconNew: - drawchar(x, y, 0x92, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x92, 0, 0, 0, alpha); + else + drawchar(x, y, 0x92, 255, 255, 255, alpha); break; case IconLogin: - drawchar(x, y, 0x84, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x84, 0, 0, 0, alpha); + else + drawchar(x, y, 0x84, 255, 255, 255, alpha); break; case IconSimulationSettings: - drawchar(x, y+1, 0xCF, 255, 255, 255, alpha); + if(invert) + drawchar(x, y+1, 0xCF, 0, 0, 0, alpha); + else + drawchar(x, y+1, 0xCF, 255, 255, 255, alpha); break; case IconRenderSettings: - addchar(x, y+1, 0xD8, 255, 0, 0, alpha); - addchar(x, y+1, 0xD9, 0, 255, 0, alpha); - addchar(x, y+1, 0xDA, 0, 0, 255, alpha); + if(invert) + { + drawchar(x, y+1, 0xD8, 255, 0, 0, alpha); + drawchar(x, y+1, 0xD9, 0, 255, 0, alpha); + drawchar(x, y+1, 0xDA, 0, 0, 255, alpha); + } + else + { + addchar(x, y+1, 0xD8, 255, 0, 0, alpha); + addchar(x, y+1, 0xD9, 0, 255, 0, alpha); + addchar(x, y+1, 0xDA, 0, 0, 255, alpha); + } break; case IconPause: - drawchar(x, y, 0x90, 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 0x90, 0, 0, 0, alpha); + else + drawchar(x, y, 0x90, 255, 255, 255, alpha); break; case IconFavourite: - drawchar(x, y, 0xCC, 192, 160, 64, alpha); + if(invert) + drawchar(x, y, 0xCC, 100, 80, 32, alpha); + else + drawchar(x, y, 0xCC, 192, 160, 64, alpha); break; case IconReport: - drawchar(x, y, 0xE3, 255, 255, 0, alpha); + if(invert) + drawchar(x, y, 0xE3, 140, 140, 0, alpha); + else + drawchar(x, y, 0xE3, 255, 255, 0, alpha); break; case IconUsername: - drawchar(x, y, 0x8B, 32, 64, 128, alpha); - drawchar(x, y, 0x8A, 255, 255, 255, alpha); + if(invert) + { + drawchar(x, y, 0x8B, 32, 64, 128, alpha); + drawchar(x, y, 0x8A, 0, 0, 0, alpha); + } + else + { + drawchar(x, y, 0x8B, 32, 64, 128, alpha); + drawchar(x, y, 0x8A, 255, 255, 255, alpha); + } break; case IconPassword: - drawchar(x, y, 0x8C, 160, 144, 32, alpha); - drawchar(x, y, 0x84, 255, 255, 255, alpha); + if(invert) + { + drawchar(x, y, 0x8C, 160, 144, 32, alpha); + drawchar(x, y, 0x84, 0, 0, 0, alpha); + } + else + { + drawchar(x, y, 0x8C, 160, 144, 32, alpha); + drawchar(x, y, 0x84, 255, 255, 255, alpha); + } break; case IconClose: - drawchar(x, y, 0xAA, 230, 230, 230, alpha); + if(invert) + drawchar(x, y, 0xAA, 20, 20, 20, alpha); + else + drawchar(x, y, 0xAA, 230, 230, 230, alpha); break; case IconVoteSort: case IconDateSort: case IconFolder: case IconSearch: case IconDelete: - drawchar(x, y, 0x86, 255, 55, 55, alpha); - drawchar(x, y, 0x85, 255, 255, 255, alpha); + if(invert) + { + drawchar(x, y, 0x86, 255, 55, 55, alpha); + drawchar(x, y, 0x85, 0, 0, 0, alpha); + } + else + { + drawchar(x, y, 0x86, 255, 55, 55, alpha); + drawchar(x, y, 0x85, 255, 255, 255, alpha); + } break; default: - drawchar(x, y, 't', 255, 255, 255, alpha); + if(invert) + drawchar(x, y, 't', 0, 0 ,0 ,alpha); + else + drawchar(x, y, 't', 255, 255, 255, alpha); break; } } diff --git a/src/graphics/Graphics.h b/src/graphics/Graphics.h index a5504256c..3b25bb160 100644 --- a/src/graphics/Graphics.h +++ b/src/graphics/Graphics.h @@ -138,7 +138,7 @@ public: void blendpixel(int x, int y, int r, int g, int b, int a); void addpixel(int x, int y, int r, int g, int b, int a); - void draw_icon(int x, int y, Icon icon, unsigned char alpha = 255); + void draw_icon(int x, int y, Icon icon, unsigned char alpha = 255, bool invert = false); void Clear(); void Finalise(); diff --git a/src/interface/Button.cpp b/src/interface/Button.cpp index b70d41e27..e2af56525 100644 --- a/src/interface/Button.cpp +++ b/src/interface/Button.cpp @@ -107,7 +107,19 @@ void Button::Draw(const Point& screenPos) g->drawtext(Position.X+textPosition.X, Position.Y+textPosition.Y, buttonDisplayText, 180, 180, 180, 255); } if(Appearance.icon) - g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon); + { + if(Enabled) + if(isButtonDown || (isTogglable && toggle)) + { + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255, true); + } + else + { + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 255); + } + else + g->draw_icon(Position.X+iconPosition.X, Position.Y+iconPosition.Y, Appearance.icon, 180); + } } void Button::OnMouseUp(int x, int y, unsigned int button)