http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/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 91c9a16..8f50bff 100644 --- a/weex_core/Source/core/render/node/render_object.h +++ b/weex_core/Source/core/render/node/render_object.h @@ -16,154 +16,144 @@ * specific language governing permissions and limitations * under the License. */ -#ifndef RenderObject_h -#define RenderObject_h +#ifndef CORE_RENDER_NODE_RENDER_OBJECT_H_ +#define CORE_RENDER_NODE_RENDER_OBJECT_H_ -#include <string> +#include <functional> #include <map> #include <set> -#include <functional> +#include <string> #include "core/render/node/factory/render_object_interface.h" -#define JSON_OBJECT_MARK_CHAR '{' -#define JSON_ARRAY_MARK_CHAR '[' +#define JSON_OBJECT_MARK_CHAR '{' +#define JSON_ARRAY_MARK_CHAR '[' -#define convert_render_object_to_long(render) ((jlong)((intptr_t)render)) +#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) \ + (static_cast<RenderObject *>((intptr_t)ptr)) namespace WeexCore { - class RenderObject; - - class RenderPage; - - typedef enum StyleType { - kTypeStyle, kTypeLayout, kTypeMargin, kTypePadding, kTypeBorder - } StyleType; - - class RenderObject : public IRenderObject { - - friend class RenderPage; - - public: - - void LayoutBeforeImpl(); +class RenderObject; - void LayoutAfterImpl(); +class RenderPage; - void CopyFrom(RenderObject *src); +typedef enum StyleType { + kTypeStyle, + kTypeLayout, + kTypeMargin, + kTypePadding, + kTypeBorder +} StyleType; - void MapInsertOrAssign(std::map<std::string, std::string> *targetMap, const std::string &key, - const std::string &value); +class RenderObject : public IRenderObject { + friend class RenderPage; - bool ViewInit(); + public: + void LayoutBeforeImpl(); - virtual std::map<std::string, std::string> *GetDefaultStyle() { - return nullptr; - } + void LayoutAfterImpl(); - virtual std::map<std::string, std::string> *GetDefaultAttr() { - return nullptr; - } + void CopyFrom(RenderObject *src); - protected: + void MapInsertOrAssign(std::map<std::string, std::string> *targetMap, + const std::string &key, const std::string &value); - bool UpdateStyleInternal(const std::string key, const std::string value, float fallback, - std::function<void(float)> functor); + bool ViewInit(); - public: + virtual std::map<std::string, std::string> *GetDefaultStyle() { + return nullptr; + } - explicit RenderObject(); + virtual std::map<std::string, std::string> *GetDefaultAttr() { + return nullptr; + } - ~RenderObject(); + protected: + bool UpdateStyleInternal(const std::string key, const std::string value, + float fallback, std::function<void(float)> functor); - void BindMeasureFunc(); + public: + RenderObject(); - void OnLayoutBefore(); + ~RenderObject(); - void OnLayoutAfter(float width, float height); + void BindMeasureFunc(); - virtual StyleType ApplyStyle(const std::string &key, const std::string &value, const bool updating); + void OnLayoutBefore(); - void ApplyDefaultStyle(); + void OnLayoutAfter(float width, float height); - void ApplyDefaultAttr(); + virtual StyleType ApplyStyle(const std::string &key, const std::string &value, + const bool updating); - Index IndexOf(const RenderObject *render); + void ApplyDefaultStyle(); - virtual int AddRenderObject(int index, RenderObject *child); + void ApplyDefaultAttr(); - float GetViewPortWidth(); + Index IndexOf(const RenderObject *render); - const std::string GetAttr(const std::string &key); + virtual int AddRenderObject(int index, RenderObject *child); - const std::string GetStyle(const std::string &key); + float GetViewPortWidth(); - RenderPage *GetRenderPage(); + const std::string GetAttr(const std::string &key); - virtual void UpdateAttr(std::string key, std::string value); + const std::string GetStyle(const std::string &key); - virtual StyleType UpdateStyle(std::string key, std::string value); + RenderPage *GetRenderPage(); - bool IsAppendTree(); + virtual void UpdateAttr(std::string key, std::string value); - RenderObject *GetChild(const Index &index); + virtual StyleType UpdateStyle(std::string key, std::string value); - void RemoveRenderObject(RenderObject *child); + bool IsAppendTree(); - void AddAttr(std::string key, std::string value); + RenderObject *GetChild(const Index &index); - StyleType AddStyle(std::string key, std::string value); + void RemoveRenderObject(RenderObject *child); - void AddEvent(std::string event); + void AddAttr(std::string key, std::string value); - void RemoveEvent(const std::string &event); + StyleType AddStyle(std::string key, std::string value); - public: + void AddEvent(std::string event); - inline void set_parent_render(RenderObject *render) { - this->parent_render_ = render; - } + void RemoveEvent(const std::string &event); - inline RenderObject *parent_render() { - return this->parent_render_; - } + public: + inline void set_parent_render(RenderObject *render) { + this->parent_render_ = render; + } - inline std::map<std::string, std::string> *styles() const { - return this->styles_; - } + inline RenderObject *parent_render() { return this->parent_render_; } - inline std::map<std::string, std::string> * attributes() const { - return this->attributes_; - } + inline std::map<std::string, std::string> *styles() const { + return this->styles_; + } - inline std::set<std::string> *events() const { - return this->events_; - } + inline std::map<std::string, std::string> *attributes() const { + return this->attributes_; + } - inline void set_is_root_render() { - this->is_root_render_ = true; - } + inline std::set<std::string> *events() const { return this->events_; } - inline bool is_root_render() { - return this->is_root_render_; - } + inline void set_is_root_render() { this->is_root_render_ = true; } - inline bool is_sticky() { - return this->is_sticky_; - } + inline bool is_root_render() { return this->is_root_render_; } - private: + inline bool is_sticky() { return this->is_sticky_; } - RenderObject *parent_render_; - 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; - }; -} //end WeexCore -#endif //RenderObject_h + private: + RenderObject *parent_render_; + 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; +}; +} // namespace WeexCore +#endif // CORE_RENDER_NODE_RENDER_OBJECT_H_
http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/weex_core/Source/core/render/node/render_scroller.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_scroller.cpp b/weex_core/Source/core/render/node/render_scroller.cpp index 139af5e..7fcdfc6 100644 --- a/weex_core/Source/core/render/node/render_scroller.cpp +++ b/weex_core/Source/core/render/node/render_scroller.cpp @@ -16,36 +16,40 @@ * specific language governing permissions and limitations * under the License. */ -#include "core/render/node/render_scroller.h" + +#include <utility> + #include "core/css/constants_name.h" +#include "core/render/node/render_scroller.h" namespace WeexCore { - std::map<std::string, std::string> *RenderScroller::GetDefaultStyle() { - std::map<std::string, std::string> *style = new std::map<std::string, std::string>(); +std::map<std::string, std::string> *RenderScroller::GetDefaultStyle() { + std::map<std::string, std::string> *style = + new std::map<std::string, std::string>(); - bool isVertical = true; - RenderObject *parent = (RenderObject *) getParent(); + bool is_vertical = true; + RenderObject *parent = dynamic_cast<RenderObject *>(getParent()); - if (parent != nullptr) { - if (parent->GetAttr(SCROLL_DIRECTION) == HORIZONTAL) { - isVertical = false; - } + if (parent != nullptr) { + if (parent->GetAttr(SCROLL_DIRECTION) == HORIZONTAL) { + is_vertical = false; } + } - std::string prop = isVertical ? HEIGHT : WIDTH; - - if (prop == HEIGHT && isnan(getStyleHeight()) && !this->is_set_flex_) { - style->insert(std::pair<std::string, std::string>(FLEX, "1")); - } else if (prop == WIDTH && isnan(getStyleWidth()) && !this->is_set_flex_) { - style->insert(std::pair<std::string, std::string>(FLEX, "1")); - } + std::string prop = is_vertical ? HEIGHT : WIDTH; - return style; + if (prop == HEIGHT && isnan(getStyleHeight()) && !this->is_set_flex_) { + style->insert(std::pair<std::string, std::string>(FLEX, "1")); + } else if (prop == WIDTH && isnan(getStyleWidth()) && !this->is_set_flex_) { + style->insert(std::pair<std::string, std::string>(FLEX, "1")); } - void RenderScroller::set_flex(const float flex) { - this->is_set_flex_ = true; - WXCoreLayoutNode::set_flex(flex); - } + return style; +} + +void RenderScroller::set_flex(const float flex) { + this->is_set_flex_ = true; + WXCoreLayoutNode::set_flex(flex); } +} // namespace WeexCore http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/weex_core/Source/core/render/node/render_scroller.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_scroller.h b/weex_core/Source/core/render/node/render_scroller.h index fed8f0b..65e4f01 100644 --- a/weex_core/Source/core/render/node/render_scroller.h +++ b/weex_core/Source/core/render/node/render_scroller.h @@ -16,25 +16,27 @@ * specific language governing permissions and limitations * under the License. */ -#ifndef WEEX_PROJECT_RENDERSCROLLER_H -#define WEEX_PROJECT_RENDERSCROLLER_H +#ifndef CORE_RENDER_NODE_RENDER_SCROLLER_H_ +#define CORE_RENDER_NODE_RENDER_SCROLLER_H_ + +#include <map> +#include <string> #include "core/render/node/render_object.h" namespace WeexCore { - class RenderScroller : public RenderObject { - - bool is_set_flex_ = false; - - std::map<std::string, std::string> *GetDefaultStyle(); +class RenderScroller : public RenderObject { + bool is_set_flex_ = false; - void set_flex(const float flex); + std::map<std::string, std::string> *GetDefaultStyle(); - inline float CalculateFreeSpaceAlongMainAxis(const float &width, const float &height, - const float ¤t_length) const override { - return NAN; - } + void set_flex(const float flex); - }; -} -#endif //WEEX_PROJECT_RENDERSCROLLER_H + inline float CalculateFreeSpaceAlongMainAxis( + const float &width, const float &height, + const float ¤t_length) const override { + return NAN; + } +}; +} // namespace WeexCore +#endif // CORE_RENDER_NODE_RENDER_SCROLLER_H_ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/weex_core/Source/core/render/node/render_text.cpp ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_text.cpp b/weex_core/Source/core/render/node/render_text.cpp index 4aa3490..eda23e9 100644 --- a/weex_core/Source/core/render/node/render_text.cpp +++ b/weex_core/Source/core/render/node/render_text.cpp @@ -16,19 +16,21 @@ * specific language governing permissions and limitations * under the License. */ +#include <string> + #include "core/render/node/render_text.h" #include "core/render/page/render_page.h" namespace WeexCore { - void RenderText::UpdateAttr(std::string key, std::string value) { - RenderObject::UpdateAttr(key, value); - markDirty(); - } +void RenderText::UpdateAttr(std::string key, std::string value) { + RenderObject::UpdateAttr(key, value); + markDirty(); +} - StyleType RenderText::UpdateStyle(std::string key, std::string value) { - StyleType resultType = RenderObject::ApplyStyle(key, value, true); - markDirty(); - return resultType; - } +StyleType RenderText::UpdateStyle(std::string key, std::string value) { + StyleType result_type = RenderObject::ApplyStyle(key, value, true); + markDirty(); + return result_type; } +} // namespace WeexCore http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/weex_core/Source/core/render/node/render_text.h ---------------------------------------------------------------------- diff --git a/weex_core/Source/core/render/node/render_text.h b/weex_core/Source/core/render/node/render_text.h index 804b298..86e3733 100644 --- a/weex_core/Source/core/render/node/render_text.h +++ b/weex_core/Source/core/render/node/render_text.h @@ -16,20 +16,20 @@ * specific language governing permissions and limitations * under the License. */ -#ifndef WEEX_PROJECT_RENDERTEXT_H -#define WEEX_PROJECT_RENDERTEXT_H +#ifndef CORE_RENDER_NODE_RENDER_TEXT_H_ +#define CORE_RENDER_NODE_RENDER_TEXT_H_ + +#include <string> #include "core/render/node/render_object.h" namespace WeexCore { - class RenderText : public RenderObject { - - private: - - void UpdateAttr(std::string key, std::string value); +class RenderText : public RenderObject { + private: + void UpdateAttr(std::string key, std::string value); - StyleType UpdateStyle(std::string key, std::string value); - }; -} + StyleType UpdateStyle(std::string key, std::string value); +}; +} // namespace WeexCore -#endif //WEEX_PROJECT_RENDERTEXT_H +#endif // CORE_RENDER_NODE_RENDER_TEXT_H_ http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/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 78ad8cd..7e9bee5 100644 --- a/weex_core/Source/core/render/page/render_page.cpp +++ b/weex_core/Source/core/render/page/render_page.cpp @@ -16,610 +16,605 @@ * specific language governing permissions and limitations * under the License. */ -#include "core/render/action/render_action_add_element.h" -#include "core/render/action/render_action_remove_element.h" -#include "core/render/action/render_action_move_element.h" -#include "core/render/action/render_action_createbody.h" -#include "core/render/action/render_action_update_style.h" -#include "core/render/action/render_action_update_attr.h" -#include "core/render/action/render_action_layout.h" -#include "core/render/action/render_action_createfinish.h" -#include "core/render/action/render_action_appendtree_createfinish.h" +#include "core/render/page/render_page.h" +#include "base/TimeUtils.h" +#include "base/ViewUtils.h" +#include "core/config/core_environment.h" +#include "core/css/constants_value.h" #include "core/layout/layout.h" +#include "core/manager/weex_core_manager.h" #include "core/moniter/render_performance.h" -#include "core/config/core_environment.h" -#include "base/ViewUtils.h" +#include "core/render/action/render_action_add_element.h" #include "core/render/action/render_action_add_event.h" +#include "core/render/action/render_action_appendtree_createfinish.h" +#include "core/render/action/render_action_createbody.h" +#include "core/render/action/render_action_createfinish.h" +#include "core/render/action/render_action_layout.h" +#include "core/render/action/render_action_move_element.h" +#include "core/render/action/render_action_remove_element.h" #include "core/render/action/render_action_remove_event.h" -#include "core/css/constants_value.h" +#include "core/render/action/render_action_update_attr.h" +#include "core/render/action/render_action_update_style.h" +#include "core/render/manager/render_manager.h" #include "core/render/node/factory/render_type.h" #include "core/render/node/render_list.h" -#include "core/manager/weex_core_manager.h" -#include "base/TimeUtils.h" -#include "core/render/page/render_page.h" -#include "core/render/manager/render_manager.h" #include "core/render/node/render_object.h" namespace WeexCore { - RenderPage::RenderPage(std::string page_id) { - +RenderPage::RenderPage(std::string page_id) { #if RENDER_LOG - LOGD("[RenderPage] new RenderPage >>>> pageId: %s", pageId.c_str()); + LOGD("[RenderPage] new RenderPage >>>> pageId: %s", pageId.c_str()); #endif - 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; - } - - RenderPage::~RenderPage() { + 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; +} +RenderPage::~RenderPage() { #if RENDER_LOG - LOGD("[RenderPage] Delete RenderPage >>>> pageId: %s", mPageId.c_str()); + LOGD("[RenderPage] Delete RenderPage >>>> pageId: %s", mPageId.c_str()); #endif - this->render_object_registers.clear(); + this->render_object_registers_.clear(); - if (this->render_root != nullptr) { - delete this->render_root; - this->render_root = nullptr; - } + if (this->render_root_ != nullptr) { + delete this->render_root_; + this->render_root_ = nullptr; + } - if (this->render_performance != nullptr) { - delete this->render_performance; - this->render_performance = nullptr; - } + if (this->render_performance_ != nullptr) { + delete this->render_performance_; + this->render_performance_ = nullptr; } +} - void RenderPage::CalculateLayout() { - if (this->render_root == nullptr || !this->render_root->ViewInit()) - return; +void RenderPage::CalculateLayout() { + if (this->render_root_ == nullptr || !this->render_root_->ViewInit()) return; #if RENDER_LOG - LOGD("[RenderPage] CalculateLayout >>>> pageId: %s", mPageId.c_str()); + LOGD("[RenderPage] CalculateLayout >>>> pageId: %s", mPageId.c_str()); #endif - long long startTime = getCurrentTime(); - this->render_root->LayoutBeforeImpl(); - this->render_root->calculateLayout(this->render_page_size); - this->render_root->LayoutAfterImpl(); - CssLayoutTime(getCurrentTime() - startTime); - TraverseTree(this->render_root, 0); - } - - void RenderPage::TraverseTree(RenderObject *render,int index) { + int64_t start_time = getCurrentTime(); + this->render_root_->LayoutBeforeImpl(); + this->render_root_->calculateLayout(this->render_page_size_); + this->render_root_->LayoutAfterImpl(); + CssLayoutTime(getCurrentTime() - start_time); + TraverseTree(this->render_root_, 0); +} - if (render == nullptr) - return; +void RenderPage::TraverseTree(RenderObject *render, int index) { + if (render == nullptr) return; - if (render->hasNewLayout()) { - SendLayoutAction(render, index); - render->setHasNewLayout(false); - } - - for(auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); it++) { - RenderObject* child = static_cast<RenderObject*>(*it); - if (child != nullptr) { - TraverseTree(child, it-render->ChildListIterBegin()); - } - } + if (render->hasNewLayout()) { + SendLayoutAction(render, index); + render->setHasNewLayout(false); } - bool RenderPage::CreateRootRender(RenderObject *root) { - - if (root == nullptr) - return false; - - SetRootRenderObject(root); - - if (isnan(this->render_root->getStyleWidth())) { - this->render_root->setStyleWidthLevel(FALLBACK_STYLE); - if (GetRenderContainerWidthWrapContent()) - this->render_root->setStyleWidthToNAN(); - else - this->render_root->setStyleWidth(WXCoreEnvironment::getInstance()->DeviceWidth(), false); - } else { - this->render_root->setStyleWidthLevel(CSS_STYLE); - } - PushRenderToRegisterMap(root); - - SendCreateBodyAction(root); - return true; - } - - void RenderPage::SetRootRenderObject(RenderObject *root) { - if (root != nullptr) { - this->render_root = root; - this->render_root->set_is_root_render(); + for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); + it++) { + RenderObject *child = static_cast<RenderObject *>(*it); + if (child != nullptr) { + TraverseTree(child, it - render->ChildListIterBegin()); } } +} - bool RenderPage::AddRenderObject(const std::string &parent_ref, int insert_posiotn, RenderObject *child) { - RenderObject *parent = GetRenderObject(parent_ref); - if (parent == nullptr || child == nullptr) { - return false; - } - - // add child to Render Tree - insert_posiotn = parent->AddRenderObject(insert_posiotn, child); - if (insert_posiotn < -1) { - return false; - } +bool RenderPage::CreateRootRender(RenderObject *root) { + if (root == nullptr) return false; - PushRenderToRegisterMap(child); - SendAddElementAction(child, parent, insert_posiotn, false); + SetRootRenderObject(root); - Batch(); - return true; + if (isnan(this->render_root_->getStyleWidth())) { + this->render_root_->setStyleWidthLevel(FALLBACK_STYLE); + if (is_render_container_width_wrap_content()) + this->render_root_->setStyleWidthToNAN(); + else + this->render_root_->setStyleWidth( + WXCoreEnvironment::getInstance()->DeviceWidth(), false); + } else { + this->render_root_->setStyleWidthLevel(CSS_STYLE); } + PushRenderToRegisterMap(root); - bool RenderPage::RemoveRenderObject(const std::string &ref) { - RenderObject *child = GetRenderObject(ref); - if (child == nullptr) - return false; - - RenderObject *parent = child->parent_render(); - if (parent == nullptr) - return false; - - parent->RemoveRenderObject(child); + SendCreateBodyAction(root); + return true; +} - RemoveRenderFromRegisterMap(child); - delete child; - - SendRemoveElementAction(ref); - return true; +void RenderPage::SetRootRenderObject(RenderObject *root) { + if (root != nullptr) { + this->render_root_ = root; + this->render_root_->set_is_root_render(); } +} - bool RenderPage::MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index) { - RenderObject *child = GetRenderObject(ref); - if (child == nullptr) - return false; - - RenderObject *oldParent = child->parent_render(); - RenderObject *newParent = GetRenderObject(parent_ref); - if (oldParent == nullptr || newParent == nullptr) - return false; - - if (oldParent->ref() == newParent->ref()) { - if (oldParent->IndexOf(child) < 0) { - return false; - } else if (oldParent->IndexOf(child) == index) { - return false; - } else if (oldParent->IndexOf(child) < index) { - index = index - 1; - } - } - - child->getParent()->removeChild(child); - newParent->addChildAt(child, index); +bool RenderPage::AddRenderObject(const std::string &parent_ref, + int insert_posiotn, RenderObject *child) { + RenderObject *parent = GetRenderObject(parent_ref); + if (parent == nullptr || child == nullptr) { + return false; + } - SendMoveElementAction(ref, parent_ref, index); - return true; + // add child to Render Tree + insert_posiotn = parent->AddRenderObject(insert_posiotn, child); + if (insert_posiotn < -1) { + return false; } - bool RenderPage::UpdateStyle(const std::string &ref, std::vector<std::pair<std::string, std::string>> *src) { - RenderObject *render = GetRenderObject(ref); - if (render == nullptr || src == nullptr || src->empty()) - return false; + PushRenderToRegisterMap(child); + SendAddElementAction(child, parent, insert_posiotn, false); - std::vector<std::pair<std::string, std::string>> *style = nullptr; - std::vector<std::pair<std::string, std::string>> *margin = nullptr; - std::vector<std::pair<std::string, std::string>> *padding = nullptr; - std::vector<std::pair<std::string, std::string>> *border = nullptr; + Batch(); + return true; +} - bool flag = false; - int result = WeexCoreManager::getInstance()->getPlatformBridge()->callHasTransitionPros(this->page_id.c_str(), ref.c_str(), src); - //int result = Bridge_Impl_Android::getInstance()->callHasTransitionPros(mPageId.c_str(), ref.c_str(), src); +bool RenderPage::RemoveRenderObject(const std::string &ref) { + RenderObject *child = GetRenderObject(ref); + if (child == nullptr) return false; - if (result == 1) { - SendUpdateStyleAction(render, src, margin, padding, border); - } else { - for (auto iter = src->begin(); iter != src->end(); iter++) { - switch (render->UpdateStyle((*iter).first, (*iter).second)) { - case kTypeStyle: - if (style == nullptr) { - style = new std::vector<std::pair<std::string, std::string>>(); - } - style->insert(style->end(), (*iter)); - flag = true; - break; - case kTypeMargin: - if (margin == nullptr) { - margin = new std::vector<std::pair<std::string, std::string>>(); - } - render->UpdateStyleInternal((*iter).first, - (*iter).second, - 0, - [=, &flag](float foo) { - (*iter).second = to_string(foo), - margin->insert(margin->end(), (*iter)), - flag = true; - }); - break; - case kTypePadding: - if (padding == nullptr) { - padding = new std::vector<std::pair<std::string, std::string>>(); - } - render->UpdateStyleInternal((*iter).first, - (*iter).second, - 0, - [=, &flag](float foo) { - (*iter).second = to_string(foo), - padding->insert(padding->end(), (*iter)), - flag = true; - }); - break; - case kTypeBorder: - if (border == nullptr) { - border = new std::vector<std::pair<std::string, std::string>>(); - } - render->UpdateStyleInternal((*iter).first, - (*iter).second, - 0, - [=, &flag](float foo) { - (*iter).second = to_string(foo), - border->insert(border->end(), (*iter)), - flag = true; - }); - break; - } - } - } + RenderObject *parent = child->parent_render(); + if (parent == nullptr) return false; - if (style != nullptr || margin != nullptr || padding != nullptr || border != nullptr) - SendUpdateStyleAction(render, style, margin, padding, border); + parent->RemoveRenderObject(child); - Batch(); + RemoveRenderFromRegisterMap(child); + delete child; - if (src != nullptr) { - src->clear(); - src->shrink_to_fit(); - delete src; - src = nullptr; - } + SendRemoveElementAction(ref); + return true; +} - if (style != nullptr) { - style->clear(); - style->shrink_to_fit(); - delete style; - style = nullptr; - } - - if (margin != nullptr) { - margin->clear(); - margin->shrink_to_fit(); - delete margin; - margin = nullptr; - } - - if (padding != nullptr) { - padding->clear(); - padding->shrink_to_fit(); - delete padding; - padding = nullptr; - } +bool RenderPage::MoveRenderObject(const std::string &ref, + const std::string &parent_ref, int index) { + RenderObject *child = GetRenderObject(ref); + if (child == nullptr) return false; - if (border != nullptr) { - border->clear(); - border->shrink_to_fit(); - delete border; - border = nullptr; - } - - return flag; - } + RenderObject *old_parent = child->parent_render(); + RenderObject *new_parent = GetRenderObject(parent_ref); + if (old_parent == nullptr || new_parent == nullptr) return false; - bool RenderPage::UpdateAttr(const std::string &ref, std::vector<std::pair<std::string, std::string>> *attrs) { - RenderObject *render = GetRenderObject(ref); - if (render == nullptr || attrs == nullptr || attrs->empty()) + if (old_parent->ref() == new_parent->ref()) { + if (old_parent->IndexOf(child) < 0) { return false; - - SendUpdateAttrAction(render, attrs); - - for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) { - render->UpdateAttr((*iter).first, (*iter).second); - } - Batch(); - if (attrs != nullptr) { - attrs->clear(); - attrs->shrink_to_fit(); - delete attrs; - attrs = nullptr; - } - - return true; - } - - void RenderPage::SetDefaultHeightAndWidthIntoRootRender(const float default_width, - const float default_height, - const bool is_width_wrap_content, const bool is_height_wrap_content) { - this->render_page_size.first = default_width; - this->render_page_size.second = default_height; - if (this->render_root->getStyleWidthLevel() >= INSTANCE_STYLE) { - this->render_root->setStyleWidthLevel(INSTANCE_STYLE); - if (is_width_wrap_content) { - SetRenderContainerWidthWrapContent(true); - this->render_root->setStyleWidthToNAN(); - this->render_page_size.first = NAN; - } else { - this->render_root->setStyleWidth(default_width, true); - } - updateDirty(true); - } - - if (this->render_root->getStyleHeightLevel() >= INSTANCE_STYLE) { - if(!is_height_wrap_content) { - this->render_root->setStyleHeightLevel(INSTANCE_STYLE); - this->render_root->setStyleHeight(default_height); - updateDirty(true); + } else if (old_parent->IndexOf(child) == index) { + return false; + } else if (old_parent->IndexOf(child) < index) { + index = index - 1; + } + } + + child->getParent()->removeChild(child); + new_parent->addChildAt(child, index); + + SendMoveElementAction(ref, parent_ref, index); + return true; +} + +bool RenderPage::UpdateStyle( + const std::string &ref, + std::vector<std::pair<std::string, std::string>> *src) { + RenderObject *render = GetRenderObject(ref); + if (render == nullptr || src == nullptr || src->empty()) return false; + + std::vector<std::pair<std::string, std::string>> *style = nullptr; + std::vector<std::pair<std::string, std::string>> *margin = nullptr; + std::vector<std::pair<std::string, std::string>> *padding = nullptr; + std::vector<std::pair<std::string, std::string>> *border = nullptr; + + bool flag = false; + int result = + WeexCoreManager::getInstance() + ->getPlatformBridge() + ->callHasTransitionPros(this->page_id_.c_str(), ref.c_str(), src); + // int result = + // Bridge_Impl_Android::getInstance()->callHasTransitionPros(mPageId.c_str(), + // ref.c_str(), src); + + if (result == 1) { + SendUpdateStyleAction(render, src, margin, padding, border); + } else { + for (auto iter = src->begin(); iter != src->end(); iter++) { + switch (render->UpdateStyle((*iter).first, (*iter).second)) { + case kTypeStyle: + if (style == nullptr) { + style = new std::vector<std::pair<std::string, std::string>>(); + } + style->insert(style->end(), (*iter)); + flag = true; + break; + case kTypeMargin: + if (margin == nullptr) { + margin = new std::vector<std::pair<std::string, std::string>>(); + } + render->UpdateStyleInternal( + (*iter).first, (*iter).second, 0, [=, &flag](float foo) { + (*iter).second = to_string(foo), + margin->insert(margin->end(), (*iter)), flag = true; + }); + break; + case kTypePadding: + if (padding == nullptr) { + padding = new std::vector<std::pair<std::string, std::string>>(); + } + render->UpdateStyleInternal( + (*iter).first, (*iter).second, 0, [=, &flag](float foo) { + (*iter).second = to_string(foo), + padding->insert(padding->end(), (*iter)), flag = true; + }); + break; + case kTypeBorder: + if (border == nullptr) { + border = new std::vector<std::pair<std::string, std::string>>(); + } + render->UpdateStyleInternal( + (*iter).first, (*iter).second, 0, [=, &flag](float foo) { + (*iter).second = to_string(foo), + border->insert(border->end(), (*iter)), flag = true; + }); + break; } } - - Batch(); } - bool RenderPage::AddEvent(const std::string &ref, const std::string &event) { - RenderObject *render = GetRenderObject(ref); - if (render == nullptr) - return false; + if (style != nullptr || margin != nullptr || padding != nullptr || + border != nullptr) + SendUpdateStyleAction(render, style, margin, padding, border); - render->AddEvent(event); + Batch(); - RenderAction *action = new RenderActionAddEvent(this->page_id, ref, event); - PostRenderAction(action); - return true; + if (src != nullptr) { + src->clear(); + src->shrink_to_fit(); + delete src; + src = nullptr; } - bool RenderPage::RemoveEvent(const std::string &ref, const std::string &event) { - RenderObject *render = GetRenderObject(ref); - if (render == nullptr) - return false; - - render->RemoveEvent(event); - - RenderAction *action = new RenderActionRemoveEvent(this->page_id, ref, event); - PostRenderAction(action); - return true; + if (style != nullptr) { + style->clear(); + style->shrink_to_fit(); + delete style; + style = nullptr; } - bool RenderPage::CreateFinish() { - if (this->render_root == nullptr) { - return false; - } - Batch(); - SendCreateFinishAction(); - return true; + if (margin != nullptr) { + margin->clear(); + margin->shrink_to_fit(); + delete margin; + margin = nullptr; } - void RenderPage::LayoutImmediately() { - if(isDirty() && kUseVSync){ - CalculateLayout(); - this->need_layout.store(false); - updateDirty(false); - } + if (padding != nullptr) { + padding->clear(); + padding->shrink_to_fit(); + delete padding; + padding = nullptr; } - void RenderPage::PostRenderAction(RenderAction *action) { - if (action != nullptr) { - action->ExecuteAction(); - delete action; - action = nullptr; - } + if (border != nullptr) { + border->clear(); + border->shrink_to_fit(); + delete border; + border = nullptr; } - void RenderPage::PushRenderToRegisterMap(RenderObject *render) { - if (render == nullptr) - return; + return flag; +} - std::string ref = render->ref(); - this->render_object_registers.insert(std::pair<std::string, RenderObject *>(ref, render)); +bool RenderPage::UpdateAttr( + const std::string &ref, + std::vector<std::pair<std::string, std::string>> *attrs) { + RenderObject *render = GetRenderObject(ref); + if (render == nullptr || attrs == nullptr || attrs->empty()) return false; - for(auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); it++) { - RenderObject* child = static_cast<RenderObject*>(*it); - if (child != nullptr) { - PushRenderToRegisterMap(child); - } - } - } + SendUpdateAttrAction(render, attrs); - void RenderPage::RemoveRenderFromRegisterMap(RenderObject *render) { - if (render == nullptr) - return; - - this->render_object_registers.erase(render->ref()); - - for(auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); it++) { - RenderObject* child = static_cast<RenderObject*>(*it); - if (child != nullptr) { - RemoveRenderFromRegisterMap(child); - } - } + for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) { + render->UpdateAttr((*iter).first, (*iter).second); + } + Batch(); + if (attrs != nullptr) { + attrs->clear(); + attrs->shrink_to_fit(); + delete attrs; + attrs = nullptr; } - void RenderPage::SendCreateBodyAction(RenderObject *render) { - if (render == nullptr) - return; - - RenderAction *action = new RenderActionCreateBody(PageId(), render); - PostRenderAction(action); + return true; +} - Index i = 0; - for(auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); it++) { - RenderObject* child = static_cast<RenderObject*>(*it); - if (child != nullptr) { - SendAddElementAction(child, render, i, true); - } - ++i; - } - - if (i > 0 && render->IsAppendTree()) { - SendAppendTreeCreateFinish(render->ref()); +void RenderPage::SetDefaultHeightAndWidthIntoRootRender( + const float default_width, const float default_height, + const bool is_width_wrap_content, const bool is_height_wrap_content) { + this->render_page_size_.first = default_width; + this->render_page_size_.second = default_height; + if (this->render_root_->getStyleWidthLevel() >= INSTANCE_STYLE) { + this->render_root_->setStyleWidthLevel(INSTANCE_STYLE); + if (is_width_wrap_content) { + set_is_render_container_width_wrap_content(true); + this->render_root_->setStyleWidthToNAN(); + this->render_page_size_.first = NAN; + } else { + this->render_root_->setStyleWidth(default_width, true); } + set_is_dirty(true); } - void RenderPage::SendAddElementAction(RenderObject *child, RenderObject *parent, int index, bool is_recursion, bool will_layout) { - if (child == nullptr || parent == nullptr) - return; - if(parent != nullptr && parent->type() == WeexCore::kRenderRecycleList){ - will_layout = false; + if (this->render_root_->getStyleHeightLevel() >= INSTANCE_STYLE) { + if (!is_height_wrap_content) { + this->render_root_->setStyleHeightLevel(INSTANCE_STYLE); + this->render_root_->setStyleHeight(default_height); + set_is_dirty(true); } + } - RenderAction *action = new RenderActionAddElement(PageId(), child, parent, index, will_layout); - PostRenderAction(action); + Batch(); +} - Index i = 0; - for(auto it = child->ChildListIterBegin(); it != child->ChildListIterEnd(); it++) { - RenderObject* grandson = static_cast<RenderObject*>(*it); - if (grandson != nullptr) { - SendAddElementAction(grandson, child, i, true, will_layout); - } - ++i; - } +bool RenderPage::AddEvent(const std::string &ref, const std::string &event) { + RenderObject *render = GetRenderObject(ref); + if (render == nullptr) return false; - if(child->type() == WeexCore::kRenderRecycleList){ - RenderList* renderList = (RenderList*)child; - std::vector<RenderObject*>& cellSlots = renderList->CellSlots(); - for(auto it = cellSlots.begin(); it != cellSlots.end(); it++) { - RenderObject* grandson = static_cast<RenderObject*>(*it); - if (grandson != nullptr) { - SendAddElementAction(grandson, child, -1, true, will_layout); - } - ++i; - } - } + render->AddEvent(event); - if (!is_recursion && i > 0 && child->IsAppendTree()) { - SendAppendTreeCreateFinish(child->ref()); - } - } + RenderAction *action = new RenderActionAddEvent(this->page_id_, ref, event); + PostRenderAction(action); + return true; +} - void RenderPage::SendRemoveElementAction(const std::string &ref) { - RenderAction *action = new RenderActionRemoveElement(PageId(), ref); - PostRenderAction(action); - } +bool RenderPage::RemoveEvent(const std::string &ref, const std::string &event) { + RenderObject *render = GetRenderObject(ref); + if (render == nullptr) return false; - void RenderPage::SendMoveElementAction(const std::string &ref, const std::string &parent_ref, int index) { - RenderAction *action = new RenderActionMoveElement(PageId(), ref, parent_ref, index); - PostRenderAction(action); - } + render->RemoveEvent(event); - void RenderPage::SendLayoutAction(RenderObject *render, int index) { - if (render == nullptr) - return; + RenderAction *action = new RenderActionRemoveEvent(this->page_id_, ref, event); + PostRenderAction(action); + return true; +} - RenderAction *action = new RenderActionLayout(PageId(), render, index); - PostRenderAction(action); +bool RenderPage::CreateFinish() { + if (this->render_root_ == nullptr) { + return false; } + Batch(); + SendCreateFinishAction(); + return true; +} - void RenderPage::SendUpdateStyleAction(RenderObject *render, - std::vector<std::pair<std::string, std::string>> *style, - std::vector<std::pair<std::string, std::string>> *margin, - std::vector<std::pair<std::string, std::string>> *padding, - std::vector<std::pair<std::string, std::string>> *border) { - RenderAction *action = new RenderActionUpdateStyle(PageId(), render->ref(), style, margin, padding, border); - PostRenderAction(action); +void RenderPage::LayoutImmediately() { + if (is_dirty() && kUseVSync) { + CalculateLayout(); + this->need_layout_.store(false); + set_is_dirty(false); } +} - void RenderPage::SendUpdateAttrAction(RenderObject *render, - std::vector<std::pair<std::string, std::string>> *attrs) { - RenderAction *action = new RenderActionUpdateAttr(PageId(), render->ref(), attrs); - PostRenderAction(action); +void RenderPage::PostRenderAction(RenderAction *action) { + if (action != nullptr) { + action->ExecuteAction(); + delete action; + action = nullptr; } +} - void RenderPage::SendUpdateAttrAction(RenderObject *render, - std::map<std::string, std::string> *attrs) { - std::vector<std::pair<std::string, std::string>> *vAttrs = new std::vector<std::pair<std::string, std::string>>(); - for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) { - vAttrs->insert(vAttrs->begin(), std::pair<std::string, std::string>(iter->first, iter->second)); - } +void RenderPage::PushRenderToRegisterMap(RenderObject *render) { + if (render == nullptr) return; - RenderAction *action = new RenderActionUpdateAttr(PageId(), render->ref(), vAttrs); - PostRenderAction(action); + std::string ref = render->ref(); + this->render_object_registers_.insert( + std::pair<std::string, RenderObject *>(ref, render)); - if (vAttrs != nullptr) { - vAttrs->clear(); - delete vAttrs; - vAttrs = nullptr; + for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); + it++) { + RenderObject *child = static_cast<RenderObject *>(*it); + if (child != nullptr) { + PushRenderToRegisterMap(child); } } +} - void RenderPage::SendCreateFinishAction() { - RenderAction *action = new RenderActionCreateFinish(PageId()); - PostRenderAction(action); - } +void RenderPage::RemoveRenderFromRegisterMap(RenderObject *render) { + if (render == nullptr) return; - void RenderPage::SendAppendTreeCreateFinish(const std::string &ref) { - RenderAction *action = new RenderActionAppendTreeCreateFinish(PageId(), ref); - PostRenderAction(action); - } - - void RenderPage::CssLayoutTime(const long long &time) { - if (this->render_performance != nullptr) - this->render_performance->cssLayoutTime += time; - } + this->render_object_registers_.erase(render->ref()); - void RenderPage::ParseJsonTime(const long long &time) { - if (this->render_performance != nullptr) - this->render_performance->parseJsonTime += time; - } - - void RenderPage::CallBridgeTime(const long long &time) { - if (this->render_performance != nullptr) - this->render_performance->callBridgeTime += time; + for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); + it++) { + RenderObject *child = static_cast<RenderObject *>(*it); + if (child != nullptr) { + RemoveRenderFromRegisterMap(child); + } } +} - std::vector<long> RenderPage::PrintFirstScreenLog() { - std::vector<long> ret; - if (this->render_performance != nullptr) - ret = this->render_performance->PrintPerformanceLog(onFirstScreen); - return ret; - } +void RenderPage::SendCreateBodyAction(RenderObject *render) { + if (render == nullptr) return; - std::vector<long> RenderPage::PrintRenderSuccessLog() { - std::vector<long> ret; - if (this->render_performance != nullptr) - ret = this->render_performance->PrintPerformanceLog(onRenderSuccess); - return ret; - } + RenderAction *action = new RenderActionCreateBody(page_id(), render); + PostRenderAction(action); - void RenderPage::Batch() { - if ((kUseVSync && this->need_layout.load()) || !kUseVSync) { - CalculateLayout(); - this->need_layout.store(false); - updateDirty(false); + Index i = 0; + for (auto it = render->ChildListIterBegin(); it != render->ChildListIterEnd(); + it++) { + RenderObject *child = static_cast<RenderObject *>(*it); + if (child != nullptr) { + SendAddElementAction(child, render, i, true); } + ++i; } - RenderObject* RenderPage::GetRenderObject(const std::string &ref) { - std::map<std::string, RenderObject *>::iterator iter = this->render_object_registers.find(ref); - if (iter != this->render_object_registers.end()) { - return iter->second; - } else { - return nullptr; - } - } - - void RenderPage::OnRenderPageInit() { - + if (i > 0 && render->IsAppendTree()) { + SendAppendTreeCreateFinish(render->ref()); } +} - void RenderPage::OnRenderProcessStart() { - +void RenderPage::SendAddElementAction(RenderObject *child, RenderObject *parent, + int index, bool is_recursion, + bool will_layout) { + if (child == nullptr || parent == nullptr) return; + if (parent != nullptr && parent->type() == WeexCore::kRenderRecycleList) { + will_layout = false; } - void RenderPage::OnRenderProcessExited() { + RenderAction *action = + new RenderActionAddElement(page_id(), child, parent, index, will_layout); + PostRenderAction(action); + Index i = 0; + for (auto it = child->ChildListIterBegin(); it != child->ChildListIterEnd(); + it++) { + RenderObject *grandson = static_cast<RenderObject *>(*it); + if (grandson != nullptr) { + SendAddElementAction(grandson, child, i, true, will_layout); + } + ++i; } - void RenderPage::OnRenderProcessGone() { - + if (child->type() == WeexCore::kRenderRecycleList) { + RenderList *render_list = static_cast<RenderList *>(child); + std::vector<RenderObject *> &cell_slots = render_list->CellSlots(); + for (auto it = cell_slots.begin(); it != cell_slots.end(); it++) { + RenderObject *grandson = static_cast<RenderObject *>(*it); + if (grandson != nullptr) { + SendAddElementAction(grandson, child, -1, true, will_layout); + } + ++i; + } } - void RenderPage::OnRenderPageClose() { - - } -} //namespace WeexCore + if (!is_recursion && i > 0 && child->IsAppendTree()) { + SendAppendTreeCreateFinish(child->ref()); + } +} + +void RenderPage::SendRemoveElementAction(const std::string &ref) { + RenderAction *action = new RenderActionRemoveElement(page_id(), ref); + PostRenderAction(action); +} + +void RenderPage::SendMoveElementAction(const std::string &ref, + const std::string &parent_ref, + int index) { + RenderAction *action = + new RenderActionMoveElement(page_id(), ref, parent_ref, index); + PostRenderAction(action); +} + +void RenderPage::SendLayoutAction(RenderObject *render, int index) { + if (render == nullptr) return; + + RenderAction *action = new RenderActionLayout(page_id(), render, index); + PostRenderAction(action); +} + +void RenderPage::SendUpdateStyleAction( + RenderObject *render, + std::vector<std::pair<std::string, std::string>> *style, + std::vector<std::pair<std::string, std::string>> *margin, + std::vector<std::pair<std::string, std::string>> *padding, + std::vector<std::pair<std::string, std::string>> *border) { + RenderAction *action = new RenderActionUpdateStyle( + page_id(), render->ref(), style, margin, padding, border); + PostRenderAction(action); +} + +void RenderPage::SendUpdateAttrAction( + RenderObject *render, + std::vector<std::pair<std::string, std::string>> *attrs) { + RenderAction *action = + new RenderActionUpdateAttr(page_id(), render->ref(), attrs); + PostRenderAction(action); +} + +void RenderPage::SendUpdateAttrAction( + RenderObject *render, std::map<std::string, std::string> *attrs) { + std::vector<std::pair<std::string, std::string>> *vAttrs = + new std::vector<std::pair<std::string, std::string>>(); + for (auto iter = attrs->cbegin(); iter != attrs->cend(); iter++) { + vAttrs->insert(vAttrs->begin(), std::pair<std::string, std::string>( + iter->first, iter->second)); + } + + RenderAction *action = + new RenderActionUpdateAttr(page_id(), render->ref(), vAttrs); + PostRenderAction(action); + + if (vAttrs != nullptr) { + vAttrs->clear(); + delete vAttrs; + vAttrs = nullptr; + } +} + +void RenderPage::SendCreateFinishAction() { + RenderAction *action = new RenderActionCreateFinish(page_id()); + PostRenderAction(action); +} + +void RenderPage::SendAppendTreeCreateFinish(const std::string &ref) { + RenderAction *action = new RenderActionAppendTreeCreateFinish(page_id(), ref); + PostRenderAction(action); +} + +void RenderPage::CssLayoutTime(const int64_t &time) { + if (this->render_performance_ != nullptr) + this->render_performance_->cssLayoutTime += time; +} + +void RenderPage::ParseJsonTime(const int64_t &time) { + if (this->render_performance_ != nullptr) + this->render_performance_->parseJsonTime += time; +} + +void RenderPage::CallBridgeTime(const int64_t &time) { + if (this->render_performance_ != nullptr) + this->render_performance_->callBridgeTime += time; +} + +std::vector<int64_t> RenderPage::PrintFirstScreenLog() { + std::vector<int64_t> ret; + if (this->render_performance_ != nullptr) + ret = this->render_performance_->PrintPerformanceLog(onFirstScreen); + return ret; +} + +std::vector<int64_t> RenderPage::PrintRenderSuccessLog() { + std::vector<int64_t> ret; + if (this->render_performance_ != nullptr) + ret = this->render_performance_->PrintPerformanceLog(onRenderSuccess); + return ret; +} + +void RenderPage::Batch() { + if ((kUseVSync && this->need_layout_.load()) || !kUseVSync) { + CalculateLayout(); + this->need_layout_.store(false); + set_is_dirty(false); + } +} + +RenderObject *RenderPage::GetRenderObject(const std::string &ref) { + std::map<std::string, RenderObject *>::iterator iter = + this->render_object_registers_.find(ref); + if (iter != this->render_object_registers_.end()) { + return iter->second; + } else { + return nullptr; + } +} + +void RenderPage::OnRenderPageInit() {} + +void RenderPage::OnRenderProcessStart() {} + +void RenderPage::OnRenderProcessExited() {} + +void RenderPage::OnRenderProcessGone() {} + +void RenderPage::OnRenderPageClose() {} +} // namespace WeexCore http://git-wip-us.apache.org/repos/asf/incubator-weex/blob/ad255b3a/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 f179bdc..9310e16 100644 --- a/weex_core/Source/core/render/page/render_page.h +++ b/weex_core/Source/core/render/page/render_page.h @@ -16,172 +16,167 @@ * specific language governing permissions and limitations * under the License. */ -#ifndef RenderPage_H -#define RenderPage_H +#ifndef CORE_RENDER_PAGE_RENDER_PAGE_H_ +#define CORE_RENDER_PAGE_RENDER_PAGE_H_ -#include <vector> -#include <string> -#include <map> -#include <cmath> #include <atomic> +#include <cmath> +#include <map> +#include <string> +#include <utility> +#include <vector> namespace WeexCore { - class RenderAction; - - class RenderObject; - - class RenderPerformance; - - class RenderPage { - - private: +class RenderAction; - void TraverseTree(RenderObject *render, int index); +class RenderObject; - void PushRenderToRegisterMap(RenderObject *render); +class RenderPerformance; - void RemoveRenderFromRegisterMap(RenderObject *render); +class RenderPage { + private: + void TraverseTree(RenderObject *render, int index); - void SendCreateBodyAction(RenderObject *render); + void PushRenderToRegisterMap(RenderObject *render); - void - SendAddElementAction(RenderObject *child, RenderObject *parent, int index, bool is_recursion, - bool will_layout = true); + void RemoveRenderFromRegisterMap(RenderObject *render); - void SendRemoveElementAction(const std::string &ref); + void SendCreateBodyAction(RenderObject *render); - void SendMoveElementAction(const std::string &ref, const std::string &parent_ref, int index); + void SendAddElementAction(RenderObject *child, RenderObject *parent, + int index, bool is_recursion, + bool will_layout = true); - void SendLayoutAction(RenderObject *render, int index); + void SendRemoveElementAction(const std::string &ref); - void SendUpdateStyleAction(RenderObject *render, - std::vector<std::pair<std::string, std::string>> *style, - std::vector<std::pair<std::string, std::string>> *margin, - std::vector<std::pair<std::string, std::string>> *padding, - std::vector<std::pair<std::string, std::string>> *border); + void SendMoveElementAction(const std::string &ref, + const std::string &parent_ref, int index); - void SendUpdateAttrAction(RenderObject *render, - std::vector<std::pair<std::string, std::string>> *attrs); + void SendLayoutAction(RenderObject *render, int index); - void SendCreateFinishAction(); + void SendUpdateStyleAction( + RenderObject *render, + std::vector<std::pair<std::string, std::string>> *style, + std::vector<std::pair<std::string, std::string>> *margin, + std::vector<std::pair<std::string, std::string>> *padding, + std::vector<std::pair<std::string, std::string>> *border); - void SendAppendTreeCreateFinish(const std::string &ref); + void SendUpdateAttrAction( + RenderObject *render, + std::vector<std::pair<std::string, std::string>> *attrs); - void PostRenderAction(RenderAction *action); + void SendCreateFinishAction(); - public: + void SendAppendTreeCreateFinish(const std::string &ref); - explicit RenderPage(std::string page_id); + void PostRenderAction(RenderAction *action); - ~RenderPage(); + public: - void CalculateLayout(); + explicit RenderPage(std::string page_id); - bool CreateRootRender(RenderObject *root); + ~RenderPage(); - bool AddRenderObject(const std::string &parent_ref, int insert_posiotn, RenderObject *child); + void CalculateLayout(); - bool RemoveRenderObject(const std::string &ref); + bool CreateRootRender(RenderObject *root); - bool MoveRenderObject(const std::string &ref, const std::string &parent_ref, int index); + bool AddRenderObject(const std::string &parent_ref, int insert_posiotn, + RenderObject *child); - bool - UpdateStyle(const std::string &ref, std::vector<std::pair<std::string, std::string>> *styles); + bool RemoveRenderObject(const std::string &ref); - bool - UpdateAttr(const std::string &ref, std::vector<std::pair<std::string, std::string>> *attrs); + bool MoveRenderObject(const std::string &ref, const std::string &parent_ref, + int index); - void - SetDefaultHeightAndWidthIntoRootRender(const float default_width, const float default_height, - const bool is_width_wrap_content, - const bool is_height_wrap_content); + bool UpdateStyle(const std::string &ref, + std::vector<std::pair<std::string, std::string>> *styles); - bool AddEvent(const std::string &ref, const std::string &event); + bool UpdateAttr(const std::string &ref, + std::vector<std::pair<std::string, std::string>> *attrs); - bool RemoveEvent(const std::string &ref, const std::string &event); + void SetDefaultHeightAndWidthIntoRootRender( + const float default_width, const float default_height, + const bool is_width_wrap_content, const bool is_height_wrap_content); - bool CreateFinish(); + bool AddEvent(const std::string &ref, const std::string &event); - void Batch(); + bool RemoveEvent(const std::string &ref, const std::string &event); - void CssLayoutTime(const long long &time); + bool CreateFinish(); - void ParseJsonTime(const long long &time); + void Batch(); - void CallBridgeTime(const long long &time); + void CssLayoutTime(const int64_t &time); - std::vector<long> PrintFirstScreenLog(); + void ParseJsonTime(const int64_t &time); - std::vector<long> PrintRenderSuccessLog(); + void CallBridgeTime(const int64_t &time); - void LayoutImmediately(); + std::vector<int64_t> PrintFirstScreenLog(); - void SendUpdateAttrAction(RenderObject *render, std::map<std::string, std::string> *attrs); + std::vector<int64_t> PrintRenderSuccessLog(); - RenderObject *GetRenderObject(const std::string &ref); + void LayoutImmediately(); - void SetRootRenderObject(RenderObject *root); + void SendUpdateAttrAction(RenderObject *render, + std::map<std::string, std::string> *attrs); - // ****** Life Cycle ****** // + RenderObject *GetRenderObject(const std::string &ref); - void OnRenderPageInit(); + void SetRootRenderObject(RenderObject *root); - void OnRenderProcessStart(); + // ****** Life Cycle ****** // - void OnRenderProcessExited(); + void OnRenderPageInit(); - void OnRenderProcessGone(); + void OnRenderProcessStart(); - void OnRenderPageClose(); + void OnRenderProcessExited(); + void OnRenderProcessGone(); - inline std::string PageId() { - return this->page_id; - } + void OnRenderPageClose(); - inline float ViewPortWidth() const { - return this->viewport_width; - } +public: - inline void SetViewPortWidth(float viewport_width) { - this->viewport_width = viewport_width; - } + inline std::string page_id() { return this->page_id_; } - inline bool isDirty() { - return this->dirty.load(); - } + inline float viewport_width() const { return this->viewport_width_; } - inline void updateDirty(bool dirty) { - this->dirty.store(dirty); - } + inline void set_viewport_width(float viewport_width) { + this->viewport_width_ = viewport_width; + } - inline void SetRenderContainerWidthWrapContent(bool wrap) { - this->is_render_container_width_wrap_content.store(wrap); - } + inline bool is_dirty() { return this->is_dirty_.load(); } - inline bool GetRenderContainerWidthWrapContent() { - return this->is_render_container_width_wrap_content.load(); - } + inline void set_is_dirty(bool dirty) { this->is_dirty_.store(dirty); } - public: + inline void set_is_render_container_width_wrap_content(bool wrap) { + this->is_render_container_width_wrap_content_.store(wrap); + } - static constexpr bool kUseVSync = true; - std::atomic_bool need_layout{false}; - std::atomic_bool has_fore_layout_action{false}; + inline bool is_render_container_width_wrap_content() { + return this->is_render_container_width_wrap_content_.load(); + } - private: + public: + static constexpr bool kUseVSync = true; + std::atomic_bool need_layout_{false}; + std::atomic_bool has_fore_layout_action_{false}; - float viewport_width; - RenderObject *render_root = nullptr; - std::string page_id; - std::pair<float, float> render_page_size; - std::map<std::string, RenderObject *> render_object_registers; - RenderPerformance *render_performance; - std::atomic_bool dirty{true}; - std::atomic_bool is_render_container_width_wrap_content{false}; - std::atomic_bool is_render_container_height_wrap_content{false}; - }; -} + private: + float viewport_width_; + RenderObject *render_root_ = nullptr; + std::string page_id_; + std::pair<float, float> render_page_size_; + std::map<std::string, RenderObject *> render_object_registers_; + RenderPerformance *render_performance_; + 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}; +}; +} // namespace WeexCore -#endif //RenderManager_h \ No newline at end of file +#endif // CORE_RENDER_PAGE_RENDER_PAGE_H_
