[WEEX-441][core] mv core logic from core_android_impl to bridge.cpp * [core] merge fix
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/676d0eb4 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/676d0eb4 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/676d0eb4 Branch: refs/heads/release Commit: 676d0eb4d29f70dce447d916becf841ddb03198c Parents: ece3827 Author: zhongcang <[email protected]> Authored: Thu Jun 7 16:32:18 2018 +0800 Committer: YorkShen <[email protected]> Committed: Thu Jun 14 16:26:31 2018 +0800 ---------------------------------------------------------------------- weex_core/Source/CMakeLists.txt | 1 + .../bridge/impl/weexcore_impl_android.cpp | 194 ++++++------------ weex_core/Source/core/bridge/bridge.cpp | 197 +++++++++++++++++++ weex_core/Source/core/bridge/bridge.h | 28 +++ weex_core/Source/core/bridge/js_bridge.h | 3 - 5 files changed, 284 insertions(+), 139 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/CMakeLists.txt ---------------------------------------------------------------------- diff --git a/weex_core/Source/CMakeLists.txt b/weex_core/Source/CMakeLists.txt index 6cb9c18..a63d430 100644 --- a/weex_core/Source/CMakeLists.txt +++ b/weex_core/Source/CMakeLists.txt @@ -51,6 +51,7 @@ set(COMMON_SRCS ./core/manager/weex_core_manager.cpp ./core/bridge/js_bridge.cpp ./core/parser/dom_wson.cpp + ./core/bridge/bridge.cpp ) add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/wson) include_directories(${CMAKE_CURRENT_SOURCE_DIR}/wson) http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp index 3febd5b..e731026 100644 --- a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp +++ b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp @@ -26,6 +26,7 @@ #include <core/render/node/render_object.h> #include <core/config/core_environment.h> #include <map> +#include <core/manager/weex_core_manager.h> using namespace WeexCore; @@ -119,30 +120,28 @@ static void BindMeasurementToRenderObject(JNIEnv* env, jobject jcaller, } static void OnInstanceClose(JNIEnv *env, jobject jcaller, jstring instanceId) { - RenderManager::GetInstance()->ClosePage(jString2StrFast(env, instanceId)); + WeexCoreManager::getInstance()->getPlatformBridge()->onInstanceClose( + env->GetStringUTFChars(instanceId, JNI_FALSE) + ); } static void SetDefaultHeightAndWidthIntoRootDom(JNIEnv *env, jobject jcaller, jstring instanceId, jfloat defaultWidth, jfloat defaultHeight, jboolean isWidthWrapContent, jboolean isHeightWrapContent) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - -#if RENDER_LOG - LOGD("[JNI] SetDefaultHeightAndWidthIntoRootDom >>>> pageId: %s, defaultWidth: %f, defaultHeight: %f", - page->PageId().c_str(), defaultWidth,defaultHeight); -#endif - - page->SetDefaultHeightAndWidthIntoRootRender(defaultWidth, defaultHeight, isWidthWrapContent, isHeightWrapContent); + WeexCoreManager::getInstance()->getPlatformBridge()->setDefaultHeightAndWidthIntoRootDom( + env->GetStringUTFChars(instanceId, JNI_FALSE), + defaultWidth, + defaultHeight, + isWidthWrapContent, + isHeightWrapContent + ); } static void SetRenderContainerWrapContent(JNIEnv* env, jobject jcaller, jboolean wrap, jstring instanceId) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - page->set_is_render_container_width_wrap_content(wrap); + const char *cInstanceId = env->GetStringUTFChars(instanceId, JNI_FALSE); + WeexCoreManager::getInstance()->getPlatformBridge()->setRenderContainerWrapContent( + cInstanceId,wrap + ); } static jlongArray GetFirstScreenRenderTime(JNIEnv *env, jobject jcaller, jstring instanceId) { @@ -211,153 +210,77 @@ static jlongArray GetRenderFinishTime(JNIEnv *env, jobject jcaller, jstring inst //Notice that this method is invoked from main thread. static jboolean NotifyLayout(JNIEnv* env, jobject jcaller, jstring instanceId) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page != nullptr) { - - if (!page->need_layout_.load()) { - page->need_layout_.store(true); - } - - bool ret = !page->has_fore_layout_action_.load() && page->is_dirty(); - if (ret) { - page->has_fore_layout_action_.store(true); - } + bool ret = WeexCoreManager::getInstance()->getPlatformBridge()->notifyLayout( + env->GetStringUTFChars(instanceId, JNI_FALSE) + ); return ret ? JNI_TRUE : JNI_FALSE; - } } //Notice that this method is invoked from JS thread. static void ForceLayout(JNIEnv *env, jobject jcaller, jstring instanceId) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page != nullptr) { - -#if RENDER_LOG - LOGD("[JNI] ForceLayout >>>> pageId: %s, needForceLayout: %s", jString2StrFast(env, instanceId).c_str(), page->hasForeLayoutAction.load()?"true":"false"); -#endif - - page->LayoutImmediately(); - page->has_fore_layout_action_.store(false); - } + WeexCoreManager::getInstance()->getPlatformBridge()->forceLayout( + env->GetStringUTFChars(instanceId, JNI_FALSE) + ); } static void SetStyleWidth(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jfloat value) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - render->setStyleWidthLevel(CSS_STYLE); - render->setStyleWidth(value, true); - page->set_is_dirty(true); + WeexCoreManager::getInstance()->getPlatformBridge()->setStyleWidth( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + value + ); } static void SetStyleHeight(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jfloat value) { - - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - - render->setStyleHeightLevel(CSS_STYLE); - render->setStyleHeight(value); - page->set_is_dirty(true); + WeexCoreManager::getInstance()->getPlatformBridge()->setStyleHeight( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + value + ); } static void SetMargin(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jint edge, jfloat value) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - - if (edge == 0) { - render->setMargin(kMarginTop, value); - } else if (edge == 1) { - render->setMargin(kMarginBottom, value); - } else if (edge == 2) { - render->setMargin(kMarginLeft, value); - } else if (edge == 3) { - render->setMargin(kMarginRight, value); - } else if (edge == 4) { - render->setMargin(kMarginALL, value); - } - page->set_is_dirty(true); + WeexCoreManager::getInstance()->getPlatformBridge()->setMargin( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + edge, + value + ); } static void SetPadding(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jint edge, jfloat value) { - - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - - if (edge == 0) { - render->setPadding(kPaddingTop, value); - } else if (edge == 1) { - render->setPadding(kPaddingBottom, value); - } else if (edge == 2) { - render->setPadding(kPaddingLeft, value); - } else if (edge == 3) { - render->setPadding(kPaddingRight, value); - } else if (edge == 4) { - render->setPadding(kPaddingALL, value); - } - page->set_is_dirty(true); + WeexCoreManager::getInstance()->getPlatformBridge()->setPadding( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + edge, + value + ); } static void SetPosition(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jint edge, jfloat value) { - - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - - if (edge == 0) { - render->setStylePosition(kPositionEdgeTop, value); - } else if (edge == 1) { - render->setStylePosition(kPositionEdgeBottom, value); - } else if (edge == 2) { - render->setStylePosition(kPositionEdgeLeft, value); - } else if (edge == 3) { - render->setStylePosition(kPositionEdgeRight, value); - } - page->set_is_dirty(true); + WeexCoreManager::getInstance()->getPlatformBridge()->setPosition( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + edge, + value + ); } static void MarkDirty(JNIEnv *env, jobject jcaller, jstring instanceId, jstring ref, jboolean dirty) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - if (dirty) { - - RenderObject *render = page->GetRenderObject(jString2StrFast(env, ref)); - if (render == nullptr) - return; - render->markDirty(); - } + WeexCoreManager::getInstance()->getPlatformBridge()->markDirty( + env->GetStringUTFChars(instanceId, JNI_FALSE), + env->GetStringUTFChars(ref, JNI_FALSE), + dirty + ); } static void RegisterCoreEnv(JNIEnv *env, jobject jcaller, jstring key, jstring value) { @@ -367,11 +290,10 @@ static void RegisterCoreEnv(JNIEnv *env, jobject jcaller, jstring key, jstring v } static void SetViewPortWidth(JNIEnv *env, jobject jcaller, jstring instanceId, jfloat value) { - RenderPage *page = RenderManager::GetInstance()->GetPage(jString2StrFast(env, instanceId)); - if (page == nullptr) - return; - - page->set_viewport_width(value); + const char *cInstanceId = env->GetStringUTFChars(instanceId, JNI_FALSE); + WeexCoreManager::getInstance()->getPlatformBridge()->setViewPortWidth( + cInstanceId,value + ); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/bridge.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/bridge/bridge.cpp b/weex_core/Source/core/bridge/bridge.cpp new file mode 100644 index 0000000..22d9139 --- /dev/null +++ b/weex_core/Source/core/bridge/bridge.cpp @@ -0,0 +1,197 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +#include "bridge.h" +#include <core/render/manager/render_manager.h> +#include <core/render/page/render_page.h> +#include <core/render/node/render_object.h> + +namespace WeexCore { + void Bridge::setStyleWidth(const char *instanceId, const char *ref, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + + render->setStyleWidthLevel(CSS_STYLE); + render->setStyleWidth(value, true); + page->set_is_dirty(true); + } + + void Bridge::setStyleHeight(const char *instanceId, const char *ref, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + + render->setStyleHeightLevel(CSS_STYLE); + render->setStyleHeight(value); + page->set_is_dirty(true); + } + + + void Bridge::setMargin(const char *instanceId, const char *ref, int32_t edge, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + + if (edge == 0) { + render->setMargin(kMarginTop, value); + } else if (edge == 1) { + render->setMargin(kMarginBottom, value); + } else if (edge == 2) { + render->setMargin(kMarginLeft, value); + } else if (edge == 3) { + render->setMargin(kMarginRight, value); + } else if (edge == 4) { + render->setMargin(kMarginALL, value); + } + page->set_is_dirty(true); + } + + void Bridge::setPadding(const char *instanceId, const char *ref, int32_t edge, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + + if (edge == 0) { + render->setPadding(kPaddingTop, value); + } else if (edge == 1) { + render->setPadding(kPaddingBottom, value); + } else if (edge == 2) { + render->setPadding(kPaddingLeft, value); + } else if (edge == 3) { + render->setPadding(kPaddingRight, value); + } else if (edge == 4) { + render->setPadding(kPaddingALL, value); + } + page->set_is_dirty(true); + } + + void Bridge::setPosition(const char *instanceId, const char *ref, int32_t edge, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + + if (edge == 0) { + render->setStylePosition(kPositionEdgeTop, value); + } else if (edge == 1) { + render->setStylePosition(kPositionEdgeBottom, value); + } else if (edge == 2) { + render->setStylePosition(kPositionEdgeLeft, value); + } else if (edge == 3) { + render->setStylePosition(kPositionEdgeRight, value); + } + page->set_is_dirty(true); + } + + void Bridge::markDirty(const char *instanceId, const char *ref, bool dirty) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + if (dirty) { + RenderObject *render = page->GetRenderObject(std::string(ref)); + if (render == nullptr) + return; + render->markDirty(); + } + } + + void Bridge::setViewPortWidth(const char *instanceId, float value) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + page->set_viewport_width(value); + } + + void Bridge::setDefaultHeightAndWidthIntoRootDom(const char *instanceId, const float defaultWidth, + const float defaultHeight, + const bool isWidthWrapContent, const bool isHeightWrapContent) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) { + return; + } + +#if RENDER_LOG + LOGD("[JNI] SetDefaultHeightAndWidthIntoRootDom >>>> pageId: %s, defaultWidth: %f, defaultHeight: %f", + page->PageId().c_str(), defaultWidth,defaultHeight); +#endif + page->SetDefaultHeightAndWidthIntoRootRender(defaultWidth, defaultHeight, isWidthWrapContent, + isHeightWrapContent); + } + + void Bridge::setRenderContainerWrapContent(const char *instanceId, bool wrap) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page == nullptr) + return; + + page->set_is_render_container_width_wrap_content(wrap); + + } + + void Bridge::forceLayout(const char *instanceId) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page != nullptr) { + +#if RENDER_LOG + LOGD("[JNI] ForceLayout >>>> pageId: %s, needForceLayout: %s", jString2StrFast(env, instanceId).c_str(), page->hasForeLayoutAction.load()?"true":"false"); +#endif + page->LayoutImmediately(); + page->has_fore_layout_action_.store(false); + } + } + + bool Bridge::notifyLayout(const char *instanceId) { + RenderPage *page = RenderManager::GetInstance()->GetPage(std::string(instanceId)); + if (page != nullptr) { + + if (!page->need_layout_.load()) { + page->need_layout_.store(true); + } + + bool ret = !page->has_fore_layout_action_.load() && page->is_dirty(); + if (ret) { + page->has_fore_layout_action_.store(true); + } + } + } + + void Bridge::onInstanceClose(const char *instanceId) { + RenderManager::GetInstance()->ClosePage(std::string(instanceId)); + } +} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/bridge.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/bridge/bridge.h b/weex_core/Source/core/bridge/bridge.h index 5660e4c..8da0fdc 100644 --- a/weex_core/Source/core/bridge/bridge.h +++ b/weex_core/Source/core/bridge/bridge.h @@ -35,6 +35,7 @@ namespace WeexCore { class Bridge { public: + /** platform impl **/ virtual void setJSVersion(const char* version) = 0; virtual void reportException(const char* pageId, const char *func, const char *exception_string) = 0; @@ -100,6 +101,33 @@ namespace WeexCore { virtual int callHasTransitionPros(const char* pageId, const char* ref, std::vector<std::pair<std::string, std::string>> *style)=0; + + /** core api **/ + void setStyleWidth(const char *instanceId, const char *ref, float value); + void setStyleHeight(const char *instanceId, const char *ref, float value); + + void setMargin(const char *instanceId,const char *ref, int32_t edge, float value); + + void setPadding(const char *instanceId, const char *ref, int32_t edge, float value); + + void setPosition(const char *instanceId, const char *ref, int32_t edge, float value); + + void markDirty(const char *instanceId,const char *ref, bool dirty); + + void setViewPortWidth(const char *instanceId, float value); + + void setDefaultHeightAndWidthIntoRootDom(const char *instanceId, const float defaultWidth, const float defaultHeight, + const bool isWidthWrapContent, const bool isHeightWrapContent); + void setRenderContainerWrapContent(const char* instanceId,bool wrap); + + /**Notice that this method is invoked from JS thread.**/ + void forceLayout(const char *instanceId); + + /**Notice that this method is invoked from JS thread.**/ + bool notifyLayout(const char *instanceId); + + + void onInstanceClose(const char *instanceId) ; }; } //end WeexCore #endif //Bridge_h http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/676d0eb4/weex_core/Source/core/bridge/js_bridge.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/bridge/js_bridge.h b/weex_core/Source/core/bridge/js_bridge.h index ee9a771..f208164 100644 --- a/weex_core/Source/core/bridge/js_bridge.h +++ b/weex_core/Source/core/bridge/js_bridge.h @@ -16,9 +16,6 @@ * specific language governing permissions and limitations * under the License. */ -// -// Created by é佩翰 on 2018/6/1. -// #ifndef WEEXCORE_JS_BRIDGE_H #define WEEXCORE_JS_BRIDGE_H
