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