summaryrefslogtreecommitdiff
path: root/examples/CairoUI/DemoWidgetClickable.cc
diff options
context:
space:
mode:
authorfalkTX <falktx@gmail.com>2019-01-07 01:12:43 +0100
committerfalkTX <falktx@gmail.com>2019-01-07 01:12:43 +0100
commit7bf7a04f47be9bc3e7d832414d11f4c6af0080b6 (patch)
tree40a39afe186151abd55de159458fca7338d458d0 /examples/CairoUI/DemoWidgetClickable.cc
parent204fbeb807d604042c4cd3fcb076df7906521739 (diff)
Add CairoUI plugin example, WIP
Signed-off-by: falkTX <falktx@gmail.com>
Diffstat (limited to 'examples/CairoUI/DemoWidgetClickable.cc')
-rw-r--r--examples/CairoUI/DemoWidgetClickable.cc74
1 files changed, 74 insertions, 0 deletions
diff --git a/examples/CairoUI/DemoWidgetClickable.cc b/examples/CairoUI/DemoWidgetClickable.cc
new file mode 100644
index 00000000..7f2ecb75
--- /dev/null
+++ b/examples/CairoUI/DemoWidgetClickable.cc
@@ -0,0 +1,74 @@
+// Copyright Jean Pierre Cimalando 2018.
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+
+#include "DemoWidgetClickable.h"
+
+#include "Cairo.hpp"
+#include "Window.hpp"
+
+DemoWidgetClickable::DemoWidgetClickable(Widget *group)
+ : Widget(group)
+{
+}
+
+void DemoWidgetClickable::onDisplay()
+{
+ cairo_t *cr = getParentWindow().getGraphicsContext().cairo;
+
+ Point<int> pt = getAbsolutePos();
+ Size<uint> sz = getSize();
+
+ int x = pt.getX();
+ int y = pt.getY();
+ int w = sz.getWidth();
+ int h = sz.getHeight();
+
+ switch (colorid_) {
+ case 0:
+ cairo_set_source_rgb(cr, 0.75, 0.0, 0.0);
+ break;
+ case 1:
+ cairo_set_source_rgb(cr, 0.0, 0.75, 0.0);
+ break;
+ case 2:
+ cairo_set_source_rgb(cr, 0.0, 0.0, 0.75);
+ break;
+ }
+ cairo_rectangle(cr, x, y, w, h);
+ cairo_fill(cr);
+
+ cairo_set_source_rgb(cr, 0.9, 0.9, 0.9);
+ cairo_new_path(cr);
+ cairo_move_to(cr, x + 0.25 * w, y + 0.25 * h);
+ cairo_line_to(cr, x + 0.75 * w, y + 0.75 * h);
+ cairo_stroke(cr);
+ cairo_new_path(cr);
+ cairo_move_to(cr, x + 0.75 * w, y + 0.25 * h);
+ cairo_line_to(cr, x + 0.25 * w, y + 0.75 * h);
+ cairo_stroke(cr);
+}
+
+bool DemoWidgetClickable::onMouse(const MouseEvent &event)
+{
+ if (event.press) {
+ Point<int> pos = getAbsolutePos();
+ Size<uint> size = getSize();
+
+ int mx = event.pos.getX();
+ int my = event.pos.getY();
+ int px = pos.getX();
+ int py = pos.getY();
+
+ bool inside = mx >= 0 && my >= 0 &&
+ mx < size.getWidth() && my < size.getHeight();
+
+ if (inside) {
+ colorid_ = (colorid_ + 1) % 3;
+ repaint();
+ }
+ }
+
+ return Widget::onMouse(event);
+}