Krusader: get file icons from Tracker

This commit is contained in:
Gerasim Troeglazov
2019-03-28 22:49:35 +10:00
parent cbb288edbf
commit f3aa0437ed
2 changed files with 126 additions and 2 deletions

View File

@@ -20,10 +20,11 @@ user friendly, fast and looks great on your desktop! You should give it a try."
HOMEPAGE="https://krusader.org/"
COPYRIGHT="2000-2018 Krusader Krew"
LICENSE="GNU GPL v2"
REVISION="2"
REVISION="3"
SOURCE_URI="https://github.com/KDE/krusader/archive/v$portVersion.tar.gz"
CHECKSUM_SHA256="1ce50427db5256c46985374b267b378d69591c4093386dbd692655772826fc37"
ADDITIONAL_FILES="krusader.rdef.in"
PATCHES="krusader-$portVersion.patchset"
ARCHITECTURES="x86_64"
SECONDARY_ARCHITECTURES="x86"
@@ -69,7 +70,7 @@ REQUIRES="
BUILD_REQUIRES="
haiku${secondaryArchSuffix}_devel
extra_cmake_modules$secondaryArchSuffix >= 5.46
extra_cmake_modules$secondaryArchSuffix >= 5.55
devel:libKF5Archive$secondaryArchSuffix
devel:libKF5Auth$secondaryArchSuffix
devel:libKF5Bookmarks$secondaryArchSuffix
@@ -105,6 +106,7 @@ BUILD_PREREQUIRES="
cmd:cmake
cmd:g++$secondaryArchSuffix
cmd:make
cmd:qdbuscpp2xml$secondaryArchSuffix >= 5
"
defineDebugInfoPackage krusader$secondaryArchSuffix \

View File

@@ -0,0 +1,122 @@
From 40f199bd4f20d2a5095052f2bb3684af7bcc1111 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Thu, 28 Mar 2019 22:28:54 +1000
Subject: Add haiku file icons support
diff --git a/krusader/Panel/PanelView/krview.cpp b/krusader/Panel/PanelView/krview.cpp
index a7f0437..f07b62e 100644
--- a/krusader/Panel/PanelView/krview.cpp
+++ b/krusader/Panel/PanelView/krview.cpp
@@ -316,6 +316,59 @@ QPixmap KrView::processIcon(const QPixmap &icon, bool dim, const QColor & dimCol
Qt::ThresholdAlphaDither | Qt::NoOpaqueDetection );
}
+#ifdef __HAIKU__
+QPixmap KrView::getIcon(FileItem *fileitem, bool active, int size)
+{
+ QPixmap icon;
+ QString iconName = fileitem->getIcon();
+ if (!fileitem->getUrl().path().isNull())
+ iconName = fileitem->getUrl().path();
+ QString cacheName;
+
+ if(!size)
+ size = _FilelistIconSize.toInt();
+
+ QColor dimColor;
+ int dimFactor;
+ bool dim = !active && KrColorCache::getColorCache().getDimSettings(dimColor, dimFactor);
+
+ if (iconName.isNull())
+ iconName = "";
+
+ cacheName.append(QString::number(size));
+ if(fileitem->isSymLink())
+ cacheName.append("LINK_");
+ if(dim)
+ cacheName.append("DIM_");
+ cacheName.append(iconName);
+
+ if (!QPixmapCache::find(cacheName, icon)) {
+ QPixmap pixmap = QPixmap(size, size);
+ if (fileitem->getUrl().path().isNull())
+ pixmap = Icon(iconName, Icon("unknown")).pixmap(size);
+ else {
+ pixmap.fill(Qt::transparent);
+ QString filename = fileitem->getUrl().path();
+ if (filename == "/")
+ filename = "/system/servers/mount_server";
+
+ BFile file(filename.toUtf8(), O_RDONLY);
+ BNodeInfo nodeInfo(&file);
+ icon_size iconSize = (icon_size)size;
+ BRect rect(0, 0, iconSize - 1, iconSize -1);
+ BBitmap bitmap(rect, B_RGBA32);
+ if (nodeInfo.GetTrackerIcon(&bitmap, iconSize) == B_NO_ERROR) {
+ QImage image(iconSize, iconSize, QImage::Format_ARGB32);
+ memcpy((uchar*)image.bits(), (uchar*)bitmap.Bits(), iconSize * iconSize * 4);
+ pixmap = QPixmap::fromImage(image).scaled(size, size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ }
+ }
+ icon = processIcon(pixmap, dim, dimColor, dimFactor, fileitem->isSymLink());
+ QPixmapCache::insert(cacheName, icon);
+ }
+ return icon;
+}
+#else
QPixmap KrView::getIcon(FileItem *fileitem, bool active, int size/*, KRListItem::cmpColor color*/)
{
// KConfigGroup ag( krConfig, "Advanced");
@@ -353,6 +406,7 @@ QPixmap KrView::getIcon(FileItem *fileitem, bool active, int size/*, KRListItem:
return icon;
}
+#endif
QPixmap KrView::getIcon(FileItem *fileitem)
{
diff --git a/krusader/Panel/PanelView/krview.h b/krusader/Panel/PanelView/krview.h
index 6371cdb..d973e83 100644
--- a/krusader/Panel/PanelView/krview.h
+++ b/krusader/Panel/PanelView/krview.h
@@ -33,6 +33,13 @@
#include <QDropEvent>
#include <QPixmap>
+#ifdef __HAIKU__
+#include <File.h>
+#include <NodeInfo.h>
+#include <Rect.h>
+#include <Bitmap.h>
+#endif
+
#include "krviewproperties.h"
class KrView;
--
2.19.1
From 6f5844e31bb1d4e022444a9130d8c35f1bdbff85 Mon Sep 17 00:00:00 2001
From: Gerasim Troeglazov <3dEyes@gmail.com>
Date: Thu, 28 Mar 2019 22:41:58 +1000
Subject: Link with be and tracker libraries
diff --git a/krusader/CMakeLists.txt b/krusader/CMakeLists.txt
index 0ade19c..dcd2cf3 100644
--- a/krusader/CMakeLists.txt
+++ b/krusader/CMakeLists.txt
@@ -77,6 +77,8 @@ target_link_libraries(krusader
KF5::WindowSystem
Qt5::PrintSupport
Qt5::Concurrent
+ be
+ tracker
)
if(SYNCHRONIZER_ENABLED)
--
2.19.1