From c46397551b11cf46bd817f7af0aa94101a688534 Mon Sep 17 00:00:00 2001 From: Ricardo Cruz Date: Mon, 13 Sep 2004 18:51:55 +0000 Subject: [PATCH] Not used anymore. They were moved to lib/gui. Looks like Tobias forgot to remove these. SVN-Revision: 1901 --- src/button.cpp | 325 --------------------------------------------------------- src/button.h | 98 ----------------- 2 files changed, 423 deletions(-) delete mode 100644 src/button.cpp delete mode 100644 src/button.h diff --git a/src/button.cpp b/src/button.cpp deleted file mode 100644 index 2201808fc..000000000 --- a/src/button.cpp +++ /dev/null @@ -1,325 +0,0 @@ -// $Id$ -// -// SuperTux -// Copyright (C) 2004 Tobias Glaesser -// -// 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; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA. - -#include -#include - -#include "setup.h" -#include "screen/screen.h" -#include "screen/drawing_context.h" -#include "globals.h" -#include "button.h" -#include "camera.h" - -Timer Button::popup_timer; - -Button::Button(Surface* button_image, const std::string& ninfo, - SDLKey nshortcut, int x, int y, int mw, int mh) -{ - popup_timer.init(false); - - if(button_image) - icon.push_back(button_image); - - info = ninfo; - - shortcut = nshortcut; - - rect.x = x; - rect.y = y; - rect.w = icon[0]->w; - rect.h = icon[0]->h; - tag = -1; - state = BUTTON_NONE; - show_info = false; -} - -Button::Button(const std::string& imagefilename, const std::string& ninfo, - SDLKey nshortcut, int x, int y, int mw, int mh) -{ - popup_timer.init(false); - - add_icon(imagefilename, mw, mh); - - info = ninfo; - - shortcut = nshortcut; - - rect.x = x; - rect.y = y; - rect.w = icon[0]->w; - rect.h = icon[0]->h; - tag = -1; - state = BUTTON_NONE; - show_info = false; -} - -void Button::add_icon(const std::string& icon_file, int mw, int mh) -{ - char filename[1024]; - - if(!icon_file.empty()) - { - snprintf(filename, 1024, "%s/%s", datadir.c_str(), icon_file.c_str()); - if(!faccessible(filename)) - snprintf(filename, 1024, "%s/images/icons/default-icon.png", datadir.c_str()); - } - else - { - snprintf(filename, 1024, "%s/images/icons/default-icon.png", datadir.c_str()); - } - - if(mw != -1 || mh != -1) - { - icon.push_back(new Surface(filename,true)); - icon.back()->resize(mw,mh); - } - else - icon.push_back(new Surface(filename,true)); - -} - -void Button::draw(DrawingContext& context) -{ - if(state == BUTTON_HOVER) - if(!popup_timer.check()) - show_info = true; - - fillrect(rect.x,rect.y,rect.w,rect.h,75,75,75,200); - fillrect(rect.x+1,rect.y+1,rect.w-2,rect.h-2,175,175,175,200); - - for(std::vector::iterator it = icon.begin(); it != icon.end(); ++it) - context.draw_surface(*it, Vector(rect.x,rect.y), LAYER_GUI); - -/* if(drawable) - { - Camera viewport; - viewport.set_translation(Vector(rect.x, rect.y)); - drawable->draw(viewport, 0); - }*/ - - if(show_info) - { - char str[80]; - int i = -32; - - if(0 > rect.x - white_small_text->get_text_width(info)) - i = rect.w + (int)white_small_text->get_text_width(info); - - if(!info.empty()) - context.draw_text(white_small_text, info, Vector(i + rect.x - white_small_text->get_text_width(info), rect.y), LAYER_GUI); - sprintf(str,"(%s)", SDL_GetKeyName(shortcut)); - context.draw_text(white_small_text, str, Vector(i + rect.x - white_small_text->get_text_width(str), rect.y + white_small_text->get_height()+2), LAYER_GUI); - } - if(state == BUTTON_PRESSED || state == BUTTON_DEACTIVE) - fillrect(rect.x,rect.y,rect.w,rect.h,75,75,75,200); - else if(state == BUTTON_HOVER) - fillrect(rect.x,rect.y,rect.w,rect.h,150,150,150,128); -} - -Button::~Button() -{ - for(std::vector::iterator it = icon.begin(); it != icon.end(); ++it) - delete (*it); - icon.clear(); - // FIXME TODO XXX: commenting this out fixes the leveleditor quit crash - // probably should be deleted somehow, though - //delete drawable; -} - -void Button::event(SDL_Event &event) -{ - if(state == BUTTON_DEACTIVE) - return; - - SDLKey key = event.key.keysym.sym; - - if(event.type == SDL_MOUSEBUTTONDOWN || event.type == SDL_MOUSEBUTTONUP) - { - if(event.button.x < rect.x || event.button.x >= rect.x + rect.w || - event.button.y < rect.y || event.button.y >= rect.y + rect.h) - return; - - if(event.button.button == SDL_BUTTON_RIGHT) - { - show_info = true; - return; - } - else if(event.type == SDL_MOUSEBUTTONUP && event.button.button == 4) /* Mouse wheel up. */ - { - state = BUTTON_WHEELUP; - return; - } - else if(event.type == SDL_MOUSEBUTTONUP && event.button.button == 5) /* Mouse wheel down. */ - { - state = BUTTON_WHEELDOWN; - return; - } - - if(event.button.button == SDL_BUTTON_LEFT) - if(event.type == SDL_MOUSEBUTTONDOWN) - state = BUTTON_PRESSED; - else - state = BUTTON_CLICKED; - } - else if(event.type == SDL_MOUSEMOTION) - { - if(event.motion.x < rect.x || event.motion.x >= rect.x + rect.w || - event.motion.y < rect.y || event.motion.y >= rect.y + rect.h) - { - state = BUTTON_NONE; - } - else - { - state = BUTTON_HOVER; - popup_timer.start(1500); - } - - if(show_info) - { - show_info = false; - } - } - else if(event.type == SDL_KEYDOWN) - { - if(key == shortcut) - state = BUTTON_PRESSED; - } - else if(event.type == SDL_KEYUP) - { - if(state == BUTTON_PRESSED && key == shortcut) - state = BUTTON_CLICKED; - } -} - -int Button::get_state() -{ - int rstate; - switch(state) - { - case BUTTON_CLICKED: - case BUTTON_WHEELUP: - case BUTTON_WHEELDOWN: - rstate = state; - state = BUTTON_NONE; - return rstate; - default: - return state; - } -} - -ButtonPanel::ButtonPanel(int x, int y, int w, int h) -{ - bw = 32; - bh = 32; - rect.x = x; - rect.y = y; - rect.w = w; - rect.h = h; - hidden = false; - hlast = false; -} - -Button* ButtonPanel::event(SDL_Event& event) -{ - if(!hidden) - { - Button* ret = NULL; - for(std::vector::iterator it = item.begin(); it != item.end(); ++it) - { - (*it)->event(event); - if((*it)->state != BUTTON_NONE) - { - if(hlast && (*it)->state == BUTTON_CLICKED) - last_clicked = it; - ret = (*it); - } - } - return ret; - } - else - { - return NULL; - } -} - -ButtonPanel::~ButtonPanel() -{ - for(std::vector::iterator it = item.begin(); it != item.end(); ++it) - { - delete (*it); - } - item.clear(); -} - -void ButtonPanel::draw(DrawingContext& context) -{ - - if(hidden == false) - { - fillrect(rect.x,rect.y,rect.w,rect.h,100,100,100,200); - for(std::vector::iterator it = item.begin(); it != item.end(); ++it) - { - (*it)->draw(context); - if(hlast && it == last_clicked) - { - fillrect((*it)->get_pos().x,(*it)->get_pos().y,(*it)->get_pos().w,(*it)->get_pos().h,100,100,100,128); - } - } - } -} - -void ButtonPanel::additem(Button* pbutton, int tag) -{ - int max_cols, row, col; - - item.push_back(pbutton); - - /* A button_panel takes control of the buttons it contains and arranges them */ - - max_cols = rect.w / bw; - - row = (item.size()-1) / max_cols; - col = (item.size()-1) % max_cols; - - item[item.size()-1]->rect.x = rect.x + col * bw; - item[item.size()-1]->rect.y = rect.y + row * bh; - item[item.size()-1]->tag = tag; - -} - -void ButtonPanel::set_button_size(int w, int h) -{ - bw = w; - bh = h; -} - -Button* ButtonPanel::manipulate_button(int i) -{ - if(int(item.size())-1 < i) - return item[item.size()-1]; - else - return item[i]; -} - -void ButtonPanel::highlight_last(bool b) -{ - hlast = b; -} diff --git a/src/button.h b/src/button.h deleted file mode 100644 index a42254eff..000000000 --- a/src/button.h +++ /dev/null @@ -1,98 +0,0 @@ -// $Id$ -// -// SuperTux -// Copyright (C) 2004 Tobias Glaesser -// -// 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; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -// 02111-1307, USA. - -#ifndef SUPERTUX_BUTTON_H -#define SUPERTUX_BUTTON_H - -#include - -#include "screen/surface.h" -#include "timer.h" - -enum ButtonState { - BUTTON_NONE = -1, - BUTTON_CLICKED, - BUTTON_PRESSED, - BUTTON_HOVER, - BUTTON_WHEELUP, - BUTTON_WHEELDOWN, - BUTTON_DEACTIVE -}; - -class ButtonPanel; - -class Button -{ - friend class ButtonPanel; - -public: - Button(Surface* icon_file, const std::string& info, SDLKey shortcut, - int x, int y, int mw = -1, int h = -1); - Button(const std::string& icon_name, const std::string& info, SDLKey shortcut, - int x, int y, int mw = -1, int h = -1); - - ~Button(); - void event(SDL_Event& event); - void draw(DrawingContext& context); - int get_state(); - void set_active(bool active) { active ? state = BUTTON_NONE : state = BUTTON_DEACTIVE; }; - void add_icon(const std::string& imagefile, int mw, int mh); - SDL_Rect get_pos() { return rect; } - int get_tag(){return tag; } -// void set_drawable(Drawable* newdrawable) -// { drawable = newdrawable; } - -private: - static Timer popup_timer; -// Drawable* drawable; - std::vector icon; - std::string info; - SDLKey shortcut; - SDL_Rect rect; - bool show_info; - ButtonState state; - int tag; -}; - -class ButtonPanel -{ -public: - ButtonPanel(int x, int y, int w, int h); - ~ButtonPanel(); - void draw(DrawingContext& context); - Button* event(SDL_Event &event); - void additem(Button* pbutton, int tag); - Button* button_panel_event(SDL_Event& event); - void set_button_size(int w, int h); - Button* manipulate_button(int i); - void highlight_last(bool b); - void set_last_clicked(unsigned int last) - { if(hlast) { if(item.size() >= last) { last_clicked = item.begin() + last; } } }; - -private: - int bw, bh; - bool hlast; - bool hidden; - SDL_Rect rect; - std::vector item; - std::vector::iterator last_clicked; -}; - -#endif /*SUPERTUX_BUTTON_H*/ -- 2.11.0