You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by cx...@apache.org on 2018/06/19 09:41:26 UTC
[39/50] [abbrv] incubator-weex git commit: [WEEX-441][core] mv core
logic from core_android_impl to bridge.cpp
[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 <qh...@gmail.com>
Authored: Thu Jun 7 16:32:18 2018 +0800
Committer: YorkShen <sh...@gmail.com>
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