| |
| |
| #ifdef MACOSX |
| #ifndef __LP64__ |
| |
| //Toonz stuff |
| #include "tvectorimage.h" |
| #include "tstroke.h" |
| #include "traster.h" |
| #include "tfont.h" |
| |
| //Qt stuff |
| #include <QString> |
| #include <QSharedMemory> |
| #include <QDebug> |
| |
| //tipc includes |
| #include "tipc.h" |
| #include "tipcmsg.h" |
| #include "tipcsrv.h" |
| |
| #include "t32fontmsg.h" |
| |
| //--------------------------------------------------- |
| |
| // Local namespace stuff |
| |
| namespace |
| { |
| } |
| |
| QDataStream &operator<<(QDataStream &ds, const TThickPoint &p) |
| { |
| ds << p.x << p.y << p.thick; |
| return ds; |
| } |
| |
| //--------------------------------------------------- |
| |
| using namespace tipc; |
| |
| namespace font_io |
| { |
| |
| void addParsers(tipc::Server *srv) |
| { |
| srv->addParser(new LoadFontNamesParser); |
| srv->addParser(new GetAllFamiliesParser); |
| srv->addParser(new GetAllTypefacesParser); |
| srv->addParser(new SetFamilyParser); |
| srv->addParser(new SetTypefaceParser); |
| srv->addParser(new SetSizeParser); |
| srv->addParser(new GetCurrentFamilyParser); |
| srv->addParser(new GetCurrentTypefaceParser); |
| srv->addParser(new GetDistanceParser); |
| srv->addParser(new DrawCharVIParser); |
| srv->addParser(new DrawCharGRParser); |
| srv->addParser(new DrawCharCMParser); |
| } |
| |
| //************************************************************************ |
| // LoadFontNames Parser |
| //************************************************************************ |
| |
| void LoadFontNamesParser::operator()(Message &msg) |
| { |
| TFontManager::instance()->loadFontNames(); |
| msg << clr << QString("ok"); |
| } |
| |
| //************************************************************************ |
| // GetAllFamilies Parser |
| //************************************************************************ |
| |
| void GetAllFamiliesParser::operator()(Message &msg) |
| { |
| std::vector<std::wstring> families; |
| TFontManager::instance()->getAllFamilies(families); |
| |
| msg << clr << QString("ok") << families; |
| } |
| |
| //************************************************************************ |
| // GetAllTypefaces Parser |
| //************************************************************************ |
| |
| void GetAllTypefacesParser::operator()(Message &msg) |
| { |
| std::vector<std::wstring> typefaces; |
| TFontManager::instance()->getAllTypefaces(typefaces); |
| |
| msg << clr << QString("ok") << typefaces; |
| } |
| |
| //************************************************************************ |
| // SetFamily Parser |
| //************************************************************************ |
| |
| void SetFamilyParser::operator()(Message &msg) |
| { |
| std::wstring family; |
| msg >> family >> clr; |
| |
| TFontManager::instance()->setFamily(family); |
| msg << QString("ok"); |
| } |
| |
| //************************************************************************ |
| // SetTypeface Parser |
| //************************************************************************ |
| |
| void SetTypefaceParser::operator()(Message &msg) |
| { |
| std::wstring typeface; |
| msg >> typeface >> clr; |
| |
| TFontManager *fm = TFontManager::instance(); |
| fm->setTypeface(typeface); |
| msg << QString("ok") |
| << fm->getLineAscender() |
| << fm->getLineDescender(); |
| } |
| |
| //************************************************************************ |
| // SetSize Parser |
| //************************************************************************ |
| |
| void SetSizeParser::operator()(Message &msg) |
| { |
| int size; |
| msg >> size >> clr; |
| |
| TFontManager *fm = TFontManager::instance(); |
| fm->setSize(size); |
| msg << QString("ok") |
| << fm->getLineAscender() |
| << fm->getLineDescender(); |
| } |
| |
| //************************************************************************ |
| // GetCurrentFamily Parser |
| //************************************************************************ |
| |
| void GetCurrentFamilyParser::operator()(Message &msg) |
| { |
| std::wstring family(TFontManager::instance()->getCurrentFamily()); |
| msg << clr << QString("ok") << family; |
| } |
| |
| //************************************************************************ |
| // GetCurrentTypeface Parser |
| //************************************************************************ |
| |
| void GetCurrentTypefaceParser::operator()(Message &msg) |
| { |
| std::wstring typeface(TFontManager::instance()->getCurrentTypeface()); |
| msg << clr << QString("ok") << typeface; |
| } |
| |
| //************************************************************************ |
| // GetDistance Parser |
| //************************************************************************ |
| |
| void GetDistanceParser::operator()(Message &msg) |
| { |
| wchar_t firstChar, secondChar; |
| msg >> firstChar >> secondChar >> clr; |
| |
| TPoint dist = TFontManager::instance()->getDistance(firstChar, secondChar); |
| msg << QString("ok") << dist.x << dist.y; |
| } |
| |
| //************************************************************************ |
| // DrawCharVI Parser |
| //************************************************************************ |
| |
| void DrawCharVIParser::operator()(Message &msg) |
| { |
| wchar_t charCode, nextCode; |
| msg >> charCode >> nextCode >> clr; |
| |
| TVectorImageP vi(new TVectorImage); |
| |
| TPoint p = TFontManager::instance()->drawChar(vi, charCode, nextCode); |
| msg << QString("ok") << p.x << p.y; |
| |
| //Write the vector image |
| std::vector<TThickPoint> cps; |
| |
| unsigned int i, strokesCount = vi->getStrokeCount(); |
| for (i = 0; i < strokesCount; ++i) { |
| TStroke *stroke = vi->getStroke(i); |
| |
| cps.clear(); |
| stroke->getControlPoints(cps); |
| |
| msg << cps; |
| } |
| } |
| |
| //************************************************************************ |
| // DrawCharGR Parser |
| //************************************************************************ |
| |
| void DrawCharGRParser::operator()(Message &msg) |
| { |
| int ink; |
| QString shMemId; |
| wchar_t charCode, nextCode; |
| msg >> ink >> shMemId >> charCode >> nextCode >> clr; |
| |
| //Build the character |
| TRasterGR8P charRas; |
| TPoint unused; |
| TPoint p = TFontManager::instance()->drawChar(charRas, unused, charCode, nextCode); |
| |
| //Retrieve the raster size |
| int lx = charRas->getLx(), ly = charRas->getLy(); |
| int size = lx * ly * sizeof(TPixelGR8); |
| |
| //Request a shared memory segment of that size |
| { |
| tipc::DefaultMessageParser<SHMEM_REQUEST> msgParser; |
| Message shMsg; |
| |
| shMsg << shMemId << size << reset; |
| msgParser(shMsg); |
| |
| QString str; |
| shMsg >> reset >> str; |
| if (str != QString("ok")) { |
| msg << QString("err"); |
| return; |
| } |
| } |
| |
| //Copy charRas to the shared segment |
| QSharedMemory shmem(shMemId); |
| shmem.attach(); |
| shmem.lock(); |
| |
| memcpy(shmem.data(), charRas->getRawData(), size); |
| |
| shmem.unlock(); |
| shmem.detach(); |
| |
| msg << QString("ok") << lx << ly << p.x << p.y; |
| } |
| |
| //************************************************************************ |
| // DrawCharCM Parser |
| //************************************************************************ |
| |
| void DrawCharCMParser::operator()(Message &msg) |
| { |
| int ink; |
| QString shMemId; |
| wchar_t charCode, nextCode; |
| msg >> ink >> shMemId >> charCode >> nextCode >> clr; |
| |
| //Build the character |
| TRasterCM32P charRas; |
| TPoint unused; |
| TPoint p = TFontManager::instance()->drawChar(charRas, unused, ink, charCode, nextCode); |
| |
| //Retrieve the raster size |
| int lx = charRas->getLx(), ly = charRas->getLy(); |
| int size = lx * ly * sizeof(TPixelCM32); |
| |
| //Request a shared memory segment of that size |
| { |
| tipc::DefaultMessageParser<SHMEM_REQUEST> msgParser; |
| Message shMsg; |
| |
| shMsg << shMemId << size << reset; |
| msgParser(shMsg); |
| |
| QString str; |
| shMsg >> reset >> str; |
| if (str != QString("ok")) { |
| msg << QString("err"); |
| return; |
| } |
| } |
| |
| //Copy charRas to the shared segment |
| QSharedMemory shmem(shMemId); |
| shmem.attach(); |
| shmem.lock(); |
| |
| memcpy(shmem.data(), charRas->getRawData(), size); |
| |
| shmem.unlock(); |
| shmem.detach(); |
| |
| msg << QString("ok") << lx << ly << p.x << p.y; |
| } |
| |
| } //namespace font_io |
| |
| #endif // !__LP64 |
| #endif // MACOSX |
| |