diff options
Diffstat (limited to 'src/FbTk/MenuItem.cc')
-rw-r--r-- | src/FbTk/MenuItem.cc | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/src/FbTk/MenuItem.cc b/src/FbTk/MenuItem.cc index bc80ca0..2576d2b 100644 --- a/src/FbTk/MenuItem.cc +++ b/src/FbTk/MenuItem.cc | |||
@@ -93,27 +93,32 @@ void MenuItem::draw(FbDrawable &draw, | |||
93 | // Icon | 93 | // Icon |
94 | // | 94 | // |
95 | if (draw_background) { | 95 | if (draw_background) { |
96 | if (m_icon.get() != 0 && m_icon->pixmap.get() != 0) { | 96 | if (icon() != 0) { |
97 | // copy pixmap, so we don't resize the original | ||
98 | FbPixmap tmp_pixmap, tmp_mask; | ||
99 | tmp_pixmap.copy(icon()->pixmap()); | ||
100 | tmp_mask.copy(icon()->mask()); | ||
101 | |||
97 | // scale pixmap to right size | 102 | // scale pixmap to right size |
98 | if (height - 2*theme.bevelWidth() != m_icon->pixmap->height() && | 103 | if (height - 2*theme.bevelWidth() != tmp_pixmap.height()) { |
99 | !m_icon->filename.empty()) { | ||
100 | unsigned int scale_size = height - 2*theme.bevelWidth(); | 104 | unsigned int scale_size = height - 2*theme.bevelWidth(); |
101 | m_icon->pixmap->scale(scale_size, scale_size); | 105 | tmp_pixmap.scale(scale_size, scale_size); |
106 | tmp_mask.scale(scale_size, scale_size); | ||
102 | } | 107 | } |
103 | 108 | ||
104 | if (m_icon->pixmap->pixmap().drawable() != 0) { | 109 | if (tmp_pixmap.drawable() != 0) { |
105 | GC gc = theme.frameTextGC().gc(); | 110 | GC gc = theme.frameTextGC().gc(); |
106 | int icon_x = x + theme.bevelWidth(); | 111 | int icon_x = x + theme.bevelWidth(); |
107 | int icon_y = y + theme.bevelWidth(); | 112 | int icon_y = y + theme.bevelWidth(); |
108 | // enable clip mask | 113 | // enable clip mask |
109 | XSetClipMask(disp, gc, m_icon->pixmap->mask().drawable()); | 114 | XSetClipMask(disp, gc, tmp_mask.drawable()); |
110 | XSetClipOrigin(disp, gc, icon_x, icon_y); | 115 | XSetClipOrigin(disp, gc, icon_x, icon_y); |
111 | 116 | ||
112 | draw.copyArea(m_icon->pixmap->pixmap().drawable(), | 117 | draw.copyArea(tmp_pixmap.drawable(), |
113 | gc, | 118 | gc, |
114 | 0, 0, | 119 | 0, 0, |
115 | icon_x, icon_y, | 120 | icon_x, icon_y, |
116 | m_icon->pixmap->width(), m_icon->pixmap->height()); | 121 | tmp_pixmap.width(), tmp_pixmap.height()); |
117 | 122 | ||
118 | // restore clip mask | 123 | // restore clip mask |
119 | XSetClipMask(disp, gc, None); | 124 | XSetClipMask(disp, gc, None); |