Signed-off-by: falkTX <falktx@falktx.com>pull/272/head
@@ -55,16 +55,13 @@ public: | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
CairoImage(const char* const rawData, | |||
const uint width, | |||
const uint height); | |||
CairoImage(const char* rawData, uint width, uint height, ImageFormat format); | |||
/** | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
CairoImage(const char* const rawData, | |||
const Size<uint>& size); | |||
CairoImage(const char* rawData, const Size<uint>& size, ImageFormat format); | |||
/** | |||
Constructor using another image data. | |||
@@ -80,6 +77,10 @@ public: | |||
Draw this image at position @a pos using the graphics context @a context. | |||
*/ | |||
void drawAt(const GraphicsContext& context, const Point<int>& pos) override; | |||
// FIXME this should not be needed | |||
inline void drawAt(const GraphicsContext& context, int x, int y) | |||
{ drawAt(context, Point<int>(x, y)); }; | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -23,6 +23,13 @@ START_NAMESPACE_DGL | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
enum ImageFormat { | |||
kImageFormatBGR, | |||
kImageFormatBGRA, | |||
kImageFormatRGB, | |||
kImageFormatRGBA, | |||
}; | |||
/** | |||
Base DGL Image class. | |||
@@ -44,13 +51,13 @@ protected: | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
ImageBase(const char* const rawData, const uint width, const uint height); | |||
ImageBase(const char* rawData, uint width, uint height, ImageFormat format); | |||
/** | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
ImageBase(const char* const rawData, const Size<uint>& size); | |||
ImageBase(const char* rawData, const Size<uint>& size, ImageFormat format); | |||
/** | |||
Constructor using another image data. | |||
@@ -93,6 +100,25 @@ public: | |||
*/ | |||
const char* getRawData() const noexcept; | |||
/** | |||
Get the image format. | |||
*/ | |||
ImageFormat getFormat() const noexcept; | |||
/** | |||
Load image data from memory. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
void loadFromMemory(const char* rawData, uint width, uint height, ImageFormat format = kImageFormatBGRA) noexcept; | |||
/** | |||
Load image data from memory. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
virtual void loadFromMemory(const char* rawData, | |||
const Size<uint>& size, | |||
ImageFormat format = kImageFormatBGRA) noexcept; | |||
/** | |||
Draw this image at (0, 0) point using the current OpenGL context. | |||
*/ | |||
@@ -101,7 +127,7 @@ public: | |||
/** | |||
Draw this image at (x, y) point using the current OpenGL context. | |||
*/ | |||
void drawAt(const GraphicsContext& context, const int x, const int y); | |||
void drawAt(const GraphicsContext& context, int x, int y); | |||
/** | |||
Draw this image at position @a pos using the current OpenGL context. | |||
@@ -118,6 +144,7 @@ public: | |||
protected: | |||
const char* rawData; | |||
Size<uint> size; | |||
ImageFormat format; | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -141,20 +141,13 @@ public: | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
OpenGLImage(const char* const rawData, | |||
const uint width, | |||
const uint height, | |||
const GLenum format = GL_BGRA, | |||
const GLenum type = GL_UNSIGNED_BYTE); | |||
OpenGLImage(const char* rawData, uint width, uint height, ImageFormat format = kImageFormatBGRA); | |||
/** | |||
Constructor using raw image data. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
OpenGLImage(const char* const rawData, | |||
const Size<uint>& size, | |||
const GLenum format = GL_BGRA, | |||
const GLenum type = GL_UNSIGNED_BYTE); | |||
OpenGLImage(const char* rawData, const Size<uint>& size, ImageFormat format = kImageFormatBGRA); | |||
/** | |||
Constructor using another image data. | |||
@@ -170,30 +163,9 @@ public: | |||
Load image data from memory. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
void loadFromMemory(const char* const rawData, | |||
const uint width, | |||
const uint height, | |||
const GLenum format = GL_BGRA, | |||
const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||
/** | |||
Load image data from memory. | |||
@note @a rawData must remain valid for the lifetime of this Image. | |||
*/ | |||
void loadFromMemory(const char* const rawData, | |||
void loadFromMemory(const char* rawData, | |||
const Size<uint>& size, | |||
const GLenum format = GL_BGRA, | |||
const GLenum type = GL_UNSIGNED_BYTE) noexcept; | |||
/** | |||
Get the image format. | |||
*/ | |||
GLenum getFormat() const noexcept; | |||
/** | |||
Get the image type. | |||
*/ | |||
GLenum getType() const noexcept; | |||
ImageFormat format = kImageFormatBGRA) noexcept override; | |||
/** | |||
Draw this image at position @a pos using the graphics context @a context. | |||
@@ -223,10 +195,20 @@ public: | |||
// TODO mark as deprecated | |||
void drawAt(const Point<int>& pos); | |||
// FIXME this should not be needed | |||
inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format) | |||
{ loadFromMemory(rawData, Size<uint>(w, h), format); }; | |||
inline void drawAt(const GraphicsContext& context, int x, int y) | |||
{ drawAt(context, Point<int>(x, y)); }; | |||
/** | |||
Get the image type. | |||
*/ | |||
// TODO mark as deprecated | |||
GLenum getType() const noexcept { return GL_UNSIGNED_BYTE; } | |||
private: | |||
GLenum fFormat; | |||
GLenum fType; | |||
GLuint fTextureId; | |||
GLuint textureId; | |||
bool setupCalled; | |||
}; | |||
@@ -15,7 +15,10 @@ | |||
*/ | |||
#include "../Cairo.hpp" | |||
#include "SubWidgetPrivateData.hpp" | |||
#include "TopLevelWidgetPrivateData.hpp" | |||
#include "WidgetPrivateData.hpp" | |||
#include "WindowPrivateData.hpp" | |||
START_NAMESPACE_DGL | |||
@@ -124,14 +127,14 @@ template class Rectangle<ushort>; | |||
CairoImage::CairoImage() | |||
: ImageBase() {} | |||
CairoImage::CairoImage(const char* const rawData, const uint width, const uint height) | |||
: ImageBase(rawData, width, height) {} | |||
CairoImage::CairoImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) | |||
: ImageBase(rawData, width, height, format) {} | |||
CairoImage::CairoImage(const char* const rawData, const Size<uint>& size) | |||
: ImageBase(rawData, size) {} | |||
CairoImage::CairoImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) | |||
: ImageBase(rawData, size, format) {} | |||
CairoImage::CairoImage(const CairoImage& image) | |||
: ImageBase(image.rawData, image.size) {} | |||
: ImageBase(image.rawData, image.size, image.format) {} | |||
CairoImage::~CairoImage() | |||
{ | |||
@@ -171,7 +174,32 @@ void SubWidget::PrivateData::display(const uint width, const uint height, const | |||
cairo_set_matrix(cr, &matrix); | |||
// displaySubWidgets(width, height, autoScaleFactor); | |||
selfw->pData->displaySubWidgets(width, height, autoScaleFactor); | |||
} | |||
// ----------------------------------------------------------------------- | |||
void TopLevelWidget::PrivateData::display() | |||
{ | |||
const Size<uint> size(window.getSize()); | |||
const uint width = size.getWidth(); | |||
const uint height = size.getHeight(); | |||
const double autoScaleFactor = window.pData->autoScaleFactor; | |||
#if 0 | |||
// full viewport size | |||
if (window.pData->autoScaling) | |||
glViewport(0, -(height * autoScaleFactor - height), width * autoScaleFactor, height * autoScaleFactor); | |||
else | |||
glViewport(0, 0, width, height); | |||
#endif | |||
// main widget drawing | |||
self->onDisplay(); | |||
// now draw subwidgets if there are any | |||
selfw->pData->displaySubWidgets(width, height, autoScaleFactor); | |||
} | |||
// ----------------------------------------------------------------------- | |||
@@ -186,3 +214,10 @@ const GraphicsContext& Window::PrivateData::getGraphicsContext() const noexcept | |||
// ----------------------------------------------------------------------- | |||
END_NAMESPACE_DGL | |||
// ----------------------------------------------------------------------- | |||
// templated classes | |||
#include "ImageBaseWidgets.cpp" | |||
// ----------------------------------------------------------------------- |
@@ -23,19 +23,23 @@ START_NAMESPACE_DGL | |||
ImageBase::ImageBase() | |||
: rawData(nullptr), | |||
size(0, 0) {} | |||
size(0, 0), | |||
format(kImageFormatBGRA) {} | |||
ImageBase::ImageBase(const char* const rdata, const uint width, const uint height) | |||
ImageBase::ImageBase(const char* const rdata, const uint width, const uint height, const ImageFormat fmt) | |||
: rawData(rdata), | |||
size(width, height) {} | |||
size(width, height), | |||
format(fmt) {} | |||
ImageBase::ImageBase(const char* const rdata, const Size<uint>& s) | |||
ImageBase::ImageBase(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) | |||
: rawData(rdata), | |||
size(s) {} | |||
size(s), | |||
format(fmt) {} | |||
ImageBase::ImageBase(const ImageBase& image) | |||
: rawData(image.rawData), | |||
size(image.size) {} | |||
size(image.size), | |||
format(image.format) {} | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// public methods | |||
@@ -72,6 +76,26 @@ const char* ImageBase::getRawData() const noexcept | |||
return rawData; | |||
} | |||
ImageFormat ImageBase::getFormat() const noexcept | |||
{ | |||
return format; | |||
} | |||
void ImageBase::loadFromMemory(const char* const rawData, | |||
const uint width, | |||
const uint height, | |||
const ImageFormat format) noexcept | |||
{ | |||
loadFromMemory(rawData, Size<uint>(width, height), format); | |||
} | |||
void ImageBase::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept | |||
{ | |||
rawData = rdata; | |||
size = s; | |||
format = fmt; | |||
} | |||
void ImageBase::draw(const GraphicsContext& context) | |||
{ | |||
drawAt(context, Point<int>(0, 0)); | |||
@@ -171,6 +171,23 @@ template class Rectangle<ushort>; | |||
// ----------------------------------------------------------------------- | |||
static GLenum asOpenGLImageFormat(const ImageFormat format) | |||
{ | |||
switch (format) | |||
{ | |||
case kImageFormatBGR: | |||
return GL_BGR; | |||
case kImageFormatBGRA: | |||
return GL_BGRA; | |||
case kImageFormatRGB: | |||
return GL_RGB; | |||
case kImageFormatRGBA: | |||
return GL_RGBA; | |||
} | |||
return GL_BGRA; | |||
} | |||
static void setupOpenGLImage(const OpenGLImage& image, GLuint textureId) | |||
{ | |||
DISTRHO_SAFE_ASSERT_RETURN(image.isValid(),); | |||
@@ -192,7 +209,7 @@ static void setupOpenGLImage(const OpenGLImage& image, GLuint textureId) | |||
static_cast<GLsizei>(image.getWidth()), | |||
static_cast<GLsizei>(image.getHeight()), | |||
0, | |||
image.getFormat(), image.getType(), image.getRawData()); | |||
asOpenGLImageFormat(image.getFormat()), GL_UNSIGNED_BYTE, image.getRawData()); | |||
glBindTexture(GL_TEXTURE_2D, 0); | |||
glDisable(GL_TEXTURE_2D); | |||
@@ -200,85 +217,52 @@ static void setupOpenGLImage(const OpenGLImage& image, GLuint textureId) | |||
OpenGLImage::OpenGLImage() | |||
: ImageBase(), | |||
fFormat(0), | |||
fType(0), | |||
fTextureId(0), | |||
textureId(0), | |||
setupCalled(false) | |||
{ | |||
glGenTextures(1, &fTextureId); | |||
DISTRHO_SAFE_ASSERT(fTextureId != 0); | |||
glGenTextures(1, &textureId); | |||
DISTRHO_SAFE_ASSERT(textureId != 0); | |||
} | |||
OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint height, const GLenum format, const GLenum type) | |||
: ImageBase(rawData, width, height), | |||
fFormat(format), | |||
fType(type), | |||
fTextureId(0), | |||
OpenGLImage::OpenGLImage(const char* const rawData, const uint width, const uint height, const ImageFormat format) | |||
: ImageBase(rawData, width, height, format), | |||
textureId(0), | |||
setupCalled(false) | |||
{ | |||
glGenTextures(1, &fTextureId); | |||
DISTRHO_SAFE_ASSERT(fTextureId != 0); | |||
glGenTextures(1, &textureId); | |||
DISTRHO_SAFE_ASSERT(textureId != 0); | |||
} | |||
OpenGLImage::OpenGLImage(const char* const rawData, const Size<uint>& size, const GLenum format, const GLenum type) | |||
: ImageBase(rawData, size), | |||
fFormat(format), | |||
fType(type), | |||
fTextureId(0), | |||
OpenGLImage::OpenGLImage(const char* const rawData, const Size<uint>& size, const ImageFormat format) | |||
: ImageBase(rawData, size, format), | |||
textureId(0), | |||
setupCalled(false) | |||
{ | |||
glGenTextures(1, &fTextureId); | |||
DISTRHO_SAFE_ASSERT(fTextureId != 0); | |||
glGenTextures(1, &textureId); | |||
DISTRHO_SAFE_ASSERT(textureId != 0); | |||
} | |||
OpenGLImage::OpenGLImage(const OpenGLImage& image) | |||
: ImageBase(image), | |||
fFormat(image.fFormat), | |||
fType(image.fType), | |||
fTextureId(0), | |||
textureId(0), | |||
setupCalled(false) | |||
{ | |||
glGenTextures(1, &fTextureId); | |||
DISTRHO_SAFE_ASSERT(fTextureId != 0); | |||
glGenTextures(1, &textureId); | |||
DISTRHO_SAFE_ASSERT(textureId != 0); | |||
} | |||
OpenGLImage::~OpenGLImage() | |||
{ | |||
if (fTextureId != 0) | |||
glDeleteTextures(1, &fTextureId); | |||
if (textureId != 0) | |||
glDeleteTextures(1, &textureId); | |||
} | |||
void OpenGLImage::loadFromMemory(const char* const rawData, | |||
const uint width, | |||
const uint height, | |||
const GLenum format, | |||
const GLenum type) noexcept | |||
void OpenGLImage::loadFromMemory(const char* const rdata, const Size<uint>& s, const ImageFormat fmt) noexcept | |||
{ | |||
loadFromMemory(rawData, Size<uint>(width, height), format, type); | |||
} | |||
void OpenGLImage::loadFromMemory(const char* const rdata, | |||
const Size<uint>& s, | |||
const GLenum format, | |||
const GLenum type) noexcept | |||
{ | |||
rawData = rdata; | |||
size = s; | |||
fFormat = format; | |||
fType = type; | |||
ImageBase::loadFromMemory(rdata, s, fmt); | |||
setupCalled = false; | |||
} | |||
GLenum OpenGLImage::getFormat() const noexcept | |||
{ | |||
return fFormat; | |||
} | |||
GLenum OpenGLImage::getType() const noexcept | |||
{ | |||
return fType; | |||
} | |||
void OpenGLImage::drawAt(const GraphicsContext&, const Point<int>& pos) | |||
{ | |||
drawAt(pos); | |||
@@ -288,8 +272,7 @@ OpenGLImage& OpenGLImage::operator=(const OpenGLImage& image) noexcept | |||
{ | |||
rawData = image.rawData; | |||
size = image.size; | |||
fFormat = image.fFormat; | |||
fType = image.fType; | |||
format = image.format; | |||
setupCalled = false; | |||
return *this; | |||
} | |||
@@ -306,17 +289,17 @@ void OpenGLImage::drawAt(const int x, const int y) | |||
void OpenGLImage::drawAt(const Point<int>& pos) | |||
{ | |||
if (fTextureId == 0 || isInvalid()) | |||
if (textureId == 0 || isInvalid()) | |||
return; | |||
if (! setupCalled) | |||
{ | |||
setupOpenGLImage(*this, fTextureId); | |||
setupOpenGLImage(*this, textureId); | |||
setupCalled = true; | |||
} | |||
glEnable(GL_TEXTURE_2D); | |||
glBindTexture(GL_TEXTURE_2D, fTextureId); | |||
glBindTexture(GL_TEXTURE_2D, textureId); | |||
glBegin(GL_QUADS); | |||
@@ -353,6 +336,8 @@ void ImageBaseAboutWindow<OpenGLImage>::onDisplay() | |||
img.draw(); | |||
} | |||
template class ImageBaseAboutWindow<OpenGLImage>; | |||
// ----------------------------------------------------------------------- | |||
void SubWidget::PrivateData::display(const uint width, const uint height, const double autoScaleFactor) | |||
@@ -444,10 +429,4 @@ END_NAMESPACE_DGL | |||
#include "ImageBaseWidgets.cpp" | |||
START_NAMESPACE_DGL | |||
template class ImageBaseAboutWindow<OpenGLImage>; | |||
END_NAMESPACE_DGL | |||
// ----------------------------------------------------------------------- |
@@ -72,6 +72,7 @@ START_NAMESPACE_DGL | |||
#elif defined(DISTRHO_OS_WINDOWS) | |||
#else | |||
# include "pugl-upstream/src/x11.c" | |||
# include "pugl-upstream/src/x11_stub.c" | |||
# ifdef DGL_CAIRO | |||
# include "pugl-upstream/src/x11_cairo.c" | |||
# endif | |||
@@ -14,33 +14,49 @@ | |||
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | |||
*/ | |||
#ifndef DGL_OPENGL | |||
#error OpenGL build required for Demo | |||
#endif | |||
// #ifndef DGL_OPENGL | |||
// #error OpenGL build required for Demo | |||
// #endif | |||
#include "tests.hpp" | |||
// TODO backend agnostic | |||
#include "../dgl/OpenGL.hpp" | |||
#include "widgets/ExampleColorWidget.hpp" | |||
#include "widgets/ExampleImagesWidget.hpp" | |||
#include "widgets/ExampleRectanglesWidget.hpp" | |||
#include "widgets/ExampleTextWidget.hpp" | |||
#include "widgets/ExampleShapesWidget.hpp" | |||
#ifdef DGL_OPENGL | |||
#include "widgets/ExampleTextWidget.hpp" | |||
#endif | |||
#include "demo_res/DemoArtwork.cpp" | |||
#include "images_res/CatPics.cpp" | |||
#ifdef DGL_CAIRO | |||
#include "../dgl/Cairo.hpp" | |||
typedef DGL_NAMESPACE::CairoImage DemoImage; | |||
#endif | |||
#ifdef DGL_OPENGL | |||
#include "../dgl/OpenGL.hpp" | |||
typedef DGL_NAMESPACE::OpenGLImage DemoImage; | |||
#endif | |||
START_NAMESPACE_DGL | |||
typedef ExampleImagesWidget<SubWidget, DemoImage> ExampleImagesSubWidget; | |||
typedef ExampleImagesWidget<TopLevelWidget, DemoImage> ExampleImagesTopLevelWidget; | |||
typedef ExampleImagesWidget<StandaloneWindow, DemoImage> ExampleImagesStandaloneWindow; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
// Left side tab-like widget | |||
class LeftSideWidget : public SubWidget | |||
{ | |||
public: | |||
#ifdef DGL_OPENGL | |||
static const int kPageCount = 5; | |||
#else | |||
static const int kPageCount = 4; | |||
#endif | |||
class Callback | |||
{ | |||
@@ -55,22 +71,26 @@ public: | |||
curPage(0), | |||
curHover(-1) | |||
{ | |||
#ifdef DGL_OPENGL | |||
// for text | |||
nvg.loadSharedResources(); | |||
#endif | |||
using namespace DemoArtwork; | |||
img1.loadFromMemory(ico1Data, ico1Width, ico1Height, GL_BGR); | |||
img2.loadFromMemory(ico2Data, ico2Width, ico2Height, GL_BGR); | |||
img3.loadFromMemory(ico3Data, ico3Width, ico2Height, GL_BGR); | |||
img4.loadFromMemory(ico4Data, ico4Width, ico4Height, GL_BGR); | |||
img5.loadFromMemory(ico5Data, ico5Width, ico5Height, GL_BGR); | |||
img1.loadFromMemory(ico1Data, ico1Width, ico1Height, kImageFormatBGR); | |||
img2.loadFromMemory(ico2Data, ico2Width, ico2Height, kImageFormatBGR); | |||
img3.loadFromMemory(ico3Data, ico3Width, ico2Height, kImageFormatBGR); | |||
img4.loadFromMemory(ico4Data, ico4Width, ico4Height, kImageFormatBGR); | |||
img5.loadFromMemory(ico5Data, ico5Width, ico5Height, kImageFormatBGR); | |||
} | |||
protected: | |||
void onDisplay() override | |||
{ | |||
const GraphicsContext& context(getGraphicsContext()); | |||
const int iconSize = bgIcon.getWidth(); | |||
#if 0 /* TODO make generic */ | |||
glColor3f(0.027f, 0.027f, 0.027f); | |||
Rectangle<uint>(0, 0, getSize()).draw(); | |||
@@ -99,15 +119,17 @@ protected: | |||
// reset color | |||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f); | |||
#endif | |||
const int pad = iconSize/2 - DemoArtwork::ico1Width/2; | |||
img1.drawAt(pad, pad); | |||
img2.drawAt(pad, pad + 3 + iconSize); | |||
img3.drawAt(pad, pad + 6 + iconSize*2); | |||
img4.drawAt(pad, pad + 9 + iconSize*3); | |||
img5.drawAt(pad, pad + 12 + iconSize*4); | |||
img1.drawAt(context, pad, pad); | |||
img2.drawAt(context, pad, pad + 3 + iconSize); | |||
img3.drawAt(context, pad, pad + 6 + iconSize*2); | |||
img4.drawAt(context, pad, pad + 9 + iconSize*3); | |||
img5.drawAt(context, pad, pad + 12 + iconSize*4); | |||
#ifdef DGL_OPENGL | |||
// draw some text | |||
nvg.beginFrame(this); | |||
@@ -120,6 +142,7 @@ protected: | |||
nvg.textBox(15, 440, iconSize, "Look!", nullptr); | |||
nvg.endFrame(); | |||
#endif | |||
} | |||
bool onMouse(const MouseEvent& ev) override | |||
@@ -203,10 +226,12 @@ private: | |||
int curPage, curHover; | |||
Rectangle<double> bgIcon; | |||
Line<int> lineSep; | |||
OpenGLImage img1, img2, img3, img4, img5; | |||
DemoImage img1, img2, img3, img4, img5; | |||
#ifdef DGL_OPENGL | |||
// for text | |||
NanoVG nvg; | |||
#endif | |||
}; | |||
// -------------------------------------------------------------------------------------------------------------------- | |||
@@ -226,7 +251,9 @@ public: | |||
wImages(this), | |||
wRects(this), | |||
wShapes(this), | |||
#ifdef DGL_OPENGL | |||
wText(this), | |||
#endif | |||
wLeft(this, this), | |||
curWidget(nullptr) | |||
{ | |||
@@ -234,16 +261,18 @@ public: | |||
wImages.hide(); | |||
wRects.hide(); | |||
wShapes.hide(); | |||
#ifdef DGL_OPENGL | |||
wText.hide(); | |||
// //wPerf.hide(); | |||
#endif | |||
wColor.setAbsoluteX(kSidebarWidth); | |||
wImages.setAbsoluteX(kSidebarWidth); | |||
wRects.setAbsoluteX(kSidebarWidth); | |||
wShapes.setAbsoluteX(kSidebarWidth); | |||
#ifdef DGL_OPENGL | |||
wText.setAbsoluteX(kSidebarWidth); | |||
#endif | |||
wLeft.setAbsolutePos(2, 2); | |||
// wPerf.setAbsoluteY(5); | |||
setSize(600, 500); | |||
setTitle("DGL Demo"); | |||
@@ -271,9 +300,11 @@ protected: | |||
case 3: | |||
curWidget = &wShapes; | |||
break; | |||
#ifdef DGL_OPENGL | |||
case 4: | |||
curWidget = &wText; | |||
break; | |||
#endif | |||
default: | |||
curWidget = nullptr; | |||
break; | |||
@@ -299,13 +330,10 @@ protected: | |||
wImages.setSize(size); | |||
wRects.setSize(size); | |||
wShapes.setSize(size); | |||
#ifdef DGL_OPENGL | |||
wText.setSize(size); | |||
#endif | |||
wLeft.setSize(kSidebarWidth-4, height-4); | |||
//wRezHandle.setAbsoluteX(width-wRezHandle.getWidth()); | |||
//wRezHandle.setAbsoluteY(height-wRezHandle.getHeight()); | |||
// wPerf.setAbsoluteX(width-wPerf.getWidth()-5); | |||
} | |||
private: | |||
@@ -313,10 +341,10 @@ private: | |||
ExampleImagesSubWidget wImages; | |||
ExampleRectanglesSubWidget wRects; | |||
ExampleShapesSubWidget wShapes; | |||
#ifdef DGL_OPENGL | |||
ExampleTextSubWidget wText; | |||
#endif | |||
LeftSideWidget wLeft; | |||
//ResizeHandle wRezHandle; | |||
// NanoPerfWidget wPerf; | |||
Widget* curWidget; | |||
}; | |||
@@ -357,8 +385,10 @@ int main(int argc, char* argv[]) | |||
createAndShowExampleWidgetStandaloneWindow<ExampleRectanglesStandaloneWindow>(app); | |||
else if (std::strcmp(argv[1], "shapes") == 0) | |||
createAndShowExampleWidgetStandaloneWindow<ExampleShapesStandaloneWindow>(app); | |||
#ifdef DGL_OPENGL | |||
else if (std::strcmp(argv[1], "text") == 0) | |||
createAndShowExampleWidgetStandaloneWindow<ExampleTextStandaloneWindow>(app); | |||
#endif | |||
else | |||
d_stderr2("Invalid demo mode, must be one of: color, rectangles, shapes"); | |||
} | |||
@@ -22,11 +22,12 @@ BUILD_CXX_FLAGS += -Wno-missing-field-initializers -Wno-extra | |||
TESTS = Application Color Point | |||
ifeq ($(HAVE_CAIRO),true) | |||
WTESTS = Window.cairo | |||
TESTS += Demo.cairo | |||
WTESTS += Window.cairo | |||
endif | |||
ifeq ($(HAVE_OPENGL),true) | |||
TESTS += Demo | |||
WTESTS = Window.opengl | |||
TESTS += Demo.opengl | |||
WTESTS += Window.opengl | |||
endif | |||
ifeq ($(HAVE_VULKAN),true) | |||
WTESTS = Window.vulkan | |||
@@ -88,16 +89,6 @@ clean: | |||
@echo "Compiling $< (Cairo)" | |||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(CAIRO_FLAGS) -DDGL_CAIRO -c -o $@ | |||
../build/tests/Demo.cpp.o: Demo.cpp | |||
-@mkdir -p ../build/tests | |||
@echo "Compiling $< (OpenGL)" | |||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -o $@ | |||
../build/tests/Testing.cpp.o: Testing.cpp | |||
-@mkdir -p ../build/tests | |||
@echo "Compiling $< (OpenGL)" | |||
$(SILENT)$(CXX) $< $(BUILD_CXX_FLAGS) $(OPENGL_FLAGS) -DDGL_OPENGL -c -o $@ | |||
../build/tests/%.cpp.opengl.o: %.cpp | |||
-@mkdir -p ../build/tests | |||
@echo "Compiling $< (OpenGL)" | |||
@@ -119,14 +110,6 @@ clean: | |||
@echo "Linking $*" | |||
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(CAIRO_LIBS) -o $@ | |||
../build/tests/Demo: ../build/tests/Demo.cpp.o ../build/libdgl-opengl.a | |||
@echo "Linking Demo" | |||
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@ | |||
../build/tests/Testing: ../build/tests/Testing.cpp.o | |||
@echo "Linking Testing" | |||
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@ | |||
../build/tests/%.opengl: ../build/tests/%.cpp.opengl.o | |||
@echo "Linking $*" | |||
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@ | |||
@@ -135,6 +118,18 @@ clean: | |||
@echo "Linking $*" | |||
$(SILENT)$(CXX) $< $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(VULKAN_LIBS) -o $@ | |||
../build/tests/Demo.cairo: ../build/tests/Demo.cpp.cairo.o ../build/libdgl-cairo.a | |||
@echo "Linking Demo (Cairo)" | |||
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(CAIRO_LIBS) -o $@ | |||
../build/tests/Demo.opengl: ../build/tests/Demo.cpp.opengl.o ../build/libdgl-opengl.a | |||
@echo "Linking Demo (OpenGL)" | |||
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(OPENGL_LIBS) -o $@ | |||
../build/tests/Demo.vulkan: ../build/tests/Demo.cpp.vulkan.o ../build/libdgl-vulkan.a | |||
@echo "Linking Demo (OpenGL)" | |||
$(SILENT)$(CXX) $^ $(LINK_FLAGS) $(DGL_SYSTEM_LIBS) $(VULKAN_LIBS) -o $@ | |||
# --------------------------------------------------------------------------------------------------------------------- | |||
-include $(OBJS:%.o=%.d) | |||
@@ -108,6 +108,7 @@ protected: | |||
{ | |||
const GraphicsContext& context(BaseWidget::getGraphicsContext()); | |||
#if 0 /* TODO make generic */ | |||
// paint bg color (in full size) | |||
glColor3b(r, g, b); | |||
bgFull.draw(context); | |||
@@ -115,6 +116,7 @@ protected: | |||
// paint inverted color (in 2/3 size) | |||
glColor3b(100-r, 100-g, 100-b); | |||
bgSmall.draw(); | |||
#endif | |||
} | |||
void onResize(const ResizeEvent& ev) override | |||
@@ -20,11 +20,10 @@ | |||
// ------------------------------------------------------ | |||
// DGL Stuff | |||
#include "../../dgl/Image.hpp" | |||
#include "../../dgl/ImageBase.hpp" | |||
#include "../../dgl/SubWidget.hpp" | |||
#include "../../dgl/TopLevelWidget.hpp" | |||
// ------------------------------------------------------ | |||
// Images | |||
@@ -35,7 +34,7 @@ START_NAMESPACE_DGL | |||
// ------------------------------------------------------ | |||
// our widget | |||
template <class BaseWidget> | |||
template <class BaseWidget, class BaseImage> | |||
class ExampleImagesWidget : public BaseWidget, | |||
public IdleCallback | |||
{ | |||
@@ -50,7 +49,7 @@ class ExampleImagesWidget : public BaseWidget, | |||
int imgTop1st, imgTop2nd, imgTop3rd; | |||
int img1x, img2x, img3y; | |||
bool img1rev, img2rev, img3rev; | |||
Image img1, img2, img3; | |||
BaseImage img1, img2, img3; | |||
public: | |||
static constexpr const char* kExampleWidgetName = "Images"; | |||
@@ -67,9 +66,9 @@ public: | |||
img1rev(false), | |||
img2rev(true), | |||
img3rev(true), | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, GL_BGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, GL_BGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, GL_BGR) | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, kImageFormatBGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, kImageFormatBGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, kImageFormatBGR) | |||
{ | |||
BaseWidget::setSize(500, 400); | |||
@@ -88,9 +87,9 @@ public: | |||
img1rev(false), | |||
img2rev(true), | |||
img3rev(true), | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, GL_BGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, GL_BGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, GL_BGR) | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, kImageFormatBGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, kImageFormatBGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, kImageFormatBGR) | |||
{ | |||
BaseWidget::setSize(500, 400); | |||
@@ -109,9 +108,9 @@ public: | |||
img1rev(false), | |||
img2rev(true), | |||
img3rev(true), | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, GL_BGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, GL_BGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, GL_BGR) | |||
img1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, kImageFormatBGR), | |||
img2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, kImageFormatBGR), | |||
img3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, kImageFormatBGR) | |||
{ | |||
BaseWidget::setSize(500, 400); | |||
@@ -183,42 +182,44 @@ protected: | |||
void onDisplay() override | |||
{ | |||
const GraphicsContext& context(BaseWidget::getGraphicsContext()); | |||
switch (imgTop3rd) | |||
{ | |||
case 1: | |||
img1.drawAt(img1x, kImg1y); | |||
img1.drawAt(context, img1x, kImg1y); | |||
break; | |||
case 2: | |||
img2.drawAt(img2x, kImg2y); | |||
img2.drawAt(context, img2x, kImg2y); | |||
break; | |||
case 3: | |||
img3.drawAt(kImg3x, img3y); | |||
img3.drawAt(context, kImg3x, img3y); | |||
break; | |||
}; | |||
switch (imgTop2nd) | |||
{ | |||
case 1: | |||
img1.drawAt(img1x, kImg1y); | |||
img1.drawAt(context, img1x, kImg1y); | |||
break; | |||
case 2: | |||
img2.drawAt(img2x, kImg2y); | |||
img2.drawAt(context, img2x, kImg2y); | |||
break; | |||
case 3: | |||
img3.drawAt(kImg3x, img3y); | |||
img3.drawAt(context, kImg3x, img3y); | |||
break; | |||
}; | |||
switch (imgTop1st) | |||
{ | |||
case 1: | |||
img1.drawAt(img1x, kImg1y); | |||
img1.drawAt(context, img1x, kImg1y); | |||
break; | |||
case 2: | |||
img2.drawAt(img2x, kImg2y); | |||
img2.drawAt(context, img2x, kImg2y); | |||
break; | |||
case 3: | |||
img3.drawAt(kImg3x, img3y); | |||
img3.drawAt(context, kImg3x, img3y); | |||
break; | |||
}; | |||
} | |||
@@ -242,10 +243,6 @@ private: | |||
} | |||
}; | |||
typedef ExampleImagesWidget<SubWidget> ExampleImagesSubWidget; | |||
typedef ExampleImagesWidget<TopLevelWidget> ExampleImagesTopLevelWidget; | |||
typedef ExampleImagesWidget<StandaloneWindow> ExampleImagesStandaloneWindow; | |||
// ------------------------------------------------------ | |||
END_NAMESPACE_DGL | |||
@@ -81,30 +81,36 @@ protected: | |||
// 1st | |||
r.setY(3); | |||
#if 0 /* TODO make generic */ | |||
if (clicked[0+i]) | |||
glColor3f(0.8f, 0.5f, 0.3f); | |||
else | |||
glColor3f(0.3f, 0.5f, 0.8f); | |||
#endif | |||
r.draw(); | |||
// 2nd | |||
r.setY(3 + height/3); | |||
#if 0 /* TODO make generic */ | |||
if (clicked[3+i]) | |||
glColor3f(0.8f, 0.5f, 0.3f); | |||
else | |||
glColor3f(0.3f, 0.5f, 0.8f); | |||
#endif | |||
r.draw(); | |||
// 3rd | |||
r.setY(3 + height*2/3); | |||
#if 0 /* TODO make generic */ | |||
if (clicked[6+i]) | |||
glColor3f(0.8f, 0.5f, 0.3f); | |||
else | |||
glColor3f(0.3f, 0.5f, 0.8f); | |||
#endif | |||
r.draw(); | |||
} | |||
@@ -69,6 +69,7 @@ protected: | |||
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST); | |||
#endif | |||
#if 0 /* TODO make generic */ | |||
glLineWidth(1.0f); | |||
glColor3f(0.302f, 0.337f, 0.361f); | |||
bg.draw(); | |||
@@ -92,6 +93,7 @@ protected: | |||
glLineWidth(2.0f); | |||
glColor3f(0.176f/4, 0.212f/4, 0.235f/4); | |||
cir.drawOutline(); | |||
#endif | |||
} | |||
void onResize(const ResizeEvent& ev) override | |||