[go: nahoru, domu]

Skip to content
This repository has been archived by the owner on Jun 3, 2021. It is now read-only.

Commit

Permalink
[WEEX-442][Core] Fix setViewPort
Browse files Browse the repository at this point in the history
  • Loading branch information
miomin authored and YorkShen committed Jun 26, 2018
1 parent 361df72 commit d0cf433
Show file tree
Hide file tree
Showing 7 changed files with 54 additions and 29 deletions.
33 changes: 27 additions & 6 deletions weex_core/Source/core/render/manager/render_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand All @@ -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())));
}
}
}
Expand Down Expand Up @@ -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;
Expand Down
24 changes: 10 additions & 14 deletions weex_core/Source/core/render/manager/render_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,7 @@ class RenderPage;

class RenderManager {
private:
RenderManager() {
this->viewport_width_ = kDefaultViewPortWidth;
}
RenderManager() {}

~RenderManager() {}

Expand Down Expand Up @@ -79,33 +77,31 @@ 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();
}
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

Expand Down
12 changes: 6 additions & 6 deletions weex_core/Source/core/render/node/render_list.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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_) {
Expand Down Expand Up @@ -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;
}
Expand Down
4 changes: 2 additions & 2 deletions weex_core/Source/core/render/node/render_mask.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
2 changes: 1 addition & 1 deletion weex_core/Source/core/render/node/render_object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
1 change: 1 addition & 0 deletions weex_core/Source/core/render/page/render_page.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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() {
Expand Down
7 changes: 7 additions & 0 deletions weex_core/Source/core/render/page/render_page.h
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,12 @@ class RenderPage {
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};
Expand All @@ -169,6 +175,7 @@ class RenderPage {
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

Expand Down

0 comments on commit d0cf433

Please sign in to comment.