#pragma once // STL includes #include #include #include // Local includes #include // Forward class declarations namespace Json { class Value; } /** * The Led structure contains the definition of the image portion used to determine a single led's * color. *
 * |--------------------image--|
 * | minX  maxX                |
 * |  |-----|maxY              |
 * |  |     |                  |
 * |  |-----|minY              |
 * |                           |
 * |                           |
 * |                           |
 * |---------------------------|
 * 
 */
struct Led
{
	/** The index of the led */
	unsigned index;

	/** The minimum vertical scan line included for this leds color */
	double minX_frac;
	/** The maximum vertical scan line included for this leds color */
	double maxX_frac;
	/** The minimum horizontal scan line included for this leds color */
	double minY_frac;
	/** The maximum horizontal scan line included for this leds color */
	double maxY_frac;
};

class LedString
{
public:
	static LedString construct(const Json::Value& ledConfig, const Json::Value& colorConfig);

	LedString();

	~LedString();

	const std::vector& leds() const;

private:
	std::vector mLeds;

public:
	/**
	 * Color adjustements per color
	 */
	struct
	{
		/** The color gradient */
		double gamma;
		/** The color offset */
		double adjust;
		/** The minimum required level for the led to turn on */
		double blacklevel;
	} red, green, blue;
};