From 3d8a063bd02a6c42414e202cce81be27415d1abb Mon Sep 17 00:00:00 2001 From: fluxgen Date: Fri, 13 Dec 2002 20:21:12 +0000 Subject: arrowbutton --- src/ArrowButton.cc | 95 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/ArrowButton.hh | 49 ++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 src/ArrowButton.cc create mode 100644 src/ArrowButton.hh diff --git a/src/ArrowButton.cc b/src/ArrowButton.cc new file mode 100644 index 0000000..dfcc05d --- /dev/null +++ b/src/ArrowButton.cc @@ -0,0 +1,95 @@ +// ArrowButton.cc for Fluxbox Window Manager +// Copyright (c) 2002 Henrik Kinnunen (fluxgen at users.sourceforge.net) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// $Id: ArrowButton.cc,v 1.1 2002/12/13 20:21:09 fluxgen Exp $ + +#include "ArrowButton.hh" + +#include "App.hh" + +ArrowButton::ArrowButton(ArrowButton::Type arrow_type, + FbTk::FbWindow &parent, + int x, int y, + unsigned int width, unsigned int height): + FbTk::Button(parent, x, y, width, height), + m_arrow_type(arrow_type) { +} + +ArrowButton::ArrowButton(ArrowButton::Type arrow_type, + int screen_num, + int x, int y, + unsigned int width, unsigned int height): + FbTk::Button(screen_num, x, y, width, height), + m_arrow_type(arrow_type) { + +} + +void ArrowButton::clear() { + FbTk::Button::clear(); + drawArrow(); +} + +void ArrowButton::exposeEvent(XExposeEvent &event) { + FbTk::Button::exposeEvent(event); + drawArrow(); +} + +void ArrowButton::buttonPressEvent(XButtonEvent &event) { + FbTk::Button::buttonPressEvent(event); + drawArrow(); +} + +void ArrowButton::buttonReleaseEvent(XButtonEvent &event) { + FbTk::Button::buttonReleaseEvent(event); + drawArrow(); +} + +/** + redraws the arrow button +*/ +void ArrowButton::drawArrow() { + XPoint pts[3]; + unsigned int w = width() / 2; + unsigned int h = height() / 2; + switch (m_arrow_type) { + case LEFT: + pts[0].x = w - 2; pts[0].y = h; + pts[1].x = 4; pts[1].y = 2; + pts[2].x = 0; pts[2].y = -4; + break; + case RIGHT: + pts[0].x = w - 2; pts[0].y = h - 2; + pts[1].x = 4; pts[1].y = 2; + pts[2].x = -4; pts[2].y = 2; + break; + case UP: // TODO + break; + case DOWN: // TODO + break; + } + + if (gc() != 0) { + Display *disp = FbTk::App::instance()->display(); + XFillPolygon(disp, window().window(), gc(), + pts, 3, Convex, CoordModePrevious); + } +} + diff --git a/src/ArrowButton.hh b/src/ArrowButton.hh new file mode 100644 index 0000000..13ac102 --- /dev/null +++ b/src/ArrowButton.hh @@ -0,0 +1,49 @@ +// ArrowButton.hh for Fluxbox Window Manager +// Copyright (c) 2002 Henrik Kinnunen (fluxgen at users.sourceforge.net) +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the "Software"), +// to deal in the Software without restriction, including without limitation +// the rights to use, copy, modify, merge, publish, distribute, sublicense, +// and/or sell copies of the Software, and to permit persons to whom the +// Software is furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +// DEALINGS IN THE SOFTWARE. + +// $Id: ArrowButton.hh,v 1.1 2002/12/13 20:21:12 fluxgen Exp $ + +#ifndef ARROWBUTTON_HH +#define ARROWBUTTON_HH + +#include "Button.hh" +/// Displays a arrow on a button +class ArrowButton: public FbTk::Button { +public: + enum Type { LEFT, RIGHT, UP, DOWN}; + + ArrowButton(Type arrow_type, FbTk::FbWindow &parent, + int x, int y, + unsigned int width, unsigned int height); + ArrowButton(Type arrow_type, int screen_num, + int x, int y, + unsigned int width, unsigned int height); + void clear(); + void buttonReleaseEvent(XButtonEvent &event); + void buttonPressEvent(XButtonEvent &event); + void exposeEvent(XExposeEvent &event); + +private: + void drawArrow(); + Type m_arrow_type; +}; + +#endif // ARROWBUTTON_HH -- cgit v0.11.2