Репозиторий ALT Linux backports/2.4
Последнее обновление: 9 июля 2008 | Пакетов: 497 | Посещений: 1652635
 поиск   регистрация   авторизация 
 
Группа :: Графические оболочки/KDE
Пакет: kdebase

 Главная   Изменения   Спек   Патчи   Загрузить   Bugs and FR 

Патч: kdebase-3.1.3-panelicon.patch


--- kdebase-3.1.3/kicker/buttons/panelbuttonbase.cpp.orig	2003-07-30 21:28:19.000000000 +0200
+++ kdebase-3.1.3/kicker/buttons/panelbuttonbase.cpp	2003-07-30 22:29:06.000000000 +0200
@@ -47,6 +47,16 @@
 static ZoomButton* zoomButton = 0;
 static int zoomDisabled = 0;
 
+static QPixmap iconResize(QPixmap pix, int w, int h)
+{
+    if (pix.height() > h) {
+      QImage tmp = pix.convertToImage();
+      tmp = tmp.smoothScale(w, h);
+      pix.convertFromImage(tmp);
+    }
+    return pix;
+}
+
 ZoomButton::ZoomButton()
 	: PanelButtonBase( 0, 0, WStyle_Customize | WX11BypassWM | WMouseNoMask)
 {
@@ -311,34 +321,50 @@
 {
     KIcon::StdSizes sz;
     KIcon::StdSizes zoom_sz;
+    KConfig * config = KGlobal::config();
+    config->setGroup( "PanelIcons" );
 
-    if ( orientation() == Horizontal ) {
-        if ( height() < 32 ) sz = KIcon::SizeSmall;
-        else if ( height() < 48 ) sz = KIcon::SizeMedium;
-        else sz = KIcon::SizeLarge;
-    }
-    else {
-        if ( width() < 32 ) sz = KIcon::SizeSmall;
-        else if ( width() < 48 ) sz = KIcon::SizeMedium;
-        else sz = KIcon::SizeLarge;
-    }
+    if ( ! config->readBoolEntry( "IconResize", true ) ) { // set resizing panel icon as default
+        if ( orientation() == Horizontal ) {
+            if ( height() < 32 ) sz = KIcon::SizeSmall;
+            else if ( height() < 48 ) sz = KIcon::SizeMedium;
+            else sz = KIcon::SizeLarge;
+        }
+        else {
+            if ( width() < 32 ) sz = KIcon::SizeSmall;
+            else if ( width() < 48 ) sz = KIcon::SizeMedium;
+            else sz = KIcon::SizeLarge;
+        }
 
-    if (sz == KIcon::SizeSmall)
-        zoom_sz = KIcon::SizeMedium;
-    else
-        zoom_sz = KIcon::SizeLarge;
+        if (sz == KIcon::SizeSmall)
+            zoom_sz = KIcon::SizeMedium;
+        else
+            zoom_sz = KIcon::SizeLarge;
+
+    } else { // resize panel icons
+        if (orientation() == Horizontal)
+            sz = (KIcon::StdSizes)height();
+        else
+            sz = (KIcon::StdSizes)width();
+
+        if (sz < KIcon::SizeSmall)
+            zoom_sz = KIcon::SizeSmall;
+        else if (sz < KIcon::SizeMedium)
+            zoom_sz = KIcon::SizeMedium;
+        else
+            zoom_sz = KIcon::SizeLarge;
+    }
 
     if (_size != sz || _zoom_size != zoom_sz) {
         _size = sz;
         _zoom_size = zoom_sz;
-	return true;
-     }
-     return false;
+        return true;
+    }
+    return false;
 }
 
 void PanelButtonBase::loadIcons()
 {
-
     KIconLoader * ldr = KGlobal::iconLoader();
     QString nm = _iconName;
 
@@ -346,11 +372,14 @@
 
     if (_icon.isNull()) {
         nm = defaultIcon();
-	_icon = ldr->loadIcon(nm, KIcon::Panel, _size, KIcon::DefaultState);
+       _icon = ldr->loadIcon(nm, KIcon::Panel, _size, KIcon::DefaultState);
     }
 
-    _iconh = ldr->loadIcon(nm, KIcon::Panel, _size, KIcon::ActiveState, 0L, true);
-    _iconz = ldr->loadIcon(nm, KIcon::Panel, _zoom_size, KIcon::ActiveState, 0L, true );
+    _icon = iconResize(_icon, height(), width());
+    _iconh = iconResize(ldr->loadIcon(nm, KIcon::Panel, _size, KIcon::ActiveState, 0L, true),
+                        height(), width());
+    _iconz = iconResize(ldr->loadIcon(nm, KIcon::Panel, _zoom_size, KIcon::ActiveState, 0L, true),
+                        height(), width());
 }
 
 void PanelButtonBase::setIconURL(const KURL & u)
 
design & coding: Vladimir Lettiev aka crux © 2004-2005