Browse Source

Color using int; NanoVG extended color funcs and in-frame test

gh-pages
falkTX 10 years ago
parent
commit
17393403bf
4 changed files with 68 additions and 6 deletions
  1. +2
    -2
      dgl/Color.hpp
  2. +25
    -0
      dgl/NanoVG.hpp
  3. +2
    -2
      dgl/src/Color.cpp
  4. +39
    -2
      dgl/src/NanoVG.cpp

+ 2
- 2
dgl/Color.hpp View File

@@ -48,7 +48,7 @@ struct Color {
Create a color from red, green, blue and alpha numeric values. Create a color from red, green, blue and alpha numeric values.
Values must be in [0..255] range. Values must be in [0..255] range.
*/ */
Color(const uchar red, const uchar green, const uchar blue, const uchar alpha = 255) noexcept;
Color(const int red, const int green, const int blue, const int alpha = 255) noexcept;


/** /**
Create a color from red, green, blue and alpha floating-point values. Create a color from red, green, blue and alpha floating-point values.
@@ -71,7 +71,7 @@ struct Color {
Create a color specified by hue, saturation, lightness and alpha. Create a color specified by hue, saturation, lightness and alpha.
HSL values are all in [0..1] range, alpha in [0..255] range. HSL values are all in [0..1] range, alpha in [0..255] range.
*/ */
static Color HSL(const float hue, const float saturation, const float lightness, const uchar alpha = 255);
static Color HSL(const float hue, const float saturation, const float lightness, const int alpha = 255);


/** /**
Linearly interpolate this color against another. Linearly interpolate this color against another.


+ 25
- 0
dgl/NanoVG.hpp View File

@@ -312,6 +312,18 @@ public:
*/ */
void strokeColor(const Color& color); void strokeColor(const Color& color);


/**
Sets current stroke style to a solid color, made from red, green, blue and alpha numeric values.
Values must be in [0..255] range.
*/
void strokeColor(const int red, const int green, const int blue, const int alpha = 255);

/**
Sets current stroke style to a solid color, made from red, green, blue and alpha numeric values.
Values must in [0..1] range.
*/
void strokeColor(const float red, const float green, const float blue, const float alpha = 1.0f);

/** /**
Sets current stroke style to a paint, which can be a one of the gradients or a pattern. Sets current stroke style to a paint, which can be a one of the gradients or a pattern.
*/ */
@@ -322,6 +334,18 @@ public:
*/ */
void fillColor(const Color& color); void fillColor(const Color& color);


/**
Sets current fill style to a solid color, made from red, green, blue and alpha numeric values.
Values must be in [0..255] range.
*/
void fillColor(const int red, const int green, const int blue, const int alpha = 255);

/**
Sets current fill style to a solid color, made from red, green, blue and alpha numeric values.
Values must in [0..1] range.
*/
void fillColor(const float red, const float green, const float blue, const float alpha = 1.0f);

/** /**
Sets current fill style to a paint, which can be a one of the gradients or a pattern. Sets current fill style to a paint, which can be a one of the gradients or a pattern.
*/ */
@@ -713,6 +737,7 @@ public:


private: private:
NVGcontext* const fContext; NVGcontext* const fContext;
bool fInFrame;


DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NanoVG) DISTRHO_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR(NanoVG)
}; };


+ 2
- 2
dgl/src/Color.cpp View File

@@ -25,7 +25,7 @@ START_NAMESPACE_DGL
Color::Color() noexcept Color::Color() noexcept
: red(1.0f), green(1.0f), blue(1.0f), alpha(1.0f) {} : red(1.0f), green(1.0f), blue(1.0f), alpha(1.0f) {}


Color::Color(const uchar r, const uchar g, const uchar b, const uchar a) noexcept
Color::Color(const int r, const int g, const int b, const int a) noexcept
: red(static_cast<float>(r)/255.0f), green(static_cast<float>(g)/255.0f), blue(static_cast<float>(b)/255.0f), alpha(static_cast<float>(a)/255.0f) {} : red(static_cast<float>(r)/255.0f), green(static_cast<float>(g)/255.0f), blue(static_cast<float>(b)/255.0f), alpha(static_cast<float>(a)/255.0f) {}


Color::Color(const float r, const float g, const float b, const float a) noexcept Color::Color(const float r, const float g, const float b, const float a) noexcept
@@ -51,7 +51,7 @@ void Color::interpolate(const Color& other, const float u) noexcept
alpha = alpha * oneMinusU + other.alpha * u2; alpha = alpha * oneMinusU + other.alpha * u2;
} }


Color Color::HSL(const float hue, const float saturation, const float lightness, const uchar alpha)
Color Color::HSL(const float hue, const float saturation, const float lightness, const int alpha)
{ {
return nvgHSLA(hue, saturation, lightness, alpha); return nvgHSLA(hue, saturation, lightness, alpha);
} }


