diff options
author | falkTX <falktx@gmail.com> | 2019-01-07 01:12:43 +0100 |
---|---|---|
committer | falkTX <falktx@gmail.com> | 2019-01-07 01:12:43 +0100 |
commit | 7bf7a04f47be9bc3e7d832414d11f4c6af0080b6 (patch) | |
tree | 40a39afe186151abd55de159458fca7338d458d0 /examples/CairoUI/DemoWidgetClickable.cc | |
parent | 204fbeb807d604042c4cd3fcb076df7906521739 (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.cc | 74 |
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); +} |