void PageViewReader::setPropsWithFlatBuffers(cocos2d::Node *node, const flatbuffers::Table *pageViewOptions) { PageView* pageView = static_cast<PageView*>(node); auto options = (PageViewOptions*)pageViewOptions; bool clipEnabled = options->clipEnabled() != 0; pageView->setClippingEnabled(clipEnabled); bool backGroundScale9Enabled = options->backGroundScale9Enabled() != 0; pageView->setBackGroundImageScale9Enabled(backGroundScale9Enabled); auto f_bgColor = options->bgColor(); Color3B bgColor(f_bgColor->r(), f_bgColor->g(), f_bgColor->b()); auto f_bgStartColor = options->bgStartColor(); Color3B bgStartColor(f_bgStartColor->r(), f_bgStartColor->g(), f_bgStartColor->b()); auto f_bgEndColor = options->bgEndColor(); Color3B bgEndColor(f_bgEndColor->r(), f_bgEndColor->g(), f_bgEndColor->b()); auto f_colorVecor = options->colorVector(); Vec2 colorVector(f_colorVecor->vectorX(), f_colorVecor->vectorY()); pageView->setBackGroundColorVector(colorVector); int bgColorOpacity = options->bgColorOpacity(); int colorType = options->colorType(); pageView->setBackGroundColorType(Layout::BackGroundColorType(colorType)); pageView->setBackGroundColor(bgStartColor, bgEndColor); pageView->setBackGroundColor(bgColor); pageView->setBackGroundColorOpacity(bgColorOpacity); bool fileExist = false; std::string errorFilePath = ""; auto imageFileNameDic = options->backGroundImageData(); int imageFileNameType = imageFileNameDic->resourceType(); std::string imageFileName = imageFileNameDic->path()->c_str(); if (imageFileName != "") { switch (imageFileNameType) { case 0: { if (FileUtils::getInstance()->isFileExist(imageFileName)) { fileExist = true; } else { errorFilePath = imageFileName; fileExist = false; } break; } case 1: { std::string plist = imageFileNameDic->plistFile()->c_str(); SpriteFrame* spriteFrame = SpriteFrameCache::getInstance()->getSpriteFrameByName(imageFileName); if (spriteFrame) { fileExist = true; } else { if (FileUtils::getInstance()->isFileExist(plist)) { ValueMap value = FileUtils::getInstance()->getValueMapFromFile(plist); ValueMap metadata = value["metadata"].asValueMap(); std::string textureFileName = metadata["textureFileName"].asString(); if (!FileUtils::getInstance()->isFileExist(textureFileName)) { errorFilePath = textureFileName; } } else { errorFilePath = plist; } fileExist = false; } break; } default: break; } if (fileExist) { pageView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType); } // else // { // auto label = Label::create(); // label->setString(__String::createWithFormat("%s missed", errorFilePath.c_str())->getCString()); // pageView->addChild(label); // } } auto widgetOptions = options->widgetOptions(); auto f_color = widgetOptions->color(); Color3B color(f_color->r(), f_color->g(), f_color->b()); pageView->setColor(color); int opacity = widgetOptions->alpha(); pageView->setOpacity(opacity); auto widgetReader = WidgetReader::getInstance(); widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions()); if (backGroundScale9Enabled) { auto f_capInsets = options->capInsets(); Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height()); pageView->setBackGroundImageCapInsets(capInsets); auto f_scale9Size = options->scale9Size(); Size scale9Size(f_scale9Size->width(), f_scale9Size->height()); pageView->setContentSize(scale9Size); } else { if (!pageView->isIgnoreContentAdaptWithSize()) { Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height()); pageView->setContentSize(contentSize); } } }
void PageViewReader::setPropsFromProtocolBuffers(ui::Widget *widget, const protocolbuffers::NodeTree &nodeTree) { WidgetReader::setPropsFromProtocolBuffers(widget, nodeTree); PageView* pageView = static_cast<PageView*>(widget); const protocolbuffers::PageViewOptions& options = nodeTree.pageviewoptions(); std::string protocolBuffersPath = GUIReader::getInstance()->getFilePath(); CCLOG("options.clipable() = %d", options.clipable()); pageView->setClippingEnabled(options.clipable()); bool backGroundScale9Enable = options.backgroundscale9enable(); pageView->setBackGroundImageScale9Enabled(backGroundScale9Enable); int cr; int cg; int cb; int scr; int scg; int scb; int ecr; int ecg; int ecb; cr = options.has_bgcolorr() ? options.bgcolorr() : 150; cg = options.has_bgcolorg() ? options.bgcolorg() : 150; cb = options.has_bgcolorb() ? options.bgcolorb() : 150; scr = options.has_bgstartcolorr() ? options.bgstartcolorr() : 255; scg = options.has_bgstartcolorg() ? options.bgstartcolorg() : 255; scb = options.has_bgstartcolorb() ? options.bgstartcolorb() : 255; ecr = options.has_bgendcolorr() ? options.bgendcolorr() : 255; ecg = options.has_bgendcolorg() ? options.bgendcolorg() : 150; ecb = options.has_bgendcolorb() ? options.bgendcolorb() : 100; float bgcv1 = 0.0f; float bgcv2 = -0.5f; if(options.has_vectorx()) { bgcv1 = options.vectorx(); } if(options.has_vectory()) { bgcv2 = options.vectory(); } pageView->setBackGroundColorVector(Vec2(bgcv1, bgcv2)); int co = options.has_bgcoloropacity() ? options.bgcoloropacity() : 100; int colorType = options.has_colortype() ? options.colortype() : 1; pageView->setBackGroundColorType(Layout::BackGroundColorType(colorType)); pageView->setBackGroundColor(Color3B(scr, scg, scb),Color3B(ecr, ecg, ecb)); pageView->setBackGroundColor(Color3B(cr, cg, cb)); pageView->setBackGroundColorOpacity(co); const protocolbuffers::ResourceData& imageFileNameDic = options.backgroundimagedata(); int imageFileNameType = imageFileNameDic.resourcetype(); std::string imageFileName = this->getResourcePath(imageFileNameDic.path(), (Widget::TextureResType)imageFileNameType); pageView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType); if (backGroundScale9Enable) { float cx = options.capinsetsx(); float cy = options.capinsetsy(); float cw = options.has_capinsetswidth() ? options.capinsetswidth() : 1; float ch = options.has_capinsetsheight() ? options.capinsetsheight() : 1; pageView->setBackGroundImageCapInsets(Rect(cx, cy, cw, ch)); bool sw = options.has_scale9width(); bool sh = options.has_scale9height(); if (sw && sh) { float swf = options.scale9width(); float shf = options.scale9height(); pageView->setContentSize(Size(swf, shf)); } } const protocolbuffers::WidgetOptions& widgetOptions = nodeTree.widgetoptions(); int red = widgetOptions.has_colorr() ? widgetOptions.colorr() : 255; int green = widgetOptions.has_colorg() ? widgetOptions.colorg() : 255; int blue = widgetOptions.has_colorb() ? widgetOptions.colorb() : 255; pageView->setColor(Color3B(red, green, blue)); int opacity = widgetOptions.has_alpha() ? widgetOptions.alpha() : 255; pageView->setOpacity(opacity); // other commonly protperties setAnchorPointForWidget(widget, nodeTree); bool flipX = widgetOptions.flipx(); bool flipY = widgetOptions.flipy(); if (flipX) { widget->setFlippedX(flipX); } if (flipY) { widget->setFlippedY(flipY); } }
void PageViewReader::setPropsWithFlatBuffers(cocos2d::Node *node, const flatbuffers::Table *pageViewOptions) { PageView* pageView = static_cast<PageView*>(node); auto options = (PageViewOptions*)pageViewOptions; bool clipEnabled = options->clipEnabled(); pageView->setClippingEnabled(clipEnabled); bool backGroundScale9Enabled = options->backGroundScale9Enabled(); pageView->setBackGroundImageScale9Enabled(backGroundScale9Enabled); auto f_bgColor = options->bgColor(); Color3B bgColor(f_bgColor->r(), f_bgColor->g(), f_bgColor->b()); auto f_bgStartColor = options->bgStartColor(); Color3B bgStartColor(f_bgStartColor->r(), f_bgStartColor->g(), f_bgStartColor->b()); auto f_bgEndColor = options->bgEndColor(); Color3B bgEndColor(f_bgEndColor->r(), f_bgEndColor->g(), f_bgEndColor->b()); auto f_colorVecor = options->colorVector(); Vec2 colorVector(f_colorVecor->vectorX(), f_colorVecor->vectorY()); pageView->setBackGroundColorVector(colorVector); int bgColorOpacity = options->bgColorOpacity(); int colorType = options->colorType(); pageView->setBackGroundColorType(Layout::BackGroundColorType(colorType)); pageView->setBackGroundColor(bgStartColor, bgEndColor); pageView->setBackGroundColor(bgColor); pageView->setBackGroundColorOpacity(bgColorOpacity); auto imageFileNameDic = options->backGroundImageData(); int imageFileNameType = imageFileNameDic->resourceType(); std::string imageFileName = imageFileNameDic->path()->c_str(); pageView->setBackGroundImage(imageFileName, (Widget::TextureResType)imageFileNameType); auto widgetOptions = options->widgetOptions(); auto f_color = widgetOptions->color(); Color3B color(f_color->r(), f_color->g(), f_color->b()); pageView->setColor(color); int opacity = widgetOptions->alpha(); pageView->setOpacity(opacity); auto widgetReader = WidgetReader::getInstance(); widgetReader->setPropsWithFlatBuffers(node, (Table*)options->widgetOptions()); if (backGroundScale9Enabled) { auto f_capInsets = options->capInsets(); Rect capInsets(f_capInsets->x(), f_capInsets->y(), f_capInsets->width(), f_capInsets->height()); pageView->setBackGroundImageCapInsets(capInsets); auto f_scale9Size = options->scale9Size(); Size scale9Size(f_scale9Size->width(), f_scale9Size->height()); pageView->setContentSize(scale9Size); } else { if (!pageView->isIgnoreContentAdaptWithSize()) { Size contentSize(widgetOptions->size()->width(), widgetOptions->size()->height()); pageView->setContentSize(contentSize); } } }
void PageViewReader::setPropsFromXML(cocos2d::ui::Widget *widget, const tinyxml2::XMLElement *objectData) { WidgetReader::setPropsFromXML(widget, objectData); PageView* pageView = static_cast<PageView*>(widget); std::string xmlPath = GUIReader::getInstance()->getFilePath(); bool scale9Enabled = false; float width = 0.0f, height = 0.0f; float cx = 0.0f, cy = 0.0f, cw = 0.0f, ch = 0.0f; Layout::BackGroundColorType colorType = Layout::BackGroundColorType::NONE; int color_opacity = 255, bgimg_opacity = 255, opacity = 255; int red = 255, green = 255, blue = 255; int bgimg_red = 255, bgimg_green = 255, bgimg_blue = 255; int singleRed = 255, singleGreen = 255, singleBlue = 255; int start_red = 255, start_green = 255, start_blue = 255; int end_red = 255, end_green = 255, end_blue = 255; float vector_color_x = 0.0f, vector_color_y = -0.5f; int resourceType = 0; std::string path = "", plistFile = ""; // attributes const tinyxml2::XMLAttribute* attribute = objectData->FirstAttribute(); while (attribute) { std::string name = attribute->Name(); std::string value = attribute->Value(); if (name == "ClipAble") { pageView->setClippingEnabled((value == "True") ? true : false); } else if (name == "ComboBoxIndex") { colorType = (Layout::BackGroundColorType)atoi(value.c_str()); } else if (name == "BackColorAlpha") { color_opacity = atoi(value.c_str()); } else if (name == "Alpha") { opacity = atoi(value.c_str()); bgimg_opacity = atoi(value.c_str()); } else if (name == "Scale9Enable") { scale9Enabled = (value == "True") ? true : false; } else if (name == "Scale9OriginX") { cx = atof(value.c_str()); } else if (name == "Scale9OriginY") { cy = atof(value.c_str()); } else if (name == "Scale9Width") { cw = atof(value.c_str()); } else if (name == "Scale9Height") { ch = atof(value.c_str()); } attribute = attribute->Next(); } // child elements const tinyxml2::XMLElement* child = objectData->FirstChildElement(); while (child) { std::string name = child->Name(); if (name == "Size") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "X") { width = atof(value.c_str()); } else if (name == "Y") { height = atof(value.c_str()); } attribute = attribute->Next(); } } else if (name == "CColor") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "R") { red = atoi(value.c_str()); bgimg_red = atoi(value.c_str()); } else if (name == "G") { green = atoi(value.c_str()); bgimg_green = atoi(value.c_str()); } else if (name == "B") { blue = atoi(value.c_str()); bgimg_blue = atoi(value.c_str()); } attribute = attribute->Next(); } } else if (name == "SingleColor") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "R") { singleRed = atoi(value.c_str()); } else if (name == "G") { singleGreen = atoi(value.c_str()); } else if (name == "B") { singleBlue = atoi(value.c_str()); } attribute = attribute->Next(); } } else if (name == "EndColor") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "R") { end_red = atoi(value.c_str()); } else if (name == "G") { end_green = atoi(value.c_str()); } else if (name == "B") { end_blue = atoi(value.c_str()); } attribute = attribute->Next(); } } else if (name == "FirstColor") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "R") { start_red = atoi(value.c_str()); } else if (name == "G") { start_green = atoi(value.c_str()); } else if (name == "B") { start_blue = atoi(value.c_str()); } attribute = attribute->Next(); } } else if (name == "ColorVector") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "ScaleX") { vector_color_x = atof(value.c_str()); } else if (name == "ScaleY") { vector_color_y = atof(value.c_str()); } attribute = attribute->Next(); } } else if (name == "FileData") { attribute = child->FirstAttribute(); while (attribute) { name = attribute->Name(); std::string value = attribute->Value(); if (name == "Path") { path = value; } else if (name == "Type") { resourceType = (value == "Normal" || value == "Default" || value == "MarkedSubImage") ? 0 : 1; } else if (name == "Plist") { plistFile = value; } attribute = attribute->Next(); } } child = child->NextSiblingElement(); } pageView->setColor(Color3B(red, green, blue)); pageView->setOpacity(opacity); pageView->setBackGroundColorType(colorType); switch (colorType) { case Layout::BackGroundColorType::SOLID: pageView->setBackGroundColor(Color3B(singleRed, singleGreen, singleBlue)); break; case Layout::BackGroundColorType::GRADIENT: pageView->setBackGroundColor(Color3B(start_red, start_green, start_blue), Color3B(end_red, end_green, end_blue)); pageView->setBackGroundColorVector(Vec2(vector_color_x, vector_color_y)); break; default: break; } pageView->setBackGroundColorOpacity(color_opacity); switch (resourceType) { case 0: { pageView->setBackGroundImage(xmlPath + path, Widget::TextureResType::LOCAL); break; } case 1: { SpriteFrameCache::getInstance()->addSpriteFramesWithFile(xmlPath + plistFile); pageView->setBackGroundImage(path, Widget::TextureResType::PLIST); break; } default: break; } if (path != "") { if (scale9Enabled) { pageView->setBackGroundImageScale9Enabled(scale9Enabled); pageView->setBackGroundImageCapInsets(Rect(cx, cy, cw, ch)); pageView->setContentSize(Size(width, height)); } } }