[WEEX-442][Core] Fix setViewport
Project: http://git-wip-us.apache.org/repos/asf/incubator-weex/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-weex/commit/578c3571 Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/578c3571 Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/578c3571 Branch: refs/heads/release Commit: 578c35716166b12df30ac8f3039036cd922ce4af Parents: 44fd78c Author: miomin <[email protected]> Authored: Thu Jun 14 19:38:26 2018 +0800 Committer: miomin <[email protected]> Committed: Thu Jun 14 19:38:26 2018 +0800 ---------------------------------------------------------------------- .../java/com/taobao/weex/WXSDKInstance.java | 1 - .../java/com/taobao/weex/bridge/WXBridge.java | 8 ----- .../com/taobao/weex/bridge/WXBridgeManager.java | 4 --- .../java/com/taobao/weex/common/IWXBridge.java | 2 -- .../com/taobao/weex/ui/module/WXMetaModule.java | 1 - .../bridge/impl/weexcore_impl_android.cpp | 8 ----- .../jniprebuild/jniheader/WXBridge_jni.h | 10 ------ weex_core/Source/base/ViewUtils.h | 4 +-- weex_core/Source/core/bridge/js_bridge.cpp | 4 +++ .../core/render/manager/render_manager.cpp | 34 ++++++++++++++++++++ .../Source/core/render/manager/render_manager.h | 19 ++++++++++- .../Source/core/render/node/render_list.cpp | 13 ++++---- .../Source/core/render/node/render_mask.cpp | 5 +-- .../Source/core/render/node/render_object.cpp | 11 +------ .../Source/core/render/node/render_object.h | 4 +-- .../Source/core/render/page/render_page.cpp | 3 +- weex_core/Source/core/render/page/render_page.h | 7 ---- 17 files changed, 71 insertions(+), 67 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java index d7d8581..9f59e30 100644 --- a/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java +++ b/android/sdk/src/main/java/com/taobao/weex/WXSDKInstance.java @@ -318,7 +318,6 @@ public class WXSDKInstance implements IWXActivityStateListener,View.OnLayoutChan public void setInstanceViewPortWidth(int instanceViewPortWidth) { this.mInstanceViewPortWidth = instanceViewPortWidth; - WXSDKManager.getInstance().getWXBridgeManager().setViewPortWidth(getInstanceId(), instanceViewPortWidth); } public int getInstanceViewPortWidth(){ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java index cc2d1a9..4059d97 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridge.java @@ -94,9 +94,6 @@ public class WXBridge implements IWXBridge { private native void nativeRegisterCoreEnv(String key, String value); - private native void nativeSetViewPortWidth(String instanceId, float value); - - /** * update global config, * @param config params @@ -565,11 +562,6 @@ public class WXBridge implements IWXBridge { nativeRegisterCoreEnv(key, value); } - @Override - public void setViewPortWidth(String instanceId, float value) { - nativeSetViewPortWidth(instanceId, value); - } - public void reportNativeInitStatus(String statusCode, String errorMsg) { if (WXErrorCode.WX_JS_FRAMEWORK_INIT_SINGLE_PROCESS_SUCCESS.getErrorCode().equals(statusCode) || WXErrorCode.WX_JS_FRAMEWORK_INIT_FAILED.getErrorCode().equals(statusCode)) { http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java index 5d20f14..9726098 100644 --- a/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java +++ b/android/sdk/src/main/java/com/taobao/weex/bridge/WXBridgeManager.java @@ -2672,10 +2672,6 @@ public class WXBridgeManager implements Callback, BactchExecutor { return mWXBridge.getRenderFinishTime(instanceId); } - public void setViewPortWidth(String instanceId, float value) { - mWXBridge.setViewPortWidth(instanceId, value); - } - public void setMargin(String instanceId, String ref, CSSShorthand.EDGE edge, float value) { mWXBridge.setMargin(instanceId, ref, edge, value); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java index 25821e3..0207d86 100644 --- a/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java +++ b/android/sdk/src/main/java/com/taobao/weex/common/IWXBridge.java @@ -186,7 +186,5 @@ public interface IWXBridge extends IWXObject { void registerCoreEnv(String key, String value); - void setViewPortWidth(String instanceId, float value); - void reportNativeInitStatus(String statusCode, String errorMsg); } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java ---------------------------------------------------------------------- diff --git a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java index 93a01c7..c85fb5e 100644 --- a/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java +++ b/android/sdk/src/main/java/com/taobao/weex/ui/module/WXMetaModule.java @@ -65,7 +65,6 @@ public class WXMetaModule extends WXModule { } else { int width = jsObj.getInteger(WIDTH); if (width > 0) { - // todo é®é¢ï¼js -> java -> nativeï¼åºè¯¥å¨nativeå°±æ¦æªä¸è¯·æ±ï¼å¹¶ä¿®æ¹ViewPortWidth mWXSDKInstance.setInstanceViewPortWidth(width); } WXLogUtils.d("[WXMetaModule] setViewport success[width]=" + width); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/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 e731026..94a3ac6 100644 --- a/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp +++ b/weex_core/Source/android/bridge/impl/weexcore_impl_android.cpp @@ -289,14 +289,6 @@ static void RegisterCoreEnv(JNIEnv *env, jobject jcaller, jstring key, jstring v WXCoreEnvironment::getInstance()->AddOption(jString2StrFast(env, key), jString2StrFast(env, value)); } -static void SetViewPortWidth(JNIEnv *env, jobject jcaller, jstring instanceId, jfloat value) { - const char *cInstanceId = env->GetStringUTFChars(instanceId, JNI_FALSE); - WeexCoreManager::getInstance()->getPlatformBridge()->setViewPortWidth( - cInstanceId,value - ); -} - - static jint InitFramework(JNIEnv *env, jobject object, jstring script, jobject params) { jThis = env->NewGlobalRef(object); jclass tempClass = env->FindClass( http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/android/jniprebuild/jniheader/WXBridge_jni.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/android/jniprebuild/jniheader/WXBridge_jni.h b/weex_core/Source/android/jniprebuild/jniheader/WXBridge_jni.h index 424b1f2..3af71be 100644 --- a/weex_core/Source/android/jniprebuild/jniheader/WXBridge_jni.h +++ b/weex_core/Source/android/jniprebuild/jniheader/WXBridge_jni.h @@ -134,10 +134,6 @@ static void RegisterCoreEnv(JNIEnv* env, jobject jcaller, jstring key, jstring value); -static void SetViewPortWidth(JNIEnv* env, jobject jcaller, - jstring instanceId, - jfloat value); - static void UpdateGlobalConfig(JNIEnv* env, jobject jcaller, jstring config); @@ -305,12 +301,6 @@ static const JNINativeMethod kMethodsWXBridge[] = { "Ljava/lang/String;" ")" "V", reinterpret_cast<void*>(RegisterCoreEnv) }, - { "nativeSetViewPortWidth", -"(" -"Ljava/lang/String;" -"F" -")" -"V", reinterpret_cast<void*>(SetViewPortWidth) }, { "nativeUpdateGlobalConfig", "(" "Ljava/lang/String;" http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/base/ViewUtils.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/base/ViewUtils.h b/weex_core/Source/base/ViewUtils.h index f73aeca..d6cbf4e 100644 --- a/weex_core/Source/base/ViewUtils.h +++ b/weex_core/Source/base/ViewUtils.h @@ -64,7 +64,7 @@ namespace WeexCore { float realPx = (src * WXCoreEnvironment::getInstance()->DeviceWidth() / viewport); - float result = realPx > 0.005 && realPx < 1 ? 1 : rint(realPx); + float result = realPx > 0.005 && realPx < 1 ? 1.0f : realPx; return result; } @@ -120,7 +120,7 @@ namespace WeexCore { return NAN; float realPx = (pxValue * customViewport / WXCoreEnvironment::getInstance()->DeviceWidth()); - float result = realPx > 0.005 && realPx < 1 ? 1 : rint(realPx); + float result = realPx > 0.005 && realPx < 1 ? 1.0f : realPx; return result; } } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/bridge/js_bridge.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/bridge/js_bridge.cpp b/weex_core/Source/core/bridge/js_bridge.cpp index 17608d8..1163f05 100644 --- a/weex_core/Source/core/bridge/js_bridge.cpp +++ b/weex_core/Source/core/bridge/js_bridge.cpp @@ -47,6 +47,10 @@ namespace WeexCore { void *JSBridge::onCallNativeModule(const char *pageId, const char *module, const char *method, const char *arguments, int argumentsLength, const char *options, int optionsLength) { + + RenderManager::GetInstance()->CallNativeModule(pageId, module, method, arguments, argumentsLength, + options, optionsLength); + return WeexCoreManager::getInstance()->getPlatformBridge()->callNativeModule( pageId, module, method, arguments, argumentsLength, options, http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/manager/render_manager.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/manager/render_manager.cpp b/weex_core/Source/core/render/manager/render_manager.cpp index 0eebc82..699c29f 100644 --- a/weex_core/Source/core/render/manager/render_manager.cpp +++ b/weex_core/Source/core/render/manager/render_manager.cpp @@ -19,7 +19,10 @@ #include <utility> #include <vector> +#include <wson_parser.h> +#include "base/ViewUtils.h" +#include "core/css/constants_name.h" #include "base/TimeUtils.h" #include "core/layout/measure_func_adapter.h" #include "core/parser/dom_wson.h" @@ -183,6 +186,37 @@ bool RenderManager::CreateFinish(const std::string &page_id) { return page->CreateFinish(); } +bool RenderManager::CallNativeModule(const char *pageId, const char *module, const char *method, + const char *arguments, int argumentsLength, + const char *options, int optionsLength) { + if (strcmp(module, "meta") == 0) { + CallMetaModule(method, arguments); + } +} + +bool RenderManager::CallMetaModule(const char *method, const char *arguments) { + + if (strcmp(method, "setViewport") == 0) { + wson_parser parser(arguments); + if (parser.isArray(parser.nextType())) { + int size = parser.nextArraySize(); + for (int i = 0; i < size; i++) { + uint8_t value_type = parser.nextType(); + if (parser.isMap(value_type)) { + int map_size = parser.nextMapSize(); + for (int j = 0; j < map_size; j++) { + std::string key = parser.nextMapKeyUTF8(); + std::string value = parser.nextStringUTF8(parser.nextType()); + if (strcmp(key.c_str(), WIDTH) == 0) { + RenderManager::GetInstance()->set_viewport_width(getFloat(value.c_str())); + } + } + } + } + } + } +} + RenderPage *RenderManager::GetPage(const std::string &page_id) { std::map<std::string, RenderPage *>::iterator iter = this->pages_.find(page_id); http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/manager/render_manager.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/manager/render_manager.h b/weex_core/Source/core/render/manager/render_manager.h index 9abe2da..e7e0f44 100644 --- a/weex_core/Source/core/render/manager/render_manager.h +++ b/weex_core/Source/core/render/manager/render_manager.h @@ -22,13 +22,17 @@ #include <map> #include <string> +#include "core/css/constants_value.h" + namespace WeexCore { class RenderPage; class RenderManager { private: - RenderManager() {} + RenderManager() { + this->viewport_width_ = kDefaultViewPortWidth; + } ~RenderManager() {} @@ -75,6 +79,12 @@ class RenderManager { bool CreateFinish(const std::string &page_id); + bool CallNativeModule(const char *pageId, const char *module, const char *method, + const char *arguments, int argumentsLength, const char *options, + int optionsLength); + + bool CallMetaModule(const char *method, const char *arguments); + RenderPage *GetPage(const std::string &page_id); bool ClosePage(const std::string &page_id); @@ -86,9 +96,16 @@ class RenderManager { return g_pInstance; } + inline float viewport_width() const { return this->viewport_width_; } + + inline void set_viewport_width(float viewport_width) { + this->viewport_width_ = viewport_width; + } + private: static RenderManager *g_pInstance; std::map<std::string, RenderPage *> pages_; + float viewport_width_ = -1; }; } // namespace WeexCore http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/node/render_list.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_list.cpp b/weex_core/Source/core/render/node/render_list.cpp index 84df8ec..bce9384 100644 --- a/weex_core/Source/core/render/node/render_list.cpp +++ b/weex_core/Source/core/render/node/render_list.cpp @@ -18,6 +18,7 @@ */ #include <cmath> #include <utility> +#include <core/render/manager/render_manager.h> #include "base/ViewUtils.h" #include "core/css/constants_name.h" @@ -112,8 +113,8 @@ void RenderList::PreCalculateCellWidth() { this->available_width_ = TakeStyleWidth() - - getWebPxByWidth(getPaddingLeft(), GetRenderPage()->viewport_width()) - - getWebPxByWidth(getPaddingRight(), GetRenderPage()->viewport_width()); + getWebPxByWidth(getPaddingLeft(), RenderManager::GetInstance()->viewport_width()) - + getWebPxByWidth(getPaddingRight(), RenderManager::GetInstance()->viewport_width()); if (AUTO_VALUE == this->column_count_ && AUTO_VALUE == this->column_width_) { @@ -216,19 +217,19 @@ std::string RenderList::CalculateSpanOffset() { float RenderList::TakeStyleWidth() { float width = - getWebPxByWidth(getLayoutWidth(), GetRenderPage()->viewport_width()); + getWebPxByWidth(getLayoutWidth(), RenderManager::GetInstance()->viewport_width()); if (isnan(width) || width <= 0) { if (getParent() != nullptr) { width = getWebPxByWidth(getParent()->getLayoutWidth(), - GetRenderPage()->viewport_width()); + RenderManager::GetInstance()->viewport_width()); } if (isnan(width) || width <= 0) { width = getWebPxByWidth(RenderObject::getStyleWidth(), - GetRenderPage()->viewport_width()); + RenderManager::GetInstance()->viewport_width()); } } if (isnan(width) || width <= 0) { - width = GetViewPortWidth(); + width = RenderManager::GetInstance()->viewport_width(); } return width; } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/node/render_mask.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_mask.cpp b/weex_core/Source/core/render/node/render_mask.cpp index df925a2..8c80d0b 100644 --- a/weex_core/Source/core/render/node/render_mask.cpp +++ b/weex_core/Source/core/render/node/render_mask.cpp @@ -20,6 +20,7 @@ #include <utility> #include "base/ViewUtils.h" +#include "core/render/manager/render_manager.h" #include "core/config/core_environment.h" #include "core/css/constants_name.h" #include "core/render/node/render_mask.h" @@ -54,9 +55,9 @@ std::map<std::string, std::string> *RenderMask::GetDefaultStyle() { style->insert(std::pair<std::string, std::string>(POSITION, "absolute")); style->insert(std::pair<std::string, std::string>( - WIDTH, to_string(getWebPxByWidth(width, GetViewPortWidth())))); + WIDTH, to_string(getWebPxByWidth(width, RenderManager::GetInstance()->viewport_width())))); style->insert(std::pair<std::string, std::string>( - HEIGHT, to_string(getWebPxByWidth(height, GetViewPortWidth())))); + HEIGHT, to_string(getWebPxByWidth(height, RenderManager::GetInstance()->viewport_width())))); style->insert(std::pair<std::string, std::string>(TOP, "0")); return style; } http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/node/render_object.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_object.cpp b/weex_core/Source/core/render/node/render_object.cpp index fe0d25f..97f9287 100644 --- a/weex_core/Source/core/render/node/render_object.cpp +++ b/weex_core/Source/core/render/node/render_object.cpp @@ -305,15 +305,6 @@ const std::string RenderObject::GetAttr(const std::string &key) { } } -float RenderObject::GetViewPortWidth() { - if (this->viewport_width_ >= 0) return this->viewport_width_; - - RenderPage *page = GetRenderPage(); - if (page == nullptr) return kDefaultViewPortWidth; - - return page->viewport_width(); -} - int RenderObject::AddRenderObject(int index, RenderObject *child) { if (child == nullptr || index < -1) { return index; @@ -356,7 +347,7 @@ bool RenderObject::UpdateStyleInternal(const std::string key, functor(fallback); ret = true; } else { - float fvalue = getFloatByViewport(value, GetViewPortWidth()); + float fvalue = getFloatByViewport(value, RenderManager::GetInstance()->viewport_width()); if (!isnan(fvalue)) { functor(fvalue); ret = true; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/node/render_object.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_object.h b/weex_core/Source/core/render/node/render_object.h index 1a6352c..95e0c1a 100644 --- a/weex_core/Source/core/render/node/render_object.h +++ b/weex_core/Source/core/render/node/render_object.h @@ -31,8 +31,7 @@ #define convert_render_object_to_long(render) ((jlong)((intptr_t)render)) -#define convert_long_to_render_object(ptr) \ - ((RenderObject *)((intptr_t)ptr)) +#define convert_long_to_render_object(ptr) ((RenderObject *)((intptr_t)ptr)) namespace WeexCore { @@ -151,7 +150,6 @@ class RenderObject : public IRenderObject { std::map<std::string, std::string> *styles_; std::map<std::string, std::string> *attributes_; std::set<std::string> *events_; - float viewport_width_ = -1; bool is_root_render_; bool is_sticky_ = false; }; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/page/render_page.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/page/render_page.cpp b/weex_core/Source/core/render/page/render_page.cpp index 7e9bee5..c5be5e2 100644 --- a/weex_core/Source/core/render/page/render_page.cpp +++ b/weex_core/Source/core/render/page/render_page.cpp @@ -16,9 +16,9 @@ * specific language governing permissions and limitations * under the License. */ -#include "core/render/page/render_page.h" #include "base/TimeUtils.h" #include "base/ViewUtils.h" +#include "core/render/page/render_page.h" #include "core/config/core_environment.h" #include "core/css/constants_value.h" #include "core/layout/layout.h" @@ -49,7 +49,6 @@ RenderPage::RenderPage(std::string page_id) { this->page_id_ = page_id; this->render_performance_ = new RenderPerformance(); - this->viewport_width_ = kDefaultViewPortWidth; this->render_page_size_.first = WXCoreEnvironment::getInstance()->DeviceWidth(); this->render_page_size_.second = NAN; http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/578c3571/weex_core/Source/core/render/page/render_page.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/page/render_page.h b/weex_core/Source/core/render/page/render_page.h index 9310e16..4fe91c1 100644 --- a/weex_core/Source/core/render/page/render_page.h +++ b/weex_core/Source/core/render/page/render_page.h @@ -143,12 +143,6 @@ public: inline std::string page_id() { return this->page_id_; } - inline float viewport_width() const { return this->viewport_width_; } - - inline void set_viewport_width(float viewport_width) { - this->viewport_width_ = viewport_width; - } - inline bool is_dirty() { return this->is_dirty_.load(); } inline void set_is_dirty(bool dirty) { this->is_dirty_.store(dirty); } @@ -167,7 +161,6 @@ public: std::atomic_bool has_fore_layout_action_{false}; private: - float viewport_width_; RenderObject *render_root_ = nullptr; std::string page_id_; std::pair<float, float> render_page_size_;
