You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@weex.apache.org by ky...@apache.org on 2018/06/26 11:31:57 UTC

incubator-weex git commit: [WEEX-442][Core] Fix setViewPort

Repository: incubator-weex
Updated Branches:
  refs/heads/master 361df724c -> d0cf4337e


[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/d0cf4337
Tree: http://git-wip-us.apache.org/repos/asf/incubator-weex/tree/d0cf4337
Diff: http://git-wip-us.apache.org/repos/asf/incubator-weex/diff/d0cf4337

Branch: refs/heads/master
Commit: d0cf4337e0cd25c6e062e48ad720aa57749631e8
Parents: 361df72
Author: miomin <mi...@foxmail.com>
Authored: Tue Jun 26 16:51:25 2018 +0800
Committer: YorkShen <sh...@gmail.com>
Committed: Tue Jun 26 18:38:31 2018 +0800

----------------------------------------------------------------------
 .../core/render/manager/render_manager.cpp      | 33 ++++++++++++++++----
 .../Source/core/render/manager/render_manager.h | 24 ++++++--------
 .../Source/core/render/node/render_list.cpp     | 12 +++----
 .../Source/core/render/node/render_mask.cpp     |  4 +--
 .../Source/core/render/node/render_object.cpp   |  2 +-
 .../Source/core/render/page/render_page.cpp     |  1 +
 weex_core/Source/core/render/page/render_page.h |  7 +++++
 7 files changed, 54 insertions(+), 29 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 699c29f..5934619 100644
--- a/weex_core/Source/core/render/manager/render_manager.cpp
+++ b/weex_core/Source/core/render/manager/render_manager.cpp
@@ -44,6 +44,13 @@ bool RenderManager::CreatePage(std::string page_id, const char *data) {
   RenderPage *page = new RenderPage(page_id);
   this->pages_.insert(std::pair<std::string, RenderPage *>(page_id, page));
 
+  std::map<std::string, float>::iterator iter =
+      this->viewports_.find(page_id);
+  if (iter != this->viewports_.end()) {
+    RenderManager::GetInstance()->set_viewport_width(page_id, iter->second);
+    this->viewports_.erase(page_id);
+  }
+
   int64_t start_time = getCurrentTime();
   RenderObject *root = Wson2RenderObject(data, page_id);
   page->ParseJsonTime(getCurrentTime() - start_time);
@@ -186,15 +193,15 @@ 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) {
+bool RenderManager::CallNativeModule(const char *page_id, const char *module, const char *method,
+                                     const char *arguments, int arguments_length,
+                                     const char *options, int options_length) {
   if (strcmp(module, "meta") == 0) {
-    CallMetaModule(method, arguments);
+    CallMetaModule(page_id, method, arguments);
   }
 }
 
-bool RenderManager::CallMetaModule(const char *method, const char *arguments) {
+bool RenderManager::CallMetaModule(const char *page_id, const char *method, const char *arguments) {
 
   if (strcmp(method, "setViewport") == 0) {
     wson_parser parser(arguments);
@@ -208,7 +215,7 @@ bool RenderManager::CallMetaModule(const char *method, const char *arguments) {
             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()));
+              viewports_.insert(std::pair<std::string, float>(page_id, getFloat(value.c_str())));
             }
           }
         }
@@ -240,6 +247,20 @@ bool RenderManager::ClosePage(const std::string &page_id) {
   page = nullptr;
 }
 
+float RenderManager::viewport_width(const std::string &page_id) {
+  RenderPage *page = GetPage(page_id);
+  if (page == nullptr) return kDefaultViewPortWidth;
+
+  return page->viewport_width();
+}
+
+void RenderManager::set_viewport_width(const std::string &page_id, float viewport_width) {
+  RenderPage *page = GetPage(page_id);
+  if (page == nullptr) return;
+
+  page->set_viewport_width(viewport_width);
+}
+
 void RenderManager::Batch(const std::string &page_id) {
   RenderPage *page = this->GetPage(page_id);
   if (page == nullptr) return;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 e7e0f44..c626b2b 100644
--- a/weex_core/Source/core/render/manager/render_manager.h
+++ b/weex_core/Source/core/render/manager/render_manager.h
@@ -30,9 +30,7 @@ class RenderPage;
 
 class RenderManager {
  private:
-  RenderManager() {
-    this->viewport_width_ = kDefaultViewPortWidth;
-  }
+  RenderManager() {}
 
   ~RenderManager() {}
 
@@ -79,16 +77,20 @@ 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 CallNativeModule(const char *page_id, const char *module, const char *method,
+                        const char *arguments, int arguments_length, const char *options,
+                        int options_length);
 
-  bool CallMetaModule(const char *method, const char *arguments);
+  bool CallMetaModule(const char *page_id, const char *method, const char *arguments);
 
   RenderPage *GetPage(const std::string &page_id);
 
   bool ClosePage(const std::string &page_id);
 
+  float viewport_width(const std::string &page_id);
+
+  void set_viewport_width(const std::string &page_id, float viewport_width);
+
   static RenderManager *GetInstance() {
     if (!g_pInstance) {
       g_pInstance = new RenderManager();
@@ -96,16 +98,10 @@ 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;
+  std::map<std::string, float> viewports_;
 };
 }  // namespace WeexCore
 

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 bce9384..cdcee32 100644
--- a/weex_core/Source/core/render/node/render_list.cpp
+++ b/weex_core/Source/core/render/node/render_list.cpp
@@ -113,8 +113,8 @@ void RenderList::PreCalculateCellWidth() {
 
     this->available_width_ =
         TakeStyleWidth() -
-        getWebPxByWidth(getPaddingLeft(), RenderManager::GetInstance()->viewport_width()) -
-        getWebPxByWidth(getPaddingRight(), RenderManager::GetInstance()->viewport_width());
+        getWebPxByWidth(getPaddingLeft(), RenderManager::GetInstance()->viewport_width(page_id())) -
+        getWebPxByWidth(getPaddingRight(), RenderManager::GetInstance()->viewport_width(page_id()));
 
     if (AUTO_VALUE == this->column_count_ &&
         AUTO_VALUE == this->column_width_) {
@@ -217,19 +217,19 @@ std::string RenderList::CalculateSpanOffset() {
 
 float RenderList::TakeStyleWidth() {
   float width =
-      getWebPxByWidth(getLayoutWidth(), RenderManager::GetInstance()->viewport_width());
+      getWebPxByWidth(getLayoutWidth(), RenderManager::GetInstance()->viewport_width(page_id()));
   if (isnan(width) || width <= 0) {
     if (getParent() != nullptr) {
       width = getWebPxByWidth(getParent()->getLayoutWidth(),
-                              RenderManager::GetInstance()->viewport_width());
+                              RenderManager::GetInstance()->viewport_width(page_id()));
     }
     if (isnan(width) || width <= 0) {
       width = getWebPxByWidth(RenderObject::getStyleWidth(),
-                              RenderManager::GetInstance()->viewport_width());
+                              RenderManager::GetInstance()->viewport_width(page_id()));
     }
   }
   if (isnan(width) || width <= 0) {
-    width = RenderManager::GetInstance()->viewport_width();
+    width = RenderManager::GetInstance()->viewport_width(page_id());
   }
   return width;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 8c80d0b..7cb5238 100644
--- a/weex_core/Source/core/render/node/render_mask.cpp
+++ b/weex_core/Source/core/render/node/render_mask.cpp
@@ -55,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, RenderManager::GetInstance()->viewport_width()))));
+      WIDTH, to_string(getWebPxByWidth(width, RenderManager::GetInstance()->viewport_width(page_id())))));
   style->insert(std::pair<std::string, std::string>(
-      HEIGHT, to_string(getWebPxByWidth(height, RenderManager::GetInstance()->viewport_width()))));
+      HEIGHT, to_string(getWebPxByWidth(height, RenderManager::GetInstance()->viewport_width(page_id())))));
   style->insert(std::pair<std::string, std::string>(TOP, "0"));
   return style;
 }

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 97f9287..81d36b2 100644
--- a/weex_core/Source/core/render/node/render_object.cpp
+++ b/weex_core/Source/core/render/node/render_object.cpp
@@ -347,7 +347,7 @@ bool RenderObject::UpdateStyleInternal(const std::string key,
     functor(fallback);
     ret = true;
   } else {
-    float fvalue = getFloatByViewport(value, RenderManager::GetInstance()->viewport_width());
+    float fvalue = getFloatByViewport(value, RenderManager::GetInstance()->viewport_width(page_id()));
     if (!isnan(fvalue)) {
       functor(fvalue);
       ret = true;

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 c5be5e2..4c6f25f 100644
--- a/weex_core/Source/core/render/page/render_page.cpp
+++ b/weex_core/Source/core/render/page/render_page.cpp
@@ -52,6 +52,7 @@ RenderPage::RenderPage(std::string page_id) {
   this->render_page_size_.first =
       WXCoreEnvironment::getInstance()->DeviceWidth();
   this->render_page_size_.second = NAN;
+  this->viewport_width_ = kDefaultViewPortWidth;
 }
 
 RenderPage::~RenderPage() {

http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/d0cf4337/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 4fe91c1..e6803d1 100644
--- a/weex_core/Source/core/render/page/render_page.h
+++ b/weex_core/Source/core/render/page/render_page.h
@@ -155,6 +155,12 @@ public:
     return this->is_render_container_width_wrap_content_.load();
   }
 
+  inline float viewport_width() const { return this->viewport_width_; }
+
+  inline void set_viewport_width(float viewport_width) {
+    this->viewport_width_ = viewport_width;
+  }
+
  public:
   static constexpr bool kUseVSync = true;
   std::atomic_bool need_layout_{false};
@@ -169,6 +175,7 @@ public:
   std::atomic_bool is_dirty_{true};
   std::atomic_bool is_render_container_width_wrap_content_{false};
   std::atomic_bool is_render_container_height_wrap_content_{false};
+  float viewport_width_ = -1;
 };
 }  // namespace WeexCore