From c7964fd0793cbd2c09822ecac461b4cb8641a927 Mon Sep 17 00:00:00 2001 From: Oleg Korshul Date: Wed, 14 Jun 2023 00:51:51 +0300 Subject: [PATCH] Refactoring --- DesktopEditor/doctrenderer/docbuilder_p.cpp | 11 +++++-- DesktopEditor/doctrenderer/doctrenderer.cpp | 32 +++++++------------ .../doctrenderer/js_internal/js_base.cpp | 10 ++++++ .../doctrenderer/js_internal/js_base.h | 3 ++ 4 files changed, 34 insertions(+), 22 deletions(-) diff --git a/DesktopEditor/doctrenderer/docbuilder_p.cpp b/DesktopEditor/doctrenderer/docbuilder_p.cpp index 5a761cf738..4025add51a 100644 --- a/DesktopEditor/doctrenderer/docbuilder_p.cpp +++ b/DesktopEditor/doctrenderer/docbuilder_p.cpp @@ -50,7 +50,7 @@ CV8RealTimeWorker::CV8RealTimeWorker(NSDoctRenderer::CDocBuilder* pBuilder) m_context = new CJSContext(); CJSContextScope scope(m_context); - CJSContext::Embed(); + CJSContext::Embed(false); CJSContext::Embed(); NSJSBase::CreateDefaults(); @@ -58,10 +58,17 @@ CV8RealTimeWorker::CV8RealTimeWorker(NSDoctRenderer::CDocBuilder* pBuilder) CJSContext::Embed(false); CJSContext::Embed(false); + + JSSmart global = m_context->GetGlobal(); + JSSmart oBuilderJS = CJSContext::createEmbedObject("CBuilderEmbed"); + global->set("builderJS", oBuilderJS); + + JSSmart oNativeCtrl = CJSContext::createEmbedObject("CNativeControlEmbed"); + global->set("native", oNativeCtrl); + CBuilderEmbed* pBuilderJSNative = static_cast(oBuilderJS->getNative()); pBuilderJSNative->m_pBuilder = pBuilder; - m_context->GetGlobal()->set("builderJS", oBuilderJS->toValue().GetPointer()); } CV8RealTimeWorker::~CV8RealTimeWorker() { diff --git a/DesktopEditor/doctrenderer/doctrenderer.cpp b/DesktopEditor/doctrenderer/doctrenderer.cpp index ba9e2a60a7..5d3adc86c5 100644 --- a/DesktopEditor/doctrenderer/doctrenderer.cpp +++ b/DesktopEditor/doctrenderer/doctrenderer.cpp @@ -543,12 +543,20 @@ namespace NSDoctRenderer if (true) { CJSContextScope scope(context); - CJSContext::Embed(); + CJSContext::Embed(false); CJSContext::Embed(); NSJSBase::CreateDefaults(); JSSmart try_catch = context->GetExceptions(); + JSSmart global_js = context->GetGlobal(); + + JSSmart oNativeCtrl = CJSContext::createEmbedObject("CNativeControlEmbed"); + global_js->set("native", oNativeCtrl); + + NSNativeControl::CNativeControl* pNative = static_cast(oNativeCtrl->getNative()->getObject()); + pNative->m_sConsoleLogFile = m_sConsoleLogFile; + LOGGER_SPEED_LAP("compile"); JSSmart res = context->runScript(strScript, try_catch, sCachePath); @@ -561,29 +569,10 @@ namespace NSDoctRenderer LOGGER_SPEED_LAP("run"); //--------------------------------------------------------------- - JSSmart global_js = context->GetGlobal(); JSSmart args[1]; args[0] = CJSContext::createInt(0); - NSNativeControl::CNativeControl* pNative = NULL; - // GET_NATIVE_ENGINE - if (!bIsBreak) - { - JSSmart js_result2 = global_js->call_func("GetNativeEngine", 1, args); - if (try_catch->Check()) - { - strError = L"code=\"run\""; - bIsBreak = true; - } - else - { - JSSmart objNative = js_result2->toObject(); - pNative = (NSNativeControl::CNativeControl*)objNative->getNative()->getObject(); - pNative->m_sConsoleLogFile = m_sConsoleLogFile; - } - } - if (pNative != NULL) { pNative->m_pChanges = &m_oParams.m_arChanges; @@ -1079,6 +1068,9 @@ namespace NSDoctRenderer CJSContext::Embed(); NSJSBase::CreateDefaults(); + JSSmart global = context->GetGlobal(); + global->set("native", CJSContext::createEmbedObject("CNativeControlEmbed")); + JSSmart try_catch = context->GetExceptions(); context->runScript(strScript, try_catch, sCachePath); diff --git a/DesktopEditor/doctrenderer/js_internal/js_base.cpp b/DesktopEditor/doctrenderer/js_internal/js_base.cpp index e25d025e23..d4d56fe634 100644 --- a/DesktopEditor/doctrenderer/js_internal/js_base.cpp +++ b/DesktopEditor/doctrenderer/js_internal/js_base.cpp @@ -70,6 +70,16 @@ namespace NSJSBase { { } + void CJSObject::set(const char* name, JSSmart value) + { + this->set(name, value.GetPointer()); + } + void CJSObject::set(const char* name, JSSmart obj) + { + JSSmart value = obj->toValue(); + this->set(name, value.GetPointer()); + } + CJSArray::CJSArray() { } diff --git a/DesktopEditor/doctrenderer/js_internal/js_base.h b/DesktopEditor/doctrenderer/js_internal/js_base.h index b5764aaa5c..de2e4cf24f 100644 --- a/DesktopEditor/doctrenderer/js_internal/js_base.h +++ b/DesktopEditor/doctrenderer/js_internal/js_base.h @@ -229,6 +229,9 @@ namespace NSJSBase virtual void set(const char* name, CJSValue* value) = 0; virtual void set(const char* name, const int& value) = 0; virtual void set(const char* name, const double& value) = 0; + // Common funcs + void set(const char* name, JSSmart value); + void set(const char* name, JSSmart value); /** * Returns a pointer to the native embedded object. */