diff --git a/dgl/Cairo.hpp b/dgl/Cairo.hpp index f5eb1536..9345dbb0 100644 --- a/dgl/Cairo.hpp +++ b/dgl/Cairo.hpp @@ -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& size); + CairoImage(const char* rawData, const Size& 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& pos) override; + + // FIXME this should not be needed + inline void drawAt(const GraphicsContext& context, int x, int y) + { drawAt(context, Point(x, y)); }; }; // -------------------------------------------------------------------------------------------------------------------- diff --git a/dgl/ImageBase.hpp b/dgl/ImageBase.hpp index 8f71aa42..a03c1567 100644 --- a/dgl/ImageBase.hpp +++ b/dgl/ImageBase.hpp @@ -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& size); + ImageBase(const char* rawData, const Size& 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& 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 size; + ImageFormat format; }; // -------------------------------------------------------------------------------------------------------------------- diff --git a/dgl/OpenGL.hpp b/dgl/OpenGL.hpp index 3f44072e..8dff7f74 100644 --- a/dgl/OpenGL.hpp +++ b/dgl/OpenGL.hpp @@ -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& size, - const GLenum format = GL_BGRA, - const GLenum type = GL_UNSIGNED_BYTE); + OpenGLImage(const char* rawData, const Size& 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& 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& pos); + // FIXME this should not be needed + inline void loadFromMemory(const char* rawData, uint w, uint h, ImageFormat format) + { loadFromMemory(rawData, Size(w, h), format); }; + inline void drawAt(const GraphicsContext& context, int x, int y) + { drawAt(context, Point(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; }; diff --git a/dgl/src/Cairo.cpp b/dgl/src/Cairo.cpp index 0a2a9420..a946b374 100644 --- a/dgl/src/Cairo.cpp +++ b/dgl/src/Cairo.cpp @@ -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; 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& size) - : ImageBase(rawData, size) {} +CairoImage::CairoImage(const char* const rawData, const Size& 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 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" + +// ----------------------------------------------------------------------- diff --git a/dgl/src/ImageBase.cpp b/dgl/src/ImageBase.cpp index 82151cc3..2691c4a7 100644 --- a/dgl/src/ImageBase.cpp +++ b/dgl/src/ImageBase.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& s) +ImageBase::ImageBase(const char* const rdata, const Size& 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(width, height), format); +} + +void ImageBase::loadFromMemory(const char* const rdata, const Size& s, const ImageFormat fmt) noexcept +{ + rawData = rdata; + size = s; + format = fmt; +} + void ImageBase::draw(const GraphicsContext& context) { drawAt(context, Point(0, 0)); diff --git a/dgl/src/OpenGL.cpp b/dgl/src/OpenGL.cpp index 235f15cf..acf6aa27 100644 --- a/dgl/src/OpenGL.cpp +++ b/dgl/src/OpenGL.cpp @@ -171,6 +171,23 @@ template class Rectangle; // ----------------------------------------------------------------------- +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(image.getWidth()), static_cast(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& size, const GLenum format, const GLenum type) - : ImageBase(rawData, size), - fFormat(format), - fType(type), - fTextureId(0), +OpenGLImage::OpenGLImage(const char* const rawData, const Size& 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& s, const ImageFormat fmt) noexcept { - loadFromMemory(rawData, Size(width, height), format, type); -} - -void OpenGLImage::loadFromMemory(const char* const rdata, - const Size& 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& 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& 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::onDisplay() img.draw(); } +template class ImageBaseAboutWindow; + // ----------------------------------------------------------------------- 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; - -END_NAMESPACE_DGL - // ----------------------------------------------------------------------- diff --git a/dgl/src/pugl.cpp b/dgl/src/pugl.cpp index 49bb29ca..df706041 100644 --- a/dgl/src/pugl.cpp +++ b/dgl/src/pugl.cpp @@ -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 diff --git a/tests/Demo.cpp b/tests/Demo.cpp index fd441033..d54154e2 100644 --- a/tests/Demo.cpp +++ b/tests/Demo.cpp @@ -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 ExampleImagesSubWidget; +typedef ExampleImagesWidget ExampleImagesTopLevelWidget; +typedef ExampleImagesWidget 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(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 bgIcon; Line 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(app); else if (std::strcmp(argv[1], "shapes") == 0) createAndShowExampleWidgetStandaloneWindow(app); +#ifdef DGL_OPENGL else if (std::strcmp(argv[1], "text") == 0) createAndShowExampleWidgetStandaloneWindow(app); +#endif else d_stderr2("Invalid demo mode, must be one of: color, rectangles, shapes"); } diff --git a/tests/Makefile b/tests/Makefile index 2ca0a4e7..4500f406 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -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) diff --git a/tests/widgets/ExampleColorWidget.hpp b/tests/widgets/ExampleColorWidget.hpp index eb982884..4d55a808 100644 --- a/tests/widgets/ExampleColorWidget.hpp +++ b/tests/widgets/ExampleColorWidget.hpp @@ -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 diff --git a/tests/widgets/ExampleImagesWidget.hpp b/tests/widgets/ExampleImagesWidget.hpp index 9f33e801..1fcb24d2 100644 --- a/tests/widgets/ExampleImagesWidget.hpp +++ b/tests/widgets/ExampleImagesWidget.hpp @@ -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 +template 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 ExampleImagesSubWidget; -typedef ExampleImagesWidget ExampleImagesTopLevelWidget; -typedef ExampleImagesWidget ExampleImagesStandaloneWindow; - // ------------------------------------------------------ END_NAMESPACE_DGL diff --git a/tests/widgets/ExampleRectanglesWidget.hpp b/tests/widgets/ExampleRectanglesWidget.hpp index 425dade2..72ad1e99 100644 --- a/tests/widgets/ExampleRectanglesWidget.hpp +++ b/tests/widgets/ExampleRectanglesWidget.hpp @@ -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(); } diff --git a/tests/widgets/ExampleShapesWidget.hpp b/tests/widgets/ExampleShapesWidget.hpp index c0298e07..f4f9be6f 100644 --- a/tests/widgets/ExampleShapesWidget.hpp +++ b/tests/widgets/ExampleShapesWidget.hpp @@ -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