From bda7f6c31dfec3a629678a81d3eb075fa47644ad Mon Sep 17 00:00:00 2001 From: David Capello Date: Thu, 21 Apr 2011 21:07:11 -0300 Subject: [PATCH] Add DropDownButton widget. --- data/skins/default/sheet.png | Bin 8715 -> 9046 bytes data/skins/default/skin.xml | 14 ++++-- src/CMakeLists.txt | 1 + src/skin/skin_parts.h | 72 +++++++++++++++++++++++++++++++ src/skin/skin_property.h | 2 + src/skin/skin_theme.cpp | 30 ++++++++++--- src/widgets/drop_down_button.cpp | 62 ++++++++++++++++++++++++++ src/widgets/drop_down_button.h | 45 +++++++++++++++++++ 8 files changed, 216 insertions(+), 10 deletions(-) create mode 100644 src/widgets/drop_down_button.cpp create mode 100644 src/widgets/drop_down_button.h diff --git a/data/skins/default/sheet.png b/data/skins/default/sheet.png index 523cb1116e42f7b6f02ae64c90ad6a531eac462c..c5b0f7e1f9c48e842cb2e6c32bfb7ec7a855671f 100644 GIT binary patch literal 9046 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 V?|Kk^k2=W%prNXbD^q?P@;^a4Pr?8I diff --git a/data/skins/default/skin.xml b/data/skins/default/skin.xml index e737dce3d..b294031d2 100644 --- a/data/skins/default/skin.xml +++ b/data/skins/default/skin.xml @@ -61,9 +61,9 @@ - - - + + + @@ -170,6 +170,14 @@ + + + + + + + + diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index f1e6c91b8..af2a7a5c2 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -283,6 +283,7 @@ add_library(aseprite-library widgets/color_button.cpp widgets/color_selector.cpp widgets/color_sliders.cpp + widgets/drop_down_button.cpp widgets/editor/click.cpp widgets/editor/cursor.cpp widgets/editor/drawing_state.cpp diff --git a/src/skin/skin_parts.h b/src/skin/skin_parts.h index 4b6cd68a4..3954d528f 100644 --- a/src/skin/skin_parts.h +++ b/src/skin/skin_parts.h @@ -468,6 +468,78 @@ enum { PART_UNPINNED, PART_PINNED, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_NW, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_N, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_NE, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_E, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_SE, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_S, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_SW, + PART_DROP_DOWN_BUTTON_LEFT_NORMAL_W, + + PART_DROP_DOWN_BUTTON_LEFT_HOT_NW, + PART_DROP_DOWN_BUTTON_LEFT_HOT_N, + PART_DROP_DOWN_BUTTON_LEFT_HOT_NE, + PART_DROP_DOWN_BUTTON_LEFT_HOT_E, + PART_DROP_DOWN_BUTTON_LEFT_HOT_SE, + PART_DROP_DOWN_BUTTON_LEFT_HOT_S, + PART_DROP_DOWN_BUTTON_LEFT_HOT_SW, + PART_DROP_DOWN_BUTTON_LEFT_HOT_W, + + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_NW, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_N, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_NE, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_E, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_SE, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_S, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_SW, + PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_W, + + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_NW, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_N, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_NE, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_E, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_SE, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_S, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_SW, + PART_DROP_DOWN_BUTTON_LEFT_SELECTED_W, + + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_NW, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_N, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_NE, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_E, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_SE, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_S, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_SW, + PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_W, + + PART_DROP_DOWN_BUTTON_RIGHT_HOT_NW, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_N, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_NE, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_E, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_SE, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_S, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_SW, + PART_DROP_DOWN_BUTTON_RIGHT_HOT_W, + + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_NW, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_N, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_NE, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_E, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_SE, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_S, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_SW, + PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_W, + + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_NW, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_N, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_NE, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_E, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_SE, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_S, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_SW, + PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_W, + PARTS }; diff --git a/src/skin/skin_property.h b/src/skin/skin_property.h index 507b7d2ed..30bb6b192 100644 --- a/src/skin/skin_property.h +++ b/src/skin/skin_property.h @@ -25,6 +25,8 @@ enum LookType { NormalLook, MiniLook, WithoutBordersLook, + LeftButtonLook, + RightButtonLook, }; // Property to show widgets with a special look (e.g.: buttons or sliders with mini-borders) diff --git a/src/skin/skin_theme.cpp b/src/skin/skin_theme.cpp index dea128efb..1749b1844 100644 --- a/src/skin/skin_theme.cpp +++ b/src/skin/skin_theme.cpp @@ -201,6 +201,14 @@ SkinTheme::SkinTheme() sheet_mapping["layer_locked_selected"] = PART_LAYER_LOCKED_SELECTED; sheet_mapping["unpinned"] = PART_UNPINNED; sheet_mapping["pinned"] = PART_PINNED; + sheet_mapping["drop_down_button_left_normal"] = PART_DROP_DOWN_BUTTON_LEFT_NORMAL_NW; + sheet_mapping["drop_down_button_left_hot"] = PART_DROP_DOWN_BUTTON_LEFT_HOT_NW; + sheet_mapping["drop_down_button_left_focused"] = PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_NW; + sheet_mapping["drop_down_button_left_selected"] = PART_DROP_DOWN_BUTTON_LEFT_SELECTED_NW; + sheet_mapping["drop_down_button_right_normal"] = PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_NW; + sheet_mapping["drop_down_button_right_hot"] = PART_DROP_DOWN_BUTTON_RIGHT_HOT_NW; + sheet_mapping["drop_down_button_right_focused"] = PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_NW; + sheet_mapping["drop_down_button_right_selected"] = PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_NW; reload_skin(); } @@ -738,31 +746,39 @@ void SkinTheme::paintButton(PaintEvent& ev) if (skinPropery != NULL) look = skinPropery->getLook(); - // selected + // Selected if (widget->isSelected()) { fg = get_button_selected_text_color(); bg = get_button_selected_face_color(); part_nw = (look == MiniLook ? PART_TOOLBUTTON_NORMAL_NW: - PART_BUTTON_SELECTED_NW); + look == LeftButtonLook ? PART_DROP_DOWN_BUTTON_LEFT_SELECTED_NW: + look == RightButtonLook ? PART_DROP_DOWN_BUTTON_RIGHT_SELECTED_NW: + PART_BUTTON_SELECTED_NW); } - // with mouse + // With mouse else if (widget->isEnabled() && widget->hasMouseOver()) { fg = get_button_hot_text_color(); bg = get_button_hot_face_color(); part_nw = (look == MiniLook ? PART_TOOLBUTTON_HOT_NW: - PART_BUTTON_HOT_NW); + look == LeftButtonLook ? PART_DROP_DOWN_BUTTON_LEFT_HOT_NW: + look == RightButtonLook ? PART_DROP_DOWN_BUTTON_RIGHT_HOT_NW: + PART_BUTTON_HOT_NW); } - // without mouse + // Without mouse else { fg = get_button_normal_text_color(); bg = get_button_normal_face_color(); if (widget->hasFocus()) part_nw = (look == MiniLook ? PART_TOOLBUTTON_HOT_NW: - PART_BUTTON_FOCUSED_NW); + look == LeftButtonLook ? PART_DROP_DOWN_BUTTON_LEFT_FOCUSED_NW: + look == RightButtonLook ? PART_DROP_DOWN_BUTTON_RIGHT_FOCUSED_NW: + PART_BUTTON_FOCUSED_NW); else part_nw = (look == MiniLook ? PART_TOOLBUTTON_NORMAL_NW: - PART_BUTTON_NORMAL_NW); + look == LeftButtonLook ? PART_DROP_DOWN_BUTTON_LEFT_NORMAL_NW: + look == RightButtonLook ? PART_DROP_DOWN_BUTTON_RIGHT_NORMAL_NW: + PART_BUTTON_NORMAL_NW); } // widget position diff --git a/src/widgets/drop_down_button.cpp b/src/widgets/drop_down_button.cpp new file mode 100644 index 000000000..30bf74af4 --- /dev/null +++ b/src/widgets/drop_down_button.cpp @@ -0,0 +1,62 @@ +/* ASE - Allegro Sprite Editor + * Copyright (C) 2001-2011 David Capello + * + * 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 "config.h" + +#include "widgets/drop_down_button.h" + +#include "gui/theme.h" +#include "modules/gui.h" +#include "skin/button_icon_impl.h" +#include "skin/skin_property.h" +#include "skin/skin_theme.h" + +DropDownButton::DropDownButton(const char* text) + : HBox() + , m_button(new Button(text)) + , m_dropDown(new Button("")) +{ + setup_look(m_button, LeftButtonLook); + setup_look(m_dropDown, RightButtonLook); + + m_button->Click.connect(&DropDownButton::onButtonClick, this); + m_dropDown->Click.connect(&DropDownButton::onDropDownButtonClick, this); + + addChild(m_button); + addChild(m_dropDown); + + child_spacing = 0; + + m_dropDown->setIconInterface + (new ButtonIconImpl(static_cast(m_dropDown->getTheme()), + PART_COMBOBOX_ARROW_DOWN, + PART_COMBOBOX_ARROW_DOWN_SELECTED, + PART_COMBOBOX_ARROW_DOWN_DISABLED, + JI_CENTER | JI_MIDDLE)); +} + +void DropDownButton::onButtonClick(Event& ev) +{ + // Fire "Click" signal. + Click(); +} + +void DropDownButton::onDropDownButtonClick(Event& ev) +{ + DropDownClick(); +} diff --git a/src/widgets/drop_down_button.h b/src/widgets/drop_down_button.h new file mode 100644 index 000000000..9de6ddcd3 --- /dev/null +++ b/src/widgets/drop_down_button.h @@ -0,0 +1,45 @@ +/* ASE - Allegro Sprite Editor + * Copyright (C) 2001-2011 David Capello + * + * 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 WIDGETS_DROP_DOWN_BUTTON_H_INCLUDED +#define WIDGETS_DROP_DOWN_BUTTON_H_INCLUDED + +#include "base/signal.h" +#include "gui/box.h" + +class Button; +class Event; + +class DropDownButton : public HBox +{ +public: + DropDownButton(const char* text); + + Signal0 Click; + Signal0 DropDownClick; + +protected: + void onButtonClick(Event& ev); + void onDropDownButtonClick(Event& ev); + +private: + Button* m_button; + Button* m_dropDown; +}; + +#endif