+ 39
- 2
dgl/src/NanoVG.cpp View File

@@ -116,19 +116,23 @@ void NanoImage::_updateSize()
// NanoVG // NanoVG


NanoVG::NanoVG() NanoVG::NanoVG()
: fContext(nvgCreateGL(512, 512, NVG_ANTIALIAS))
: fContext(nvgCreateGL(512, 512, NVG_ANTIALIAS)),
fInFrame(false)
{ {
DISTRHO_SAFE_ASSERT_RETURN(fContext != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(fContext != nullptr,);
} }


NanoVG::NanoVG(const int textAtlasWidth, const int textAtlasHeight) NanoVG::NanoVG(const int textAtlasWidth, const int textAtlasHeight)
: fContext(nvgCreateGL(textAtlasWidth, textAtlasHeight, NVG_ANTIALIAS))
: fContext(nvgCreateGL(textAtlasWidth, textAtlasHeight, NVG_ANTIALIAS)),
fInFrame(false)
{ {
DISTRHO_SAFE_ASSERT_RETURN(fContext != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(fContext != nullptr,);
} }


NanoVG::~NanoVG() NanoVG::~NanoVG()
{ {
DISTRHO_SAFE_ASSERT(! fInFrame);

if (fContext != nullptr) if (fContext != nullptr)
nvgDeleteGL(fContext); nvgDeleteGL(fContext);
} }
@@ -141,7 +145,9 @@ void NanoVG::beginFrame(const int width, const int height, const float scaleFact
DISTRHO_SAFE_ASSERT_RETURN(width > 0,); DISTRHO_SAFE_ASSERT_RETURN(width > 0,);
DISTRHO_SAFE_ASSERT_RETURN(height > 0,); DISTRHO_SAFE_ASSERT_RETURN(height > 0,);
DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,); DISTRHO_SAFE_ASSERT_RETURN(scaleFactor > 0.0f,);
DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,);


fInFrame = true;
nvgBeginFrame(fContext, width, height, scaleFactor, static_cast<NVGalpha>(alpha)); nvgBeginFrame(fContext, width, height, scaleFactor, static_cast<NVGalpha>(alpha));
} }


@@ -149,15 +155,22 @@ void NanoVG::beginFrame(Widget* const widget)
{ {
if (fContext == nullptr) return; if (fContext == nullptr) return;
DISTRHO_SAFE_ASSERT_RETURN(widget != nullptr,); DISTRHO_SAFE_ASSERT_RETURN(widget != nullptr,);
DISTRHO_SAFE_ASSERT_RETURN(! fInFrame,);


Window& window(widget->getParentWindow()); Window& window(widget->getParentWindow());

fInFrame = true;
nvgBeginFrame(fContext, window.getWidth(), window.getHeight(), 1.0f, NVG_PREMULTIPLIED_ALPHA); nvgBeginFrame(fContext, window.getWidth(), window.getHeight(), 1.0f, NVG_PREMULTIPLIED_ALPHA);
} }


void NanoVG::endFrame() void NanoVG::endFrame()
{ {
DISTRHO_SAFE_ASSERT_RETURN(fInFrame,);

if (fContext != nullptr) if (fContext != nullptr)
nvgEndFrame(fContext); nvgEndFrame(fContext);

fInFrame = false;
} }


// ----------------------------------------------------------------------- // -----------------------------------------------------------------------
@@ -190,6 +203,18 @@ void NanoVG::strokeColor(const Color& color)
nvgStrokeColor(fContext, color); nvgStrokeColor(fContext, color);
} }


void NanoVG::strokeColor(const int red, const int green, const int blue, const int alpha)
{
if (fContext != nullptr)
nvgStrokeColor(fContext, nvgRGBA(red, green, blue, alpha));
}

void NanoVG::strokeColor(const float red, const float green, const float blue, const float alpha)
{
if (fContext != nullptr)
nvgStrokeColor(fContext, nvgRGBAf(red, green, blue, alpha));
}

void NanoVG::strokePaint(const Paint& paint) void NanoVG::strokePaint(const Paint& paint)
{ {
if (fContext != nullptr) if (fContext != nullptr)
@@ -202,6 +227,18 @@ void NanoVG::fillColor(const Color& color)
nvgFillColor(fContext, color); nvgFillColor(fContext, color);
} }


void NanoVG::fillColor(const int red, const int green, const int blue, const int alpha)
{
if (fContext != nullptr)
nvgFillColor(fContext, nvgRGBA(red, green, blue, alpha));
}

void NanoVG::fillColor(const float red, const float green, const float blue, const float alpha)
{
if (fContext != nullptr)
nvgFillColor(fContext, nvgRGBAf(red, green, blue, alpha));
}

void NanoVG::fillPaint(const Paint& paint) void NanoVG::fillPaint(const Paint& paint)
{ {
if (fContext != nullptr) if (fContext != nullptr)


Loading…
Cancel
Save