MobinMQL/Include/Graphics/ColorGenerator.mqh
2025-07-22 14:47:41 +03:00

74 lines
3 KiB
MQL5

//+------------------------------------------------------------------+
//| ColorGenerator.mqh |
//| Copyright 2000-2025, MetaQuotes Ltd. |
//| https://www.mql5.com |
//+------------------------------------------------------------------+
//+------------------------------------------------------------------+
//| Class CColorGenerator |
//| Usage: class to generate the default colors |
//+------------------------------------------------------------------+
class CColorGenerator
{
private:
int m_index;
bool m_generate;
uint m_current_palette[20];
const static uint s_default_palette[20];
public:
CColorGenerator(void);
~CColorGenerator(void);
//--- gets the next color
uint Next(void);
//--- reset generator
void Reset(void);
};
const uint CColorGenerator::s_default_palette[20]=
{
0x3366CC,0xDC3912,0xFF9900,0x109618,0x990099,
0x3B3EAC,0x0099C6,0xDD4477,0x66AA00,0xB82E2E,
0x316395,0x994499,0x22AA99,0xAAAA11,0x6633CC,
0xE67300,0x8B0707,0x329262,0x5574A6,0x3B3EAC
};
//+------------------------------------------------------------------+
//| Constructor |
//+------------------------------------------------------------------+
CColorGenerator::CColorGenerator(void): m_index(0),
m_generate(false)
{
ArrayCopy(m_current_palette,s_default_palette);
}
//+------------------------------------------------------------------+
//| Destructor |
//+------------------------------------------------------------------+
CColorGenerator::~CColorGenerator(void)
{
}
//+------------------------------------------------------------------+
//| Gets or generates the following color from the palette |
//+------------------------------------------------------------------+
uint CColorGenerator::Next(void)
{
//--- check the array out of range
if(m_index==20)
{
m_index=0;
if(!m_generate)
m_generate=true;
}
//--- check the default palette is over
if(m_generate)
m_current_palette[m_index]=(m_index==19 ? (m_current_palette[m_index]^m_current_palette[0]):(m_current_palette[m_index]^m_current_palette[m_index+1]));
//--- return next color
return(m_current_palette[m_index++]);
}
//+------------------------------------------------------------------+
//| Resets all the new colors, set the index to 0 |
//+------------------------------------------------------------------+
void CColorGenerator::Reset(void)
{
m_index=0;
m_generate=false;
ArrayCopy(m_current_palette,s_default_palette);
}
//+------------------------------------------------------------------+