forked from unlimitedbacon/stl-thumb-kde
-
Notifications
You must be signed in to change notification settings - Fork 0
/
stlcreator.cpp
56 lines (43 loc) · 1.54 KB
/
stlcreator.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include "stlcreator.h"
#include <libstl_thumb.h>
#include <QFile>
#include <QImage>
#include <QtDebug>
#include <iostream>
#include <string>
#include <KPluginFactory>
K_PLUGIN_CLASS_WITH_JSON(StlCreator, "stlthumbnail.json")
Q_LOGGING_CATEGORY(LOG_STL, "com.stl-thumb-kde")
StlCreator::StlCreator(QObject *parent, const QVariantList &args)
: KIO::ThumbnailCreator(parent, args)
{
}
KIO::ThumbnailResult StlCreator::create(const KIO::ThumbnailRequest &request)
{
const QString path = request.url().toLocalFile();
std::string path_string = path.toStdString();
const char* path_cstring = path_string.c_str();
int width = request.targetSize().width() * request.devicePixelRatio();
int height = request.targetSize().height() * request.devicePixelRatio();
int img_size = width * height * 4;
img_buf = (uchar *) malloc(img_size);
if (img_buf == NULL) return KIO::ThumbnailResult::fail();
if (!render_to_buffer(img_buf, width, height, path_cstring)) {
qCWarning(LOG_STL) << "STL-THUMB :: lib returned error\n";
return KIO::ThumbnailResult::fail();
}
QImage img = QImage(img_buf,
width,
height,
QImage::Format_RGBA8888,
(QImageCleanupFunction) &clean,
(void*) this);
return KIO::ThumbnailResult::pass(img);
}
// Cleanup function provided to QImage to free the buffer after it is done
void clean(void *info)
{
StlCreator * self = static_cast<StlCreator*>(info);
free(self->img_buf);
}
#include "stlcreator.moc"