/* * UltraStar Deluxe - Karaoke Game * * UltraStar Deluxe is the legal property of its developers, whose names * are too numerous to list here. Please refer to the COPYRIGHT * file distributed with this source distribution. * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, * Boston, MA 02110-1301, USA. * */ #ifndef DRAWABLE_CONTROL_HPP #define DRAWABLE_CONTROL_HPP #include #include #include #include "drawable.hpp" #include "control.hpp" #include "utils/point.hpp" #include "utils/dimension.hpp" #include "background.hpp" namespace usdx { class Container; class DrawableControl : public Drawable, public Control { private: static log4cpp::Category& log; Point position; Dimension size; bool clipping_required; Background* background; mutable boost::shared_mutex position_mutex; mutable boost::shared_mutex size_mutex; mutable boost::shared_mutex clipping_required_mutex; mutable boost::shared_mutex background_mutex; protected: Container* parent; class ContainerHelper { private: DrawableControl* self; public: ContainerHelper(DrawableControl*); virtual void add(Container*) const; }; DrawableControl(Container*, const ContainerHelper&); bool get_clipping_required(void) const; void set_clipping_required(const bool); virtual void draw(void); public: DrawableControl(Container*); virtual ~DrawableControl(); void repaint(void); virtual void set_position(const Point& position); virtual void set_position(int left, int top); const Point& get_position(void) const; int get_left(void) const; int get_top(void) const; virtual void set_size(const Dimension& size); virtual void set_size(int width, int height); const Dimension& get_size(void) const; int get_width(void) const; int get_height(void) const; void remove_parent(void); void set_background(Background*); const Background* get_background(void) const; }; }; #endif