qmlFrontend/hwengine.cpp
branchqmlfrontend
changeset 10420 02c573d19224
parent 10418 091d2c0216c3
child 10424 4be6cd55f1cf
equal deleted inserted replaced
10418:091d2c0216c3 10420:02c573d19224
     1 #include <QLibrary>
     1 #include <QLibrary>
     2 #include <QtQml>
     2 #include <QtQml>
     3 #include <QDebug>
     3 #include <QDebug>
       
     4 #include <QPainter>
     4 
     5 
     5 #include "hwengine.h"
     6 #include "hwengine.h"
       
     7 #include "previewimageprovider.h"
     6 
     8 
     7 extern "C" {
     9 extern "C" {
     8     RunEngine_t *RunEngine;
    10     RunEngine_t *RunEngine;
     9     registerIPCCallback_t *registerIPCCallback;
    11     registerIPCCallback_t *registerIPCCallback;
    10     ipcToEngine_t *ipcToEngine;
    12     ipcToEngine_t *ipcToEngine;
    11     flibInit_t *flibInit;
    13     flibInit_t *flibInit;
    12 }
    14 }
    13 HWEngine::HWEngine(QObject *parent) :
    15 
    14     QObject(parent)
    16 HWEngine::HWEngine(QQmlEngine *engine, QObject *parent) :
       
    17     QObject(parent),
       
    18     m_engine(engine)
    15 {
    19 {
    16     QLibrary hwlib("./libhwengine.so");
    20     QLibrary hwlib("./libhwengine.so");
    17 
    21 
    18     if(!hwlib.load())
    22     if(!hwlib.load())
    19         qWarning() << "Engine library not found" << hwlib.errorString();
    23         qWarning() << "Engine library not found" << hwlib.errorString();
    46     m_args.resize(m_argsList.size());
    50     m_args.resize(m_argsList.size());
    47     for(int i = m_argsList.size() - 1; i >=0; --i)
    51     for(int i = m_argsList.size() - 1; i >=0; --i)
    48         m_args[i] = m_argsList[i].constData();
    52         m_args[i] = m_argsList[i].constData();
    49 
    53 
    50     RunEngine(m_args.size(), m_args.data());
    54     RunEngine(m_args.size(), m_args.data());
       
    55     sendIPC("eseed helloworld");
       
    56     sendIPC("e$mapgen 0");
    51     sendIPC("!");
    57     sendIPC("!");
    52 }
    58 }
    53 
    59 
    54 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
    60 static QObject *hwengine_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
    55 {
    61 {
    56     Q_UNUSED(engine)
       
    57     Q_UNUSED(scriptEngine)
    62     Q_UNUSED(scriptEngine)
    58 
    63 
    59     HWEngine *hwengine = new HWEngine();
    64     HWEngine *hwengine = new HWEngine(engine);
    60     return hwengine;
    65     return hwengine;
    61 }
    66 }
    62 
    67 
    63 void HWEngine::exposeToQML()
    68 void HWEngine::exposeToQML()
    64 {
    69 {
    69 void HWEngine::sendIPC(const QByteArray & b)
    74 void HWEngine::sendIPC(const QByteArray & b)
    70 {
    75 {
    71     quint8 len = b.size() > 255 ? 255 : b.size();
    76     quint8 len = b.size() > 255 ? 255 : b.size();
    72     qDebug() << "sendIPC: len = " << len;
    77     qDebug() << "sendIPC: len = " << len;
    73 
    78 
    74     ipcToEngine(len, b.constData());
    79     ipcToEngine(b.constData(), len);
    75 }
    80 }
    76 
    81 
    77 void HWEngine::engineMessageCallback(void *context, quint8 len, const char *msg)
    82 void HWEngine::engineMessageCallback(void *context, const char * msg, quint32 len)
    78 {
    83 {
       
    84     HWEngine * obj = (HWEngine *)context;
    79     QByteArray b = QByteArray::fromRawData(msg, len);
    85     QByteArray b = QByteArray::fromRawData(msg, len);
    80 
    86 
    81     qDebug() << "FLIPC in" << b;
    87     qDebug() << "FLIPC in" << b.size() << b;
       
    88 
       
    89     QMetaObject::invokeMethod(obj, "engineMessageHandler", Qt::QueuedConnection, Q_ARG(QByteArray, b));
    82 }
    90 }
       
    91 
       
    92 void HWEngine::engineMessageHandler(const QByteArray &msg)
       
    93 {
       
    94     if(msg.size() == 128 * 256)
       
    95     {
       
    96         QVector<QRgb> colorTable;
       
    97         colorTable.resize(256);
       
    98         for(int i = 0; i < 256; ++i)
       
    99             colorTable[i] = qRgba(255, 255, 0, i);
       
   100 
       
   101         const quint8 *buf = (const quint8*) msg.constData();
       
   102         QImage im(buf, 256, 128, QImage::Format_Indexed8);
       
   103         im.setColorTable(colorTable);
       
   104 
       
   105         QPixmap px = QPixmap::fromImage(im, Qt::ColorOnly);
       
   106         //QPixmap pxres(px.size());
       
   107         //QPainter p(&pxres);
       
   108 
       
   109         //p.fillRect(pxres.rect(), linearGrad);
       
   110         //p.drawPixmap(0, 0, px);
       
   111 
       
   112         PreviewImageProvider * preview = (PreviewImageProvider *)m_engine->imageProvider(QLatin1String("preview"));
       
   113         preview->setPixmap(px);
       
   114         emit previewImageChanged();
       
   115     }
       
   116 }