本文整理汇总了C++中dom::Element::hasAttribute方法的典型用法代码示例。如果您正苦于以下问题:C++ Element::hasAttribute方法的具体用法?C++ Element::hasAttribute怎么用?C++ Element::hasAttribute使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类dom::Element
的用法示例。
在下文中一共展示了Element::hasAttribute方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: align
void ofxDOMFlexBoxLayout::align(FlexDirection direction){
bool horizontal = direction == FlexDirection::ROW;
float paddingHorizontal = DOMLH::getPaddingHorizontal(_parent);
float paddingVertical = DOMLH::getPaddingVertical(_parent);
float wParent = ofGetWidth();
float hParent = ofGetHeight();
if(_parent->parent()){
wParent = _parent->getSizeByParent().x;
hParent = _parent->getSizeByParent().y;
}
float totalWidth = DOMLH::getDesiredWidthStretched(_parent, wParent) - paddingHorizontal;
float totalHeight = DOMLH::getDesiredHeightStretched(_parent, hParent) - paddingVertical;
// if(ofxGuiElement* el = dynamic_cast<ofxGuiElement*>(_parent)){
// cout << el->getName() << " total size: " << totalWidth << " " << totalHeight << endl;
// }
vector<vector<DOM::Element*>> lines;
vector<vector<DOM::Element*>> noFlexItems;
vector<vector<DOM::Element*>> flexItems;
vector<vector<float>> flexItemsBasis;
vector<float> totalSpaceMainAxis;
float mainAxisSize = horizontal ? totalWidth : totalHeight;
float crossAxisSize = horizontal ? totalHeight : totalWidth;
int linecount = 0;
if(children().size() > 0){
//newline
lines.push_back(vector<DOM::Element*>());
noFlexItems.push_back(vector<DOM::Element*>());
flexItems.push_back(vector<DOM::Element*>());
flexItemsBasis.push_back(vector<float>());
totalSpaceMainAxis.push_back(mainAxisSize);
}
//sort children according to flex attribute and main size of children
for(unsigned int i = 0; i < children().size(); i++){
DOM::Element* element = children().at(i);
float w, h;
if(horizontal){
w = DOMLH::getDesiredWidth(element, totalWidth);
h = DOMLH::getDesiredHeight(element, totalHeight);
}else{
w = DOMLH::getDesiredWidth(element, totalWidth);
h = DOMLH::getDesiredHeight(element, totalHeight);
}
float elementMainSize = horizontal ? w : h;
float elementCrossSize = horizontal ? h : w;
if(element){
if(elementFlexing(element)){
// element->setSizeByParent(totalWidth, totalHeight);
// set to minimal size on main axis
if(horizontal){
element->setSizeByParent(elementMainSize + DOMLH::getMarginHorizontal(element), elementCrossSize + DOMLH::getMarginVertical(element));
element->setLayoutSize(elementMainSize, elementCrossSize, true);
elementMainSize = element->getWidth() + DOMLH::getMarginHorizontal(element);
}else {
element->setSizeByParent(elementCrossSize + DOMLH::getMarginHorizontal(element), elementMainSize + DOMLH::getMarginVertical(element));
element->setLayoutSize(elementCrossSize, elementMainSize, true);
elementMainSize = element->getHeight() + DOMLH::getMarginVertical(element);
}
//if element is flexible, add it to the current line and save the items flex basis
if(element->hasAttribute("_flex")){
std::string flexval = element->getAttribute<std::string>("_flex");
if(flexval == "auto"){
lines.at(linecount).push_back(element);
flexItems.at(linecount).push_back(element);
flexItemsBasis.at(linecount).push_back(1);
continue;
}
if(isFloat(ofTrim(flexval))){
float intflexval = ofToFloat(flexval);
if(intflexval > 0){
lines.at(linecount).push_back(element);
flexItems.at(linecount).push_back(element);
flexItemsBasis.at(linecount).push_back(intflexval);
continue;
}
}
}
// not flexible or no valid flex attribute, not flexing on main axis
// add to new line if it does not fit and flex-wrap is on
if((int)totalSpaceMainAxis.at(linecount) - (int)elementMainSize < 0){
FlexWrap _wrap = getFlexWrap(_parent);
if(_wrap == FlexWrap::NOWRAP || i == 0){
//.........这里部分代码省略.........