aboutsummaryrefslogtreecommitdiff
path: root/src/FbWinFrame.cc
diff options
context:
space:
mode:
authorfluxgen <fluxgen>2003-09-12 22:49:14 (GMT)
committerfluxgen <fluxgen>2003-09-12 22:49:14 (GMT)
commita6b3e25679d80c7d703682a85692f75a8f6a8f75 (patch)
treeeae33d9a82323eb0bb2168a756679fb8af4dcc97 /src/FbWinFrame.cc
parent48ea10e22f74e2718578dbf4634f059cbe59fa9f (diff)
downloadfluxbox-a6b3e25679d80c7d703682a85692f75a8f6a8f75.zip
fluxbox-a6b3e25679d80c7d703682a85692f75a8f6a8f75.tar.bz2
optimized rendering
Diffstat (limited to 'src/FbWinFrame.cc')
-rw-r--r--src/FbWinFrame.cc62
1 files changed, 40 insertions, 22 deletions
diff --git a/src/FbWinFrame.cc b/src/FbWinFrame.cc
index 31dfae0..387b159 100644
--- a/src/FbWinFrame.cc
+++ b/src/FbWinFrame.cc
@@ -19,7 +19,7 @@
19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 19// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
20// DEALINGS IN THE SOFTWARE. 20// DEALINGS IN THE SOFTWARE.
21 21
22// $Id: FbWinFrame.cc,v 1.48 2003/09/11 19:55:27 rathnor Exp $ 22// $Id: FbWinFrame.cc,v 1.49 2003/09/12 22:49:14 fluxgen Exp $
23 23
24#include "FbWinFrame.hh" 24#include "FbWinFrame.hh"
25 25
@@ -109,6 +109,7 @@ FbWinFrame::FbWinFrame(FbWinFrameTheme &theme, FbTk::ImageControl &imgctrl,
109*/ 109*/
110 110
111FbWinFrame::~FbWinFrame() { 111FbWinFrame::~FbWinFrame() {
112 m_update_timer.stop();
112 removeEventHandler(); 113 removeEventHandler();
113 removeAllButtons(); 114 removeAllButtons();
114} 115}
@@ -137,7 +138,6 @@ void FbWinFrame::hide() {
137 138
138void FbWinFrame::show() { 139void FbWinFrame::show() {
139 m_visible = true; 140 m_visible = true;
140 reconfigure();
141 m_window.showSubwindows(); 141 m_window.showSubwindows();
142 m_window.show(); 142 m_window.show();
143} 143}
@@ -221,8 +221,17 @@ void FbWinFrame::setFocus(bool newvalue) {
221 if (m_focused == newvalue) // no need to change focus 221 if (m_focused == newvalue) // no need to change focus
222 return; 222 return;
223 223
224
225
226 if (m_focused && !newvalue && currentLabel()) {
227 renderButtonUnfocus(*m_current_label);
228 } else if (!m_focused && newvalue && currentLabel()) {
229 renderButtonFocus(*m_current_label);
230 }
231
224 m_focused = newvalue; 232 m_focused = newvalue;
225 reconfigure(); // reconfigure rendering for new focus value 233 renderButtons();
234 renderHandles();
226} 235}
227 236
228void FbWinFrame::setDoubleClickTime(unsigned int time) { 237void FbWinFrame::setDoubleClickTime(unsigned int time) {
@@ -231,7 +240,6 @@ void FbWinFrame::setDoubleClickTime(unsigned int time) {
231 240
232void FbWinFrame::setBevel(int bevel) { 241void FbWinFrame::setBevel(int bevel) {
233 m_bevel = bevel; 242 m_bevel = bevel;
234 reconfigure();
235} 243}
236 244
237void FbWinFrame::addLeftButton(FbTk::Button *btn) { 245void FbWinFrame::addLeftButton(FbTk::Button *btn) {
@@ -284,13 +292,16 @@ void FbWinFrame::removeLabelButton(FbTk::TextButton &btn) {
284 return; 292 return;
285 293
286 m_labelbuttons.erase(erase_it); 294 m_labelbuttons.erase(erase_it);
295
296 if (*erase_it == m_current_label)
297 m_current_label = 0;
287} 298}
288 299
289 300
290void FbWinFrame::moveLabelButtonLeft(const FbTk::TextButton &btn) { 301void FbWinFrame::moveLabelButtonLeft(const FbTk::TextButton &btn) {
291 LabelList::iterator it = find(m_labelbuttons.begin(), 302 LabelList::iterator it = find(m_labelbuttons.begin(),
292 m_labelbuttons.end(), 303 m_labelbuttons.end(),
293 &btn); 304 &btn);
294 // make sure we found it and we're not at the begining 305 // make sure we found it and we're not at the begining
295 if (it == m_labelbuttons.end() || it == m_labelbuttons.begin()) 306 if (it == m_labelbuttons.end() || it == m_labelbuttons.begin())
296 return; 307 return;
@@ -333,9 +344,7 @@ void FbWinFrame::setLabelButtonFocus(FbTk::TextButton &btn) {
333 344
334 345
335 // render label buttons 346 // render label buttons
336 347 if (currentLabel() != 0)
337
338 if (m_current_label != 0)
339 renderButtonUnfocus(*m_current_label); 348 renderButtonUnfocus(*m_current_label);
340 349
341 m_current_label = *it; // current focused button 350 m_current_label = *it; // current focused button
@@ -528,9 +537,10 @@ void FbWinFrame::buttonReleaseEvent(XButtonEvent &event) {
528} 537}
529 538
530void FbWinFrame::exposeEvent(XExposeEvent &event) { 539void FbWinFrame::exposeEvent(XExposeEvent &event) {
531 if (m_label == event.window) 540 if (m_label == event.window) {
532 redrawTitle(); 541 m_label.clearArea(event.x, event.y, event.width, event.height);
533 else if (m_handle == event.window) { 542 m_label.updateTransparent(event.x, event.y, event.width, event.height);
543 } else if (m_handle == event.window) {
534 m_handle.clearArea(event.x, event.y, event.width, event.height); 544 m_handle.clearArea(event.x, event.y, event.width, event.height);
535 m_handle.updateTransparent(); 545 m_handle.updateTransparent();
536 } else if (m_grip_left == event.window) { 546 } else if (m_grip_left == event.window) {
@@ -570,6 +580,7 @@ void FbWinFrame::exposeEvent(XExposeEvent &event) {
570 if (it != m_buttons_right.end()) 580 if (it != m_buttons_right.end())
571 (*it)->exposeEvent(event); 581 (*it)->exposeEvent(event);
572 } 582 }
583
573} 584}
574 585
575void FbWinFrame::handleEvent(XEvent &event) { 586void FbWinFrame::handleEvent(XEvent &event) {
@@ -582,6 +593,8 @@ void FbWinFrame::configureNotifyEvent(XConfigureEvent &event) {
582} 593}
583 594
584void FbWinFrame::reconfigure() { 595void FbWinFrame::reconfigure() {
596 if (m_labelbuttons.size() == 0)
597 return;
585 598
586 // align titlebar and render it 599 // align titlebar and render it
587 if (m_use_titlebar) 600 if (m_use_titlebar)
@@ -660,14 +673,13 @@ unsigned int FbWinFrame::buttonHeight() const {
660 return m_titlebar.height() - m_bevel*2; 673 return m_titlebar.height() - m_bevel*2;
661} 674}
662 675
663
664//--------------------- private area 676//--------------------- private area
665 677
666/** 678/**
667 aligns and redraws title 679 aligns and redraws title
668*/ 680*/
669void FbWinFrame::redrawTitle() { 681void FbWinFrame::redrawTitle() {
670 if (m_labelbuttons.size() == 0 || !m_visible) 682 if (m_labelbuttons.size() == 0)
671 return; 683 return;
672 684
673 int button_width = label().width()/m_labelbuttons.size(); 685 int button_width = label().width()/m_labelbuttons.size();
@@ -687,7 +699,7 @@ void FbWinFrame::redrawTitle() {
687 button_width, 699 button_width,
688 label().height() + border_width); 700 label().height() + border_width);
689 (*btn_it)->clear(); 701 (*btn_it)->clear();
690 (*btn_it)->updateTransparent(); 702 (*btn_it)->updateTransparent();
691 } 703 }
692 m_titlebar.clear(); 704 m_titlebar.clear();
693 m_titlebar.updateTransparent(); 705 m_titlebar.updateTransparent();
@@ -696,7 +708,7 @@ void FbWinFrame::redrawTitle() {
696} 708}
697 709
698void FbWinFrame::redrawTitlebar() { 710void FbWinFrame::redrawTitlebar() {
699 if (!m_use_titlebar || !m_visible) 711 if (!m_use_titlebar)
700 return; 712 return;
701 713
702 redrawTitle(); 714 redrawTitle();
@@ -754,7 +766,7 @@ void FbWinFrame::reconfigureTitlebar() {
754} 766}
755 767
756void FbWinFrame::renderTitlebar() { 768void FbWinFrame::renderTitlebar() {
757 if (!m_use_titlebar || !m_visible) 769 if (!m_use_titlebar)
758 return; 770 return;
759 771
760 // render pixmaps 772 // render pixmaps
@@ -918,7 +930,7 @@ void FbWinFrame::init() {
918 // Note: we don't show clientarea yet 930 // Note: we don't show clientarea yet
919 931
920 setEventHandler(*this); 932 setEventHandler(*this);
921 reconfigure(); 933 // reconfigure();
922} 934}
923 935
924/** 936/**
@@ -1063,9 +1075,12 @@ void FbWinFrame::renderButtonFocus(FbTk::TextButton &button) {
1063 button.setBorderWidth(1); 1075 button.setBorderWidth(1);
1064 button.setAlpha(theme().alpha()); 1076 button.setAlpha(theme().alpha());
1065 1077
1066 if (m_label_focused_pm != 0) 1078 if (m_label_focused_pm != 0) {
1079 // already set
1080 if (button.backgroundPixmap() == m_label_focused_pm)
1081 return;
1067 button.setBackgroundPixmap(m_label_focused_pm); 1082 button.setBackgroundPixmap(m_label_focused_pm);
1068 else 1083 } else
1069 button.setBackgroundColor(m_label_focused_color); 1084 button.setBackgroundColor(m_label_focused_color);
1070 1085
1071 button.clear(); 1086 button.clear();
@@ -1078,9 +1093,12 @@ void FbWinFrame::renderButtonUnfocus(FbTk::TextButton &button) {
1078 button.setBorderWidth(1); 1093 button.setBorderWidth(1);
1079 button.setAlpha(theme().alpha()); 1094 button.setAlpha(theme().alpha());
1080 1095
1081 if (m_label_unfocused_pm != 0) 1096 if (m_label_unfocused_pm != 0) {
1097 // already set
1098 if (button.backgroundPixmap() == m_label_unfocused_pm)
1099 return;
1082 button.setBackgroundPixmap(m_label_unfocused_pm); 1100 button.setBackgroundPixmap(m_label_unfocused_pm);
1083 else 1101 } else
1084 button.setBackgroundColor(m_label_unfocused_color); 1102 button.setBackgroundColor(m_label_unfocused_color);
1085 1103
1086 button.clear(); 1104 button.clear();