From kde-commits Fri Feb 05 10:48:24 2010 From: Eike Hein Date: Fri, 05 Feb 2010 10:48:24 +0000 To: kde-commits Subject: extragear/utils/yakuake Message-Id: <1265366904.749115.17947.nullmailer () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=126536691925675 SVN commit 1085473 by hein: A round of improvements to the lock icon stuff - better pixmap, better scaling, caching of a scaled version when a system image is used, and a x/y coordinate pair for the icon for skin authors. M +30 -3 app/skin.cpp M +5 -0 app/skin.h M +13 -7 app/tabbar.cpp M +2 -0 skins/default/tabs.skin M skins/default/tabs/lock.png M +2 -0 skins/plastik_dark/tabs.skin M skins/plastik_dark/tabs/lock.png M +2 -0 skins/plastik_light/tabs.skin M skins/plastik_light/tabs/lock.png --- trunk/extragear/utils/yakuake/app/skin.cpp #1085472:1085473 @@ -133,6 +133,8 @@ m_tabBarSelectedRightCornerImage.load(tabDir + tabBar.readEntry("selected_right_corner", "")); m_tabBarPreventClosingImage.load(tabDir + tabBar.readEntry("prevent_closing_image", "")); + m_tabBarPreventClosingImagePosition.setX(tabBar.readEntry("prevent_closing_image_x", 0)); + m_tabBarPreventClosingImagePosition.setY(tabBar.readEntry("prevent_closing_image_y", 0)); KConfigGroup tabBarBackground = tabConfig.group("Background"); @@ -161,6 +163,9 @@ tabDir + tabBarCloseTabButton.readEntry("over_image", ""), tabDir + tabBarCloseTabButton.readEntry("down_image", "")); + if (m_tabBarPreventClosingImage.isNull()) + updateTabBarPreventClosingImageCache(); + return true; } @@ -195,18 +200,40 @@ const QPixmap Skin::tabBarPreventClosingImage() { - // If the skin. doesn't provide a Prevent Closing image, procure one - // from the system icon theme. if (m_tabBarPreventClosingImage.isNull()) - return KIcon("object-locked.png").pixmap(QSize(32, 32)); + return m_tabBarPreventClosingImageCached; return m_tabBarPreventClosingImage; } +void Skin::updateTabBarPreventClosingImageCache() +{ + // Get the target image size from the tabBar height, aquired from + // background image, minus (2 * y position) of the lock icon. + int m_IconSize = m_tabBarBackgroundImage.height() - + (2 * m_tabBarPreventClosingImagePosition.y()); + + // Get the system lock icon in a generous size. + m_tabBarPreventClosingImageCached = KIcon("object-locked.png").pixmap(48, 48); + + // Resize the image if it's too tall. + if (m_IconSize < m_tabBarPreventClosingImageCached.height()) + { + m_tabBarPreventClosingImageCached = + m_tabBarPreventClosingImageCached.scaled(m_IconSize, + m_IconSize, Qt::KeepAspectRatio, + Qt::SmoothTransformation); + } +} + void Skin::systemIconsChanged(int group) { Q_UNUSED(group); if (m_tabBarPreventClosingImage.isNull()) + { + updateTabBarPreventClosingImageCache(); + emit iconChanged(); + } } --- trunk/extragear/utils/yakuake/app/skin.h #1085472:1085473 @@ -71,6 +71,7 @@ const QPixmap& tabBarSelectedRightCornerImage() { return m_tabBarSelectedRightCornerImage; } const QPixmap tabBarPreventClosingImage(); + const QPoint& tabBarPreventClosingImagePosition() { return m_tabBarPreventClosingImagePosition; } const QPixmap& tabBarBackgroundImage() { return m_tabBarBackgroundImage; } const QPixmap& tabBarLeftCornerImage() { return m_tabBarLeftCornerImage; } @@ -94,6 +95,8 @@ private: const QString buttonStyleSheet(const QString& up, const QString& over, const QString& down); + void updateTabBarPreventClosingImageCache(); + QColor m_borderColor; int m_borderWidth; @@ -126,6 +129,8 @@ QPixmap m_tabBarSelectedRightCornerImage; QPixmap m_tabBarPreventClosingImage; + QPixmap m_tabBarPreventClosingImageCached; + QPoint m_tabBarPreventClosingImagePosition; QPixmap m_tabBarBackgroundImage; QPixmap m_tabBarLeftCornerImage; --- trunk/extragear/utils/yakuake/app/tabbar.cpp #1085472:1085473 @@ -366,17 +366,23 @@ // Draw the Prevent Closing image in the tab button. if (m_mainWindow->sessionStack()->isSessionClosable(sessionId) == false) { - QPixmap preventClosingImage = m_skin->tabBarPreventClosingImage().scaled(height() - 4, height() - 4, - Qt::KeepAspectRatio, Qt::SmoothTransformation); - if (selected) - painter.drawTiledPixmap(x, y, preventClosingImage.width(), height(), m_skin->tabBarSelectedBackgroundImage()); + painter.drawTiledPixmap(x, y, + m_skin->tabBarPreventClosingImagePosition().x() + + m_skin->tabBarPreventClosingImage().width(), height(), + m_skin->tabBarSelectedBackgroundImage()); else - painter.drawTiledPixmap(x, y, preventClosingImage.width(), height(), m_skin->tabBarUnselectedBackgroundImage()); + painter.drawTiledPixmap(x, y, + m_skin->tabBarPreventClosingImagePosition().x() + + m_skin->tabBarPreventClosingImage().width(), height(), + m_skin->tabBarUnselectedBackgroundImage()); - painter.drawPixmap(x + 1, (height() / 2) - (preventClosingImage.height() / 2), preventClosingImage); + painter.drawPixmap(x + m_skin->tabBarPreventClosingImagePosition().x(), + m_skin->tabBarPreventClosingImagePosition().y(), + m_skin->tabBarPreventClosingImage()); - x += preventClosingImage.width(); + x += m_skin->tabBarPreventClosingImagePosition().x(); + x += m_skin->tabBarPreventClosingImage().width(); } if (selected) --- trunk/extragear/utils/yakuake/skins/default/tabs.skin #1085472:1085473 @@ -16,6 +16,8 @@ selected_right_corner=/tabs/selected_right.png unselected_background=/tabs/unselected_back.png prevent_closing_image=/tabs/lock.png +prevent_closing_image_x=2 +prevent_closing_image_y=4 [Background] back_image=/tabs/back_image.png --- trunk/extragear/utils/yakuake/skins/plastik_dark/tabs.skin #1085472:1085473 @@ -16,6 +16,8 @@ selected_right_corner=/tabs/selected_right.png unselected_background=/tabs/unselected_back.png prevent_closing_image=/tabs/lock.png +prevent_closing_image_x=2 +prevent_closing_image_y=3 [Background] back_image=/tabs/back_image.png --- trunk/extragear/utils/yakuake/skins/plastik_light/tabs.skin #1085472:1085473 @@ -16,6 +16,8 @@ selected_right_corner=/tabs/selected_right.png unselected_background=/tabs/unselected_back.png prevent_closing_image=/tabs/lock.png +prevent_closing_image_x=2 +prevent_closing_image_y=3 [Background] back_image=/tabs/back_image.png