8 #include "previewimageprovider.h" |
8 #include "previewimageprovider.h" |
9 |
9 |
10 extern "C" { |
10 extern "C" { |
11 RunEngine_t *flibRunEngine; |
11 RunEngine_t *flibRunEngine; |
12 registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback; |
12 registerGUIMessagesCallback_t *flibRegisterGUIMessagesCallback; |
|
13 setSeed_t *flibSetSeed; |
|
14 getSeed_t *flibGetSeed; |
13 getPreview_t *flibGetPreview; |
15 getPreview_t *flibGetPreview; |
14 flibInit_t *flibInit; |
16 flibInit_t *flibInit; |
15 flibFree_t *flibFree; |
17 flibFree_t *flibFree; |
16 } |
18 } |
17 |
19 |
|
20 Q_DECLARE_METATYPE(MessageType); |
|
21 |
18 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) : |
22 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) : |
19 QObject(parent), |
23 QObject(parent), |
20 m_engine(engine) |
24 m_engine(engine) |
21 { |
25 { |
|
26 qRegisterMetaType<MessageType>("MessageType"); |
|
27 |
22 QLibrary hwlib("./libhwengine.so"); |
28 QLibrary hwlib("./libhwengine.so"); |
23 |
29 |
24 if(!hwlib.load()) |
30 if(!hwlib.load()) |
25 qWarning() << "Engine library not found" << hwlib.errorString(); |
31 qWarning() << "Engine library not found" << hwlib.errorString(); |
26 |
32 |
27 flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); |
33 flibRunEngine = (RunEngine_t*) hwlib.resolve("RunEngine"); |
28 flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback"); |
34 flibRegisterGUIMessagesCallback = (registerGUIMessagesCallback_t*) hwlib.resolve("registerGUIMessagesCallback"); |
|
35 flibSetSeed = (setSeed_t*) hwlib.resolve("setSeed"); |
|
36 flibGetSeed = (getSeed_t*) hwlib.resolve("getSeed"); |
29 flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview"); |
37 flibGetPreview = (getPreview_t*) hwlib.resolve("getPreview"); |
30 flibInit = (flibInit_t*) hwlib.resolve("flibInit"); |
38 flibInit = (flibInit_t*) hwlib.resolve("flibInit"); |
31 flibFree = (flibFree_t*) hwlib.resolve("flibFree"); |
39 flibFree = (flibFree_t*) hwlib.resolve("flibFree"); |
32 |
40 |
33 flibInit(".", "~/.hedgewars"); |
41 flibInit(".", "~/.hedgewars"); |
65 HWEngine * obj = (HWEngine *)context; |
73 HWEngine * obj = (HWEngine *)context; |
66 QByteArray b = QByteArray::fromRawData(msg, len); |
74 QByteArray b = QByteArray::fromRawData(msg, len); |
67 |
75 |
68 qDebug() << "FLIPC in" << b.size() << b; |
76 qDebug() << "FLIPC in" << b.size() << b; |
69 |
77 |
70 QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(QByteArray, b)); |
78 QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(MessageType, mt), Q_ARG(QByteArray, b)); |
71 } |
79 } |
72 |
80 |
73 void HWEngine::engineMessageHandler(const QByteArray &msg) |
81 void HWEngine::engineMessageHandler(MessageType mt, const QByteArray &msg) |
74 { |
82 { |
75 if(msg.size() == 128 * 256) |
83 switch(mt) |
76 { |
84 { |
|
85 case MSG_PREVIEW: |
77 PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview")); |
86 PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview")); |
78 preview->setPixmap(msg); |
87 preview->setPixmap(msg); |
79 emit previewImageChanged(); |
88 emit previewImageChanged(); |
|
89 break; |
80 } |
90 } |
81 } |
91 } |
82 |
92 |
83 QString HWEngine::currentSeed() |
93 QString HWEngine::currentSeed() |
84 { |
94 { |
85 return m_seed; |
95 return QString::fromLatin1(flibGetSeed()); |
86 } |
96 } |