diff options
author | fluxgen <fluxgen> | 2006-10-16 18:49:33 (GMT) |
---|---|---|
committer | fluxgen <fluxgen> | 2006-10-16 18:49:33 (GMT) |
commit | a3b30e1c6356c38b6ce0f9cc8f26ddc93814183c (patch) | |
tree | 9289a9c0d416423fe5eba71d9da5863ccaeb854a | |
parent | 9f4baeb0fc7107f3d0a35dccd6027cecb5e5b72d (diff) | |
download | fluxbox_paul-a3b30e1c6356c38b6ce0f9cc8f26ddc93814183c.zip fluxbox_paul-a3b30e1c6356c38b6ce0f9cc8f26ddc93814183c.tar.bz2 |
some cleaning, using CachedPixmap
-rw-r--r-- | src/IconbarTool.cc | 93 | ||||
-rw-r--r-- | src/IconbarTool.hh | 9 |
2 files changed, 39 insertions, 63 deletions
diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc index 413aebf..d7d45cd 100644 --- a/src/IconbarTool.cc +++ b/src/IconbarTool.cc | |||
@@ -333,11 +333,11 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr | |||
333 | m_screen(screen), | 333 | m_screen(screen), |
334 | m_icon_container(parent), | 334 | m_icon_container(parent), |
335 | m_theme(theme), | 335 | m_theme(theme), |
336 | m_focused_pm(0), | 336 | m_focused_pm( screen.imageControl() ), |
337 | m_unfocused_pm(0), | 337 | m_unfocused_pm( screen.imageControl() ), |
338 | m_focused_err_pm(0), | 338 | m_focused_err_pm( screen.imageControl() ), |
339 | m_unfocused_err_pm(0), | 339 | m_unfocused_err_pm( screen.imageControl() ), |
340 | m_empty_pm(0), | 340 | m_empty_pm( screen.imageControl() ), |
341 | m_rc_mode(screen.resourceManager(), WORKSPACE, | 341 | m_rc_mode(screen.resourceManager(), WORKSPACE, |
342 | screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"), | 342 | screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"), |
343 | m_wheel_mode(screen.resourceManager(), OFF, | 343 | m_wheel_mode(screen.resourceManager(), OFF, |
@@ -393,19 +393,6 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr | |||
393 | 393 | ||
394 | IconbarTool::~IconbarTool() { | 394 | IconbarTool::~IconbarTool() { |
395 | deleteIcons(); | 395 | deleteIcons(); |
396 | |||
397 | // remove cached images | ||
398 | if (m_focused_pm) | ||
399 | m_screen.imageControl().removeImage(m_focused_pm); | ||
400 | if (m_unfocused_pm) | ||
401 | m_screen.imageControl().removeImage(m_unfocused_pm); | ||
402 | if (m_focused_err_pm) | ||
403 | m_screen.imageControl().removeImage(m_focused_err_pm); | ||
404 | if (m_unfocused_err_pm) | ||
405 | m_screen.imageControl().removeImage(m_unfocused_err_pm); | ||
406 | if (m_empty_pm) | ||
407 | m_screen.imageControl().removeImage(m_empty_pm); | ||
408 | |||
409 | } | 396 | } |
410 | 397 | ||
411 | void IconbarTool::move(int x, int y) { | 398 | void IconbarTool::move(int x, int y) { |
@@ -547,13 +534,14 @@ void IconbarTool::update(FbTk::Subject *subj) { | |||
547 | 534 | ||
548 | bool remove_all = false; // if we should readd all windows | 535 | bool remove_all = false; // if we should readd all windows |
549 | 536 | ||
550 | if (subj != 0 && typeid(*subj) == typeid(BScreen::ScreenSubject) && mode() != ALLWINDOWS) { | 537 | if (subj != 0 && typeid(*subj) == typeid(BScreen::ScreenSubject) && |
538 | mode() != ALLWINDOWS && mode() != ICONS ) { | ||
551 | BScreen::ScreenSubject *screen_subj = static_cast<BScreen::ScreenSubject *>(subj); | 539 | BScreen::ScreenSubject *screen_subj = static_cast<BScreen::ScreenSubject *>(subj); |
552 | // current workspace sig | 540 | // current workspace sig |
553 | if (&m_screen.currentWorkspaceSig() == screen_subj && | 541 | if (&m_screen.currentWorkspaceSig() == screen_subj ) { |
554 | mode() != ALLWINDOWS && mode() != ICONS) { | ||
555 | remove_all = true; // remove and readd all windows | 542 | remove_all = true; // remove and readd all windows |
556 | } | 543 | } |
544 | |||
557 | } | 545 | } |
558 | 546 | ||
559 | // lock graphic update | 547 | // lock graphic update |
@@ -621,9 +609,7 @@ void IconbarTool::renderTheme() { | |||
621 | // update button sizes before we get max width per client! | 609 | // update button sizes before we get max width per client! |
622 | updateSizing(); | 610 | updateSizing(); |
623 | 611 | ||
624 | Pixmap tmp = m_focused_pm; | 612 | unsigned int icon_width = 0, icon_height = 0; |
625 | Pixmap err_tmp = m_focused_err_pm; | ||
626 | unsigned int icon_width, icon_height; | ||
627 | unsigned int icon_width_off=0, icon_height_off=0; | 613 | unsigned int icon_width_off=0, icon_height_off=0; |
628 | 614 | ||
629 | if (orientation() == FbTk::ROT0 || orientation() == FbTk::ROT180) { | 615 | if (orientation() == FbTk::ROT0 || orientation() == FbTk::ROT180) { |
@@ -637,56 +623,42 @@ void IconbarTool::renderTheme() { | |||
637 | } | 623 | } |
638 | 624 | ||
639 | if (!m_theme.focusedTexture().usePixmap()) { | 625 | if (!m_theme.focusedTexture().usePixmap()) { |
640 | m_focused_pm = 0; | 626 | m_focused_pm.reset( 0 ); |
641 | m_focused_err_pm = 0; | 627 | m_focused_err_pm.reset( 0 ); |
642 | } else { | 628 | } else { |
643 | m_focused_pm = m_screen.imageControl().renderImage(icon_width, | 629 | m_focused_pm.reset( m_screen.imageControl(). |
644 | icon_height, | 630 | renderImage(icon_width, icon_height, |
645 | m_theme.focusedTexture(), orientation()); | 631 | m_theme.focusedTexture(), orientation()) ); |
646 | m_focused_err_pm = m_screen.imageControl().renderImage(icon_width+icon_width_off, | 632 | m_focused_err_pm.reset( m_screen.imageControl(). |
647 | icon_height+icon_height_off, | 633 | renderImage(icon_width + icon_width_off, |
648 | m_theme.focusedTexture(), orientation()); | 634 | icon_height + icon_height_off, |
635 | m_theme.focusedTexture(), orientation()) ); | ||
649 | } | 636 | } |
650 | 637 | ||
651 | if (tmp) | ||
652 | m_screen.imageControl().removeImage(tmp); | ||
653 | if (err_tmp) | ||
654 | m_screen.imageControl().removeImage(err_tmp); | ||
655 | |||
656 | tmp = m_unfocused_pm; | ||
657 | err_tmp = m_unfocused_err_pm; | ||
658 | |||
659 | if (!m_theme.unfocusedTexture().usePixmap()) { | 638 | if (!m_theme.unfocusedTexture().usePixmap()) { |
660 | m_unfocused_pm = 0; | 639 | m_unfocused_pm.reset( 0 ); |
661 | m_unfocused_err_pm = 0; | 640 | m_unfocused_err_pm.reset( 0 ); |
662 | } else { | 641 | } else { |
663 | m_unfocused_pm = m_screen.imageControl().renderImage(icon_width, | 642 | m_unfocused_pm.reset( m_screen.imageControl(). |
664 | icon_height, | 643 | renderImage(icon_width, icon_height, |
665 | m_theme.unfocusedTexture(), orientation()); | 644 | m_theme.unfocusedTexture(), orientation()) ); |
666 | m_unfocused_err_pm = m_screen.imageControl().renderImage(icon_width+icon_width_off, | 645 | m_unfocused_err_pm.reset( m_screen.imageControl(). |
667 | icon_height+icon_height_off, | 646 | renderImage(icon_width+icon_width_off, |
668 | m_theme.unfocusedTexture(), orientation()); | 647 | icon_height+icon_height_off, |
648 | m_theme.unfocusedTexture(), orientation()) ); | ||
669 | } | 649 | } |
670 | if (tmp) | ||
671 | m_screen.imageControl().removeImage(tmp); | ||
672 | if (err_tmp) | ||
673 | m_screen.imageControl().removeImage(err_tmp); | ||
674 | 650 | ||
675 | // if we dont have any icons then we should render empty texture | 651 | // if we dont have any icons then we should render empty texture |
676 | tmp = m_empty_pm; | ||
677 | if (!m_theme.emptyTexture().usePixmap()) { | 652 | if (!m_theme.emptyTexture().usePixmap()) { |
678 | m_empty_pm = 0; | 653 | m_empty_pm.reset( 0 ); |
679 | m_icon_container.setBackgroundColor(m_theme.emptyTexture().color()); | 654 | m_icon_container.setBackgroundColor(m_theme.emptyTexture().color()); |
680 | } else { | 655 | } else { |
681 | m_empty_pm = m_screen.imageControl().renderImage(m_icon_container.width(), | 656 | m_empty_pm.reset( m_screen.imageControl(). |
682 | m_icon_container.height(), | 657 | renderImage(m_icon_container.width(), m_icon_container.height(), |
683 | m_theme.emptyTexture(), orientation()); | 658 | m_theme.emptyTexture(), orientation()) ); |
684 | m_icon_container.setBackgroundPixmap(m_empty_pm); | 659 | m_icon_container.setBackgroundPixmap(m_empty_pm); |
685 | } | 660 | } |
686 | 661 | ||
687 | if (tmp) | ||
688 | m_screen.imageControl().removeImage(tmp); | ||
689 | |||
690 | // set to zero so its consistent and not ugly | 662 | // set to zero so its consistent and not ugly |
691 | m_icon_container.setBorderWidth(m_theme.border().width()); | 663 | m_icon_container.setBorderWidth(m_theme.border().width()); |
692 | m_icon_container.setBorderColor(m_theme.border().color()); | 664 | m_icon_container.setBorderColor(m_theme.border().color()); |
@@ -839,6 +811,7 @@ void IconbarTool::updateList() { | |||
839 | !checkDuplicate(*(*it)->fbwindow())) | 811 | !checkDuplicate(*(*it)->fbwindow())) |
840 | addWindow(*(*it)->fbwindow()); | 812 | addWindow(*(*it)->fbwindow()); |
841 | } | 813 | } |
814 | |||
842 | renderTheme(); | 815 | renderTheme(); |
843 | } | 816 | } |
844 | 817 | ||
diff --git a/src/IconbarTool.hh b/src/IconbarTool.hh index 3d7848d..3512f78 100644 --- a/src/IconbarTool.hh +++ b/src/IconbarTool.hh | |||
@@ -29,6 +29,7 @@ | |||
29 | #include "Container.hh" | 29 | #include "Container.hh" |
30 | #include "FbMenu.hh" | 30 | #include "FbMenu.hh" |
31 | 31 | ||
32 | #include "FbTk/CachedPixmap.hh" | ||
32 | #include "FbTk/Observer.hh" | 33 | #include "FbTk/Observer.hh" |
33 | #include "FbTk/Resource.hh" | 34 | #include "FbTk/Resource.hh" |
34 | #include "FbTk/Menu.hh" | 35 | #include "FbTk/Menu.hh" |
@@ -88,7 +89,9 @@ public: | |||
88 | 89 | ||
89 | void setOrientation(FbTk::Orientation orient); | 90 | void setOrientation(FbTk::Orientation orient); |
90 | Container::Alignment alignment() const { return m_icon_container.alignment(); } | 91 | Container::Alignment alignment() const { return m_icon_container.alignment(); } |
92 | |||
91 | private: | 93 | private: |
94 | |||
92 | /// @return button associated with window | 95 | /// @return button associated with window |
93 | IconButton *findButton(FluxboxWindow &win); | 96 | IconButton *findButton(FluxboxWindow &win); |
94 | 97 | ||
@@ -122,10 +125,10 @@ private: | |||
122 | Container m_icon_container; | 125 | Container m_icon_container; |
123 | IconbarTheme &m_theme; | 126 | IconbarTheme &m_theme; |
124 | // cached pixmaps | 127 | // cached pixmaps |
125 | Pixmap m_focused_pm, m_unfocused_pm; | 128 | FbTk::CachedPixmap m_focused_pm, m_unfocused_pm; |
126 | // some are a fraction bigger due to rounding | 129 | // some are a fraction bigger due to rounding |
127 | Pixmap m_focused_err_pm, m_unfocused_err_pm; | 130 | FbTk::CachedPixmap m_focused_err_pm, m_unfocused_err_pm; |
128 | Pixmap m_empty_pm; ///< pixmap for empty container | 131 | FbTk::CachedPixmap m_empty_pm; ///< pixmap for empty container |
129 | 132 | ||
130 | 133 | ||
131 | IconList m_icon_list; | 134 | IconList m_icon_list; |