DPF OpenGL examples
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

142 lines
3.4KB

  1. /*
  2. * DISTRHO Plugin Framework (DPF)
  3. * Copyright (C) 2012-2015 Filipe Coelho <falktx@falktx.com>
  4. *
  5. * Permission to use, copy, modify, and/or distribute this software for any purpose with
  6. * or without fee is hereby granted, provided that the above copyright notice and this
  7. * permission notice appear in all copies.
  8. *
  9. * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD
  10. * TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN
  11. * NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
  12. * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
  13. * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
  14. * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  15. */
  16. #ifndef EXAMPLE_COLOR_WIDGET_HPP_INCLUDED
  17. #define EXAMPLE_COLOR_WIDGET_HPP_INCLUDED
  18. // ------------------------------------------------------
  19. // DGL Stuff
  20. #include "Widget.hpp"
  21. #include "Window.hpp"
  22. // ------------------------------------------------------
  23. // our widget
  24. class ExampleColorWidget : public Widget,
  25. public IdleCallback
  26. {
  27. public:
  28. ExampleColorWidget(Window& parent)
  29. : Widget(parent),
  30. cur('r'),
  31. reverse(false),
  32. r(0), g(0), b(0)
  33. {
  34. setSize(300, 300);
  35. parent.addIdleCallback(this);
  36. }
  37. ExampleColorWidget(Widget* groupWidget)
  38. : Widget(groupWidget),
  39. cur('r'),
  40. reverse(false),
  41. r(0), g(0), b(0)
  42. {
  43. setSize(300, 300);
  44. groupWidget->getParentWindow().addIdleCallback(this);
  45. }
  46. protected:
  47. void idleCallback() noexcept override
  48. {
  49. switch (cur)
  50. {
  51. case 'r':
  52. if (reverse)
  53. {
  54. if (--r == 0)
  55. cur = 'g';
  56. }
  57. else
  58. {
  59. if (++r == 100)
  60. cur = 'g';
  61. }
  62. break;
  63. case 'g':
  64. if (reverse)
  65. {
  66. if (--g == 0)
  67. cur = 'b';
  68. }
  69. else
  70. {
  71. if (++g == 100)
  72. cur = 'b';
  73. }
  74. break;
  75. case 'b':
  76. if (reverse)
  77. {
  78. if (--b == 0)
  79. {
  80. cur = 'r';
  81. reverse = false;
  82. }
  83. }
  84. else
  85. {
  86. if (++b == 100)
  87. {
  88. cur = 'r';
  89. reverse = true;
  90. }
  91. }
  92. break;
  93. }
  94. repaint();
  95. }
  96. void onDisplay() override
  97. {
  98. // paint bg color (in full size)
  99. glColor3b(r, g, b);
  100. bgFull.draw();
  101. // paint inverted color (in 2/3 size)
  102. glColor3b(100-r, 100-g, 100-b);
  103. bgSmall.draw();
  104. }
  105. void onResize(const ResizeEvent& ev) override
  106. {
  107. const uint width = ev.size.getWidth();
  108. const uint height = ev.size.getHeight();
  109. // full bg
  110. bgFull = Rectangle<uint>(0, 0, width, height);
  111. // small bg, centered 2/3 size
  112. bgSmall = Rectangle<uint>(width/6, height/6, width*2/3, height*2/3);
  113. }
  114. char cur;
  115. bool reverse;
  116. int r, g, b;
  117. Rectangle<uint> bgFull, bgSmall;
  118. };
  119. // ------------------------------------------------------
  120. #endif // EXAMPLE_COLOR_WIDGET_HPP_INCLUDED