/* * DISTRHO Plugin Framework (DPF) * Copyright (C) 2012-2014 Filipe Coelho * * 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. */ // ------------------------------------------------------ // Pics #include "images_src/CatPics.cpp" // ------------------------------------------------------ // DGL Stuff #include "Image.hpp" #include "Widget.hpp" #include "StandaloneWindow.hpp" // ------------------------------------------------------ // use namespace using namespace DGL; // ------------------------------------------------------ // our widget class ExampleImagesWidget : public App::IdleCallback, Widget { public: 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; ExampleImagesWidget(Window& win) : Widget(win), fImgTop1st(1), fImgTop2nd(2), fImgTop3rd(3), fImg1x(0), fImg2x(kImg2max), fImg3y(kImg3max), fImg1rev(false), fImg2rev(true), fImg3rev(true), fImg1(CatPics::cat1Data, CatPics::cat1Width, CatPics::cat1Height, GL_BGR), fImg2(CatPics::cat2Data, CatPics::cat2Width, CatPics::cat2Height, GL_BGR), fImg3(CatPics::cat3Data, CatPics::cat3Width, CatPics::cat3Height, GL_BGR) { } private: void idleCallback() override { if (fImg1rev) { fImg1x -= 2; if (fImg1x <= -50) { fImg1rev = false; setNewTopImg(1); } } else { fImg1x += 2; if (fImg1x >= kImg1max+50) { fImg1rev = true; setNewTopImg(1); } } if (fImg2rev) { fImg2x -= 1; if (fImg2x <= -50) { fImg2rev = false; setNewTopImg(2); } } else { fImg2x += 4; if (fImg2x >= kImg2max+50) { fImg2rev = true; setNewTopImg(2); } } if (fImg3rev) { fImg3y -= 3; if (fImg3y <= -50) { fImg3rev = false; setNewTopImg(3); } } else { fImg3y += 3; if (fImg3y >= kImg3max+50) { fImg3rev = true; setNewTopImg(3); } } repaint(); } void onDisplay() override { switch (fImgTop3rd) { case 1: fImg1.draw(fImg1x, kImg1y); break; case 2: fImg2.draw(fImg2x, kImg2y); break; case 3: fImg3.draw(kImg3x, fImg3y); break; }; switch (fImgTop2nd) { case 1: fImg1.draw(fImg1x, kImg1y); break; case 2: fImg2.draw(fImg2x, kImg2y); break; case 3: fImg3.draw(kImg3x, fImg3y); break; }; switch (fImgTop1st) { case 1: fImg1.draw(fImg1x, kImg1y); break; case 2: fImg2.draw(fImg2x, kImg2y); break; case 3: fImg3.draw(kImg3x, fImg3y); break; }; } void setNewTopImg(const int imgId) { if (fImgTop1st == imgId) return; if (fImgTop2nd == imgId) { fImgTop2nd = fImgTop1st; fImgTop1st = imgId; return; } fImgTop3rd = fImgTop2nd; fImgTop2nd = fImgTop1st; fImgTop1st = imgId; } int fImgTop1st, fImgTop2nd, fImgTop3rd; int fImg1x, fImg2x, fImg3y; bool fImg1rev, fImg2rev, fImg3rev; Image fImg1, fImg2, fImg3; }; // ------------------------------------------------------ // main entry point int main() { App app; Window win(app); ExampleImagesWidget images(win); app.addIdleCallback(&images); win.setResizable(false); win.setSize(500, 400); win.setTitle("Images"); win.show(); app.exec(); return 0; } // ------------------------------------------------------