From dc0ea6a7f38520a85c852459b8fb7f22a782ad53 Mon Sep 17 00:00:00 2001 From: "Oleg.Korshul" Date: Sat, 26 Oct 2024 16:28:48 +0300 Subject: [PATCH] Add fromJS functionality for Images --- .../doctrenderer/json/serialization.h | 58 +++++++++++++++++-- 1 file changed, 54 insertions(+), 4 deletions(-) diff --git a/DesktopEditor/doctrenderer/json/serialization.h b/DesktopEditor/doctrenderer/json/serialization.h index fca8fd82e2..4f681c3503 100644 --- a/DesktopEditor/doctrenderer/json/serialization.h +++ b/DesktopEditor/doctrenderer/json/serialization.h @@ -7,17 +7,17 @@ #include -class CAppImage : public CGraphicsAppImage +class CAppImageTo : public CGraphicsAppImage { private: NSJSON::CValueRef* m_image; public: - CAppImage(const NSJSON::CValue& image) : CGraphicsAppImage() + CAppImageTo(const NSJSON::CValue& image) : CGraphicsAppImage() { m_image = new NSJSON::CValueRef(image); } - virtual ~CAppImage() + virtual ~CAppImageTo() { if (m_image) delete m_image; @@ -41,6 +41,37 @@ public: } }; +class CAppImageFrom : public CGraphicsAppImage +{ +public: + unsigned char* m_pData; + int m_nW; + int m_nH; +public: + CAppImageFrom() : CGraphicsAppImage() + { + m_pData = NULL; + m_nW = 0; + m_nH = 0; + } + virtual ~CAppImageFrom() + { + } + +public: + virtual unsigned char* GetBits(int& w, int& h) + { + return m_pData; + } + virtual unsigned char* AllocBits(const int& w, const int& h) + { + m_nW = w; + m_nH = h; + m_pData = NSJSON::CValue::AllocImageBits(w, h); + return m_pData; + } +}; + namespace NSJSON { static JSSmart toJS(const CValue& value) @@ -88,7 +119,7 @@ namespace NSJSON else if (value.IsImage()) { JSSmart wrap = CJSContext::createEmbedObject("CGraphicsEmbed"); - ((CGraphicsEmbed*)wrap->getNative())->SetAppImage(new CAppImage(value)); + ((CGraphicsEmbed*)wrap->getNative())->SetAppImage(new CAppImageTo(value)); ret = wrap->toValue(); } // objects (there is no need for IsObject()) @@ -171,6 +202,25 @@ namespace NSJSON else if (jsValue->isObject()) { JSSmart jsObj = jsValue->toObject(); + + CJSEmbedObject* pNative = jsObj->getNative(); + if (pNative != NULL) + { + CGraphicsEmbed* pGrEmbed = dynamic_cast(pNative); + if (pGrEmbed) + { + CAppImageFrom* pAppImage = dynamic_cast(pGrEmbed->GetAppImage()); + if (pAppImage) + { + return NSJSON::CValue::CreateImage(pAppImage->m_pData, + pAppImage->m_nW, + pAppImage->m_nH, + pAppImage->GetRgba() ? ImageFormat::ifRGBA : ImageFormat::ifBGRA, + false); + } + } + } + std::vector properties = jsObj->getPropertyNames(); ret = CValue::CreateObject(); for (const std::string& name : properties)