aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorrathnor <rathnor>2003-12-23 01:55:07 (GMT)
committerrathnor <rathnor>2003-12-23 01:55:07 (GMT)
commitea184b3566bfee3f720763edf4e11cd27e9cd1d0 (patch)
tree193bb9f6fc150ed128b5a5b8fa008d1c05432ad9 /src
parent3e41157a3532537a859cbbeb2d6adf367de25f96 (diff)
downloadfluxbox-ea184b3566bfee3f720763edf4e11cd27e9cd1d0.zip
fluxbox-ea184b3566bfee3f720763edf4e11cd27e9cd1d0.tar.bz2
fix rendering of icon buttons when they are slightly larger because of
rounding
Diffstat (limited to 'src')
-rw-r--r--src/Container.hh4
-rw-r--r--src/IconbarTool.cc46
-rw-r--r--src/IconbarTool.hh4
3 files changed, 44 insertions, 10 deletions
diff --git a/src/Container.hh b/src/Container.hh
index f620d3a..6880aa3 100644
--- a/src/Container.hh
+++ b/src/Container.hh
@@ -20,7 +20,7 @@
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21// DEALINGS IN THE SOFTWARE. 21// DEALINGS IN THE SOFTWARE.
22 22
23// $Id: Container.hh,v 1.4 2003/12/12 14:35:34 fluxgen Exp $ 23// $Id: Container.hh,v 1.5 2003/12/23 01:55:07 rathnor Exp $
24 24
25#ifndef CONTAINER_HH 25#ifndef CONTAINER_HH
26#define CONTAINER_HH 26#define CONTAINER_HH
@@ -55,6 +55,8 @@ public:
55 void setMaxSizePerClient(unsigned int size); 55 void setMaxSizePerClient(unsigned int size);
56 void setAlignment(Alignment a); 56 void setAlignment(Alignment a);
57 57
58 Item back() { return m_item_list.back(); }
59
58 /// force update 60 /// force update
59 inline void update() { repositionItems(); } 61 inline void update() { repositionItems(); }
60 /// so we can add items without having an graphic update for each item 62 /// so we can add items without having an graphic update for each item
diff --git a/src/IconbarTool.cc b/src/IconbarTool.cc
index 8602a2b..13143d0 100644
--- a/src/IconbarTool.cc
+++ b/src/IconbarTool.cc
@@ -20,7 +20,7 @@
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21// DEALINGS IN THE SOFTWARE. 21// DEALINGS IN THE SOFTWARE.
22 22
23// $Id: IconbarTool.cc,v 1.24 2003/12/19 14:58:48 fluxgen Exp $ 23// $Id: IconbarTool.cc,v 1.25 2003/12/23 01:55:07 rathnor Exp $
24 24
25#include "IconbarTool.hh" 25#include "IconbarTool.hh"
26 26
@@ -237,6 +237,8 @@ IconbarTool::IconbarTool(const FbTk::FbWindow &parent, IconbarTheme &theme, BScr
237 m_theme(theme), 237 m_theme(theme),
238 m_focused_pm(0), 238 m_focused_pm(0),
239 m_unfocused_pm(0), 239 m_unfocused_pm(0),
240 m_focused_err_pm(0),
241 m_unfocused_err_pm(0),
240 m_empty_pm(0), 242 m_empty_pm(0),
241 m_rc_mode(screen.resourceManager(), WORKSPACE, 243 m_rc_mode(screen.resourceManager(), WORKSPACE,
242 screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"), 244 screen.name() + ".iconbar.mode", screen.altName() + ".Iconbar.Mode"),
@@ -292,7 +294,11 @@ IconbarTool::~IconbarTool() {
292 if (m_focused_pm) 294 if (m_focused_pm)
293 m_screen.imageControl().removeImage(m_focused_pm); 295 m_screen.imageControl().removeImage(m_focused_pm);
294 if (m_unfocused_pm) 296 if (m_unfocused_pm)
295 m_screen.imageControl().removeImage(m_focused_pm); 297 m_screen.imageControl().removeImage(m_unfocused_pm);
298 if (m_focused_err_pm)
299 m_screen.imageControl().removeImage(m_focused_err_pm);
300 if (m_unfocused_err_pm)
301 m_screen.imageControl().removeImage(m_unfocused_err_pm);
296 if (m_empty_pm) 302 if (m_empty_pm)
297 m_screen.imageControl().removeImage(m_empty_pm); 303 m_screen.imageControl().removeImage(m_empty_pm);
298 304
@@ -510,27 +516,43 @@ void IconbarTool::renderWindow(FluxboxWindow &win) {
510 516
511void IconbarTool::renderTheme() { 517void IconbarTool::renderTheme() {
512 Pixmap tmp = m_focused_pm; 518 Pixmap tmp = m_focused_pm;
519 Pixmap err_tmp = m_focused_err_pm;
520 unsigned int icon_width = m_icon_container.maxWidthPerClient();
513 if (!m_theme.focusedTexture().usePixmap()) { 521 if (!m_theme.focusedTexture().usePixmap()) {
514 m_focused_pm = 0; 522 m_focused_pm = 0;
523 m_focused_err_pm = 0;
515 } else { 524 } else {
516 m_focused_pm = m_screen.imageControl().renderImage(m_icon_container.maxWidthPerClient(), 525 m_focused_pm = m_screen.imageControl().renderImage(icon_width,
526 m_icon_container.height(),
527 m_theme.focusedTexture());
528 m_focused_err_pm = m_screen.imageControl().renderImage(icon_width+1,
517 m_icon_container.height(), 529 m_icon_container.height(),
518 m_theme.focusedTexture()); 530 m_theme.focusedTexture());
519 } 531 }
520 532
521 if (tmp) 533 if (tmp)
522 m_screen.imageControl().removeImage(tmp); 534 m_screen.imageControl().removeImage(tmp);
535 if (err_tmp)
536 m_screen.imageControl().removeImage(err_tmp);
523 537
524 tmp = m_unfocused_pm; 538 tmp = m_unfocused_pm;
539 err_tmp = m_unfocused_err_pm;
540
525 if (!m_theme.unfocusedTexture().usePixmap()) { 541 if (!m_theme.unfocusedTexture().usePixmap()) {
526 m_unfocused_pm = 0; 542 m_unfocused_pm = 0;
543 m_unfocused_err_pm = 0;
527 } else { 544 } else {
528 m_unfocused_pm = m_screen.imageControl().renderImage(m_icon_container.maxWidthPerClient(), 545 m_unfocused_pm = m_screen.imageControl().renderImage(icon_width,
546 m_icon_container.height(),
547 m_theme.unfocusedTexture());
548 m_unfocused_err_pm = m_screen.imageControl().renderImage(icon_width+1,
529 m_icon_container.height(), 549 m_icon_container.height(),
530 m_theme.unfocusedTexture()); 550 m_theme.unfocusedTexture());
531 } 551 }
532 if (tmp) 552 if (tmp)
533 m_screen.imageControl().removeImage(tmp); 553 m_screen.imageControl().removeImage(tmp);
554 if (err_tmp)
555 m_screen.imageControl().removeImage(err_tmp);
534 556
535 // if we dont have any icons then we should render empty texture 557 // if we dont have any icons then we should render empty texture
536 tmp = m_empty_pm; 558 tmp = m_empty_pm;
@@ -561,14 +583,20 @@ void IconbarTool::renderButton(IconButton &button) {
561 583
562 button.setPixmap(*m_rc_use_pixmap); 584 button.setPixmap(*m_rc_use_pixmap);
563 585
586 // if we're rendering a button, there must be a back button.
587 // The last button is always the regular width
588 bool wider_button = (button.width() != m_icon_container.back()->width());
589
564 if (button.win().isFocused()) { // focused texture 590 if (button.win().isFocused()) { // focused texture
565 m_icon_container.setSelected(m_icon_container.find(&button)); 591 m_icon_container.setSelected(m_icon_container.find(&button));
566 button.setGC(m_theme.focusedText().textGC()); 592 button.setGC(m_theme.focusedText().textGC());
567 button.setFont(m_theme.focusedText().font()); 593 button.setFont(m_theme.focusedText().font());
568 button.setJustify(m_theme.focusedText().justify()); 594 button.setJustify(m_theme.focusedText().justify());
569 595
570 if (m_focused_pm != 0) 596 if (!wider_button && m_focused_pm != 0)
571 button.setBackgroundPixmap(m_focused_pm); 597 button.setBackgroundPixmap(m_focused_pm);
598 else if (wider_button && m_focused_err_pm != 0)
599 button.setBackgroundPixmap(m_focused_err_pm);
572 else 600 else
573 button.setBackgroundColor(m_theme.focusedTexture().color()); 601 button.setBackgroundColor(m_theme.focusedTexture().color());
574 602
@@ -583,8 +611,10 @@ void IconbarTool::renderButton(IconButton &button) {
583 button.setFont(m_theme.unfocusedText().font()); 611 button.setFont(m_theme.unfocusedText().font());
584 button.setJustify(m_theme.unfocusedText().justify()); 612 button.setJustify(m_theme.unfocusedText().justify());
585 613
586 if (m_unfocused_pm != 0) 614 if (!wider_button && m_unfocused_pm != 0)
587 button.setBackgroundPixmap(m_unfocused_pm); 615 button.setBackgroundPixmap(m_unfocused_pm);
616 else if (wider_button && m_unfocused_err_pm != 0)
617 button.setBackgroundPixmap(m_unfocused_err_pm);
588 else 618 else
589 button.setBackgroundColor(m_theme.unfocusedTexture().color()); 619 button.setBackgroundColor(m_theme.unfocusedTexture().color());
590 620
diff --git a/src/IconbarTool.hh b/src/IconbarTool.hh
index 0f2574e..bfcac34 100644
--- a/src/IconbarTool.hh
+++ b/src/IconbarTool.hh
@@ -20,7 +20,7 @@
20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 20// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21// DEALINGS IN THE SOFTWARE. 21// DEALINGS IN THE SOFTWARE.
22 22
23// $Id: IconbarTool.hh,v 1.12 2003/12/19 14:57:44 fluxgen Exp $ 23// $Id: IconbarTool.hh,v 1.13 2003/12/23 01:55:07 rathnor Exp $
24 24
25#ifndef ICONBARTOOL_HH 25#ifndef ICONBARTOOL_HH
26#define ICONBARTOOL_HH 26#define ICONBARTOOL_HH
@@ -107,6 +107,8 @@ private:
107 const IconbarTheme &m_theme; 107 const IconbarTheme &m_theme;
108 // cached pixmaps 108 // cached pixmaps
109 Pixmap m_focused_pm, m_unfocused_pm; 109 Pixmap m_focused_pm, m_unfocused_pm;
110 // some are a fraction bigger due to rounding
111 Pixmap m_focused_err_pm, m_unfocused_err_pm;
110 Pixmap m_empty_pm; ///< pixmap for empty container 112 Pixmap m_empty_pm; ///< pixmap for empty container
111 113
112 114