From 884928264a5cc52c6f255478cdfa4b7d8354f0c6 Mon Sep 17 00:00:00 2001 From: fluxgen Date: Wed, 13 Aug 2003 16:36:37 +0000 Subject: fixed rendering problem on focused textbutton --- src/FbWinFrame.cc | 67 ++++++++++++++++++++++++++++++++++++++++--------------- src/FbWinFrame.hh | 20 ++++++++++------- 2 files changed, 61 insertions(+), 26 deletions(-) diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc index 9b2a9e8..c65f0b6 100644 --- a/src/FbWinFrame.cc +++ b/src/FbWinFrame.cc @@ -19,7 +19,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbWinFrame.cc,v 1.35 2003/08/13 09:34:40 fluxgen Exp $ +// $Id: FbWinFrame.cc,v 1.36 2003/08/13 16:36:37 fluxgen Exp $ #include "FbWinFrame.hh" #include "ImageControl.hh" @@ -271,7 +271,7 @@ void FbWinFrame::removeAllButtons() { } } -void FbWinFrame::addLabelButton(FbTk::Button &btn) { +void FbWinFrame::addLabelButton(TextButton &btn) { LabelList::iterator found_it = find(m_labelbuttons.begin(), m_labelbuttons.end(), &btn); @@ -282,7 +282,7 @@ void FbWinFrame::addLabelButton(FbTk::Button &btn) { m_labelbuttons.push_back(&btn); } -void FbWinFrame::removeLabelButton(FbTk::Button &btn) { +void FbWinFrame::removeLabelButton(TextButton &btn) { LabelList::iterator erase_it = remove(m_labelbuttons.begin(), m_labelbuttons.end(), &btn); @@ -293,7 +293,7 @@ void FbWinFrame::removeLabelButton(FbTk::Button &btn) { } -void FbWinFrame::moveLabelButtonLeft(const FbTk::Button &btn) { +void FbWinFrame::moveLabelButtonLeft(const TextButton &btn) { LabelList::iterator it = find(m_labelbuttons.begin(), m_labelbuttons.end(), &btn); @@ -303,7 +303,7 @@ void FbWinFrame::moveLabelButtonLeft(const FbTk::Button &btn) { LabelList::iterator new_pos = it; new_pos--; - FbTk::Button *item = *it; + TextButton *item = *it; // remove from list m_labelbuttons.erase(it); // insert on the new place @@ -312,7 +312,7 @@ void FbWinFrame::moveLabelButtonLeft(const FbTk::Button &btn) { redrawTitle(); } -void FbWinFrame::moveLabelButtonRight(const FbTk::Button &btn) { +void FbWinFrame::moveLabelButtonRight(const TextButton &btn) { LabelList::iterator it = find(m_labelbuttons.begin(), m_labelbuttons.end(), &btn); @@ -320,7 +320,7 @@ void FbWinFrame::moveLabelButtonRight(const FbTk::Button &btn) { if (it == m_labelbuttons.end() || *it == m_labelbuttons.back()) return; - FbTk::Button *item = *it; + TextButton *item = *it; // remove from list LabelList::iterator new_pos = m_labelbuttons.erase(it); new_pos++; @@ -330,15 +330,23 @@ void FbWinFrame::moveLabelButtonRight(const FbTk::Button &btn) { redrawTitle(); } -void FbWinFrame::setLabelButtonFocus(FbTk::Button &btn) { +void FbWinFrame::setLabelButtonFocus(TextButton &btn) { LabelList::iterator it = find(m_labelbuttons.begin(), m_labelbuttons.end(), &btn); if (it == m_labelbuttons.end()) return; + + // render label buttons + + + if (m_current_label != 0) + renderButtonUnfocus(*m_current_label); + m_current_label = *it; // current focused button - renderLabelButtons(); + + renderButtonFocus(*m_current_label); } void FbWinFrame::setClientWindow(FbTk::FbWindow &win) { @@ -986,16 +994,11 @@ void FbWinFrame::renderLabelButtons() { LabelList::iterator btn_it = m_labelbuttons.begin(); LabelList::iterator btn_it_end = m_labelbuttons.end(); for (; btn_it != btn_it_end; ++btn_it) { - - (*btn_it)->setGC(theme().labelTextFocusGC()); - (*btn_it)->setBorderWidth(1); - (*btn_it)->setAlpha(theme().alpha()); - - if (m_label_unfocused_pm != 0) - (*btn_it)->setBackgroundPixmap(m_label_unfocused_pm); + if (*btn_it == m_current_label) + renderButtonFocus(**btn_it); else - (*btn_it)->setBackgroundColor(m_label_unfocused_color); - + renderButtonUnfocus(**btn_it); + } if (m_current_label != 0) { @@ -1028,3 +1031,31 @@ void FbWinFrame::setBorderWidth(unsigned int borderW) { resize(width(), height() + bw_changes); } +void FbWinFrame::renderButtonFocus(TextButton &button) { + + button.setGC(theme().labelTextFocusGC()); + button.setJustify(theme().justify()); + button.setBorderWidth(1); + button.setAlpha(theme().alpha()); + + if (m_label_focused_pm != 0) + button.setBackgroundPixmap(m_label_focused_pm); + else + button.setBackgroundColor(m_label_focused_color); + + button.clear(); +} + +void FbWinFrame::renderButtonUnfocus(TextButton &button) { + button.setGC(theme().labelTextUnfocusGC()); + button.setJustify(theme().justify()); + button.setBorderWidth(1); + button.setAlpha(theme().alpha()); + + if (m_label_unfocused_pm != 0) + button.setBackgroundPixmap(m_label_unfocused_pm); + else + button.setBackgroundColor(m_label_unfocused_color); + + button.clear(); +} diff --git a/src/FbWinFrame.hh b/src/FbWinFrame.hh index 1b7b197..ce3fa2a 100644 --- a/src/FbWinFrame.hh +++ b/src/FbWinFrame.hh @@ -19,7 +19,7 @@ // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER // DEALINGS IN THE SOFTWARE. -// $Id: FbWinFrame.hh,v 1.11 2003/07/28 12:11:57 fluxgen Exp $ +// $Id: FbWinFrame.hh,v 1.12 2003/08/13 16:36:37 fluxgen Exp $ #ifndef FBWINFRAME_HH #define FBWINFRAME_HH @@ -38,6 +38,8 @@ class Shape; class FbWinFrameTheme; +class TextButton; + namespace FbTk { class ImageControl; class Command; @@ -91,15 +93,15 @@ public: /// remove all buttons from titlebar void removeAllButtons(); /// adds a button to label window - void addLabelButton(FbTk::Button &btn); + void addLabelButton(TextButton &btn); /// removes a specific button from label window - void removeLabelButton(FbTk::Button &btn); + void removeLabelButton(TextButton &btn); /// move label button to the left - void moveLabelButtonLeft(const FbTk::Button &btn); + void moveLabelButtonLeft(const TextButton &btn); /// move label button to the right - void moveLabelButtonRight(const FbTk::Button &btn); + void moveLabelButtonRight(const TextButton &btn); /// which button is to be rendered focused - void setLabelButtonFocus(FbTk::Button &btn); + void setLabelButtonFocus(TextButton &btn); /// attach a client window for client area void setClientWindow(Window win); /// same as above but with FbWindow @@ -180,6 +182,8 @@ private: void renderTitlebar(); void renderHandles(); void renderButtons(); + void renderButtonFocus(TextButton &button); + void renderButtonUnfocus(TextButton &button); void renderLabel(); /// renders to pixmap or sets color void render(const FbTk::Texture &tex, FbTk::Color &col, Pixmap &pm, @@ -213,9 +217,9 @@ private: typedef std::vector ButtonList; ButtonList m_buttons_left, ///< buttons to the left m_buttons_right; ///< buttons to the right - typedef std::list LabelList; + typedef std::list LabelList; LabelList m_labelbuttons; ///< holds label buttons inside label window - FbTk::Button *m_current_label; ///< which client button is focused at the moment + TextButton *m_current_label; ///< which client button is focused at the moment std::string m_titletext; ///< text to be displayed int m_label int m_bevel; ///< bevel between titlebar items and titlebar bool m_use_titlebar; ///< if we should use titlebar -- cgit v0.11.2