|
- /*
- * DISTRHO Plugin Framework (DPF)
- * Copyright (C) 2012-2024 Filipe Coelho <falktx@falktx.com>
- *
- * Permission to use, copy, modify, and/or distribute this software for any purpose with
- * or without fee is hereby granted, provided that the above copyright notice and this
- * permission notice appear in all copies.
- *
- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
- * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
- * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
- * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
- * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
- * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
- */
-
- #include "tests.hpp"
-
- #include "dgl/NanoVG.hpp"
-
- START_NAMESPACE_DGL
-
- // --------------------------------------------------------------------------------------------------------------------
- // Images
-
- #include "images_res/CatPics.cpp"
-
- // --------------------------------------------------------------------------------------------------------------------
-
- class NanoImageExample : public NanoStandaloneWindow,
- public IdleCallback
- {
- static const int kImg1y = 0;
- static const int kImg2y = 500/2-CatPics::cat2Height/2;
- static const int kImg3x = 400/3-CatPics::cat3Width/3;
-
- static const int kImg1max = 500-CatPics::cat1Width;
- static const int kImg2max = 500-CatPics::cat2Width;
- static const int kImg3max = 400-CatPics::cat3Height;
-
- int imgTop1st, imgTop2nd, imgTop3rd;
- int img1x, img2x, img3y;
- bool img1rev, img2rev, img3rev;
- NanoImage img1, img2, img3;
-
- public:
- NanoImageExample(Application& app)
- : NanoStandaloneWindow(app),
- imgTop1st(1),
- imgTop2nd(2),
- imgTop3rd(3),
- img1x(0),
- img2x(kImg2max),
- img3y(kImg3max),
- img1rev(false),
- img2rev(true),
- img3rev(true),
- img1(createImageFromRawMemory(CatPics::cat1Width, CatPics::cat1Height, (uchar*)CatPics::cat1Data, 0, kImageFormatBGR)),
- img2(createImageFromRawMemory(CatPics::cat2Width, CatPics::cat2Height, (uchar*)CatPics::cat2Data, 0, kImageFormatBGR)),
- img3(createImageFromRawMemory(CatPics::cat3Width, CatPics::cat3Height, (uchar*)CatPics::cat3Data, 0, kImageFormatBGR))
- {
- DISTRHO_SAFE_ASSERT(img1.isValid());
- DISTRHO_SAFE_ASSERT(img2.isValid());
- DISTRHO_SAFE_ASSERT(img3.isValid());
-
- DISTRHO_SAFE_ASSERT_UINT2(img1.getSize().getWidth() == CatPics::cat1Width,
- img1.getSize().getWidth(), CatPics::cat1Width);
-
- DISTRHO_SAFE_ASSERT_UINT2(img1.getSize().getHeight() == CatPics::cat1Height,
- img1.getSize().getHeight(), CatPics::cat1Height);
-
- DISTRHO_SAFE_ASSERT_UINT2(img2.getSize().getWidth() == CatPics::cat2Width,
- img2.getSize().getWidth(), CatPics::cat2Width);
-
- DISTRHO_SAFE_ASSERT_UINT2(img2.getSize().getHeight() == CatPics::cat2Height,
- img2.getSize().getHeight(), CatPics::cat2Height);
-
- DISTRHO_SAFE_ASSERT_UINT2(img3.getSize().getWidth() == CatPics::cat3Width,
- img3.getSize().getWidth(), CatPics::cat3Width);
-
- DISTRHO_SAFE_ASSERT_UINT2(img3.getSize().getHeight() == CatPics::cat3Height,
- img3.getSize().getHeight(), CatPics::cat3Height);
-
- setResizable(true);
- setSize(500, 500);
- setGeometryConstraints(500, 500, false, true);
- setTitle("NanoImage");
- done();
-
- addIdleCallback(this);
- }
-
- protected:
- void onNanoDisplay() override
- {
- // bottom image
- beginPath();
- fillPaint(setupImagePaint(imgTop3rd));
- fill();
-
- // middle image
- beginPath();
- fillPaint(setupImagePaint(imgTop2nd));
- fill();
-
- // top image
- beginPath();
- fillPaint(setupImagePaint(imgTop1st));
- fill();
- }
-
- void idleCallback() noexcept override
- {
- if (img1rev)
- {
- img1x -= 2;
- if (img1x <= -50)
- {
- img1rev = false;
- setNewTopImg(1);
- }
- }
- else
- {
- img1x += 2;
- if (img1x >= kImg1max+50)
- {
- img1rev = true;
- setNewTopImg(1);
- }
- }
-
- if (img2rev)
- {
- img2x -= 1;
- if (img2x <= -50)
- {
- img2rev = false;
- setNewTopImg(2);
- }
- }
- else
- {
- img2x += 4;
- if (img2x >= kImg2max+50)
- {
- img2rev = true;
- setNewTopImg(2);
- }
- }
-
- if (img3rev)
- {
- img3y -= 3;
- if (img3y <= -50)
- {
- img3rev = false;
- setNewTopImg(3);
- }
- }
- else
- {
- img3y += 3;
- if (img3y >= kImg3max+50)
- {
- img3rev = true;
- setNewTopImg(3);
- }
- }
-
- repaint();
- }
-
- private:
- Paint setupImagePaint(const int imgId) noexcept
- {
- switch (imgId)
- {
- case 1:
- rect(img1x, kImg1y, CatPics::cat1Width, CatPics::cat1Height);
- return imagePattern(img1x, kImg1y, CatPics::cat1Width, CatPics::cat1Height, 0, img1, 1.0f);
- case 2:
- rect(img2x, kImg2y, CatPics::cat2Width, CatPics::cat2Height);
- return imagePattern(img2x, kImg2y, CatPics::cat2Width, CatPics::cat2Height, 0, img2, 1.0f);
- case 3:
- rect(kImg3x, img3y, CatPics::cat3Width, CatPics::cat3Height);
- return imagePattern(kImg3x, img3y, CatPics::cat3Width, CatPics::cat3Height, 0, img3, 1.0f);
- };
-
- return Paint();
- }
-
- void setNewTopImg(const int imgId) noexcept
- {
- if (imgTop1st == imgId)
- return;
-
- if (imgTop2nd == imgId)
- {
- imgTop2nd = imgTop1st;
- imgTop1st = imgId;
- return;
- }
-
- imgTop3rd = imgTop2nd;
- imgTop2nd = imgTop1st;
- imgTop1st = imgId;
- }
- };
-
- // --------------------------------------------------------------------------------------------------------------------
-
- END_NAMESPACE_DGL
-
- int main()
- {
- using DGL_NAMESPACE::Application;
- using DGL_NAMESPACE::NanoImageExample;
-
- Application app(true);
- NanoImageExample win(app);
- win.show();
- app.exec();
-
- return 0;
- }
-
- // --------------------------------------------------------------------------------------------------------------------
|