/* Even if the subclass overrides onInflate, they should always be sure to call the inherited method, so that we get called. */ void SkView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { SkScalar x, y; x = this->locX(); y = this->locY(); (void)dom.findScalar(node, "x", &x); (void)dom.findScalar(node, "y", &y); this->setLoc(x, y); x = this->width(); y = this->height(); (void)dom.findScalar(node, "width", &x); (void)dom.findScalar(node, "height", &y); this->setSize(x, y); // inflate the flags static const char* gFlagNames[] = { "visible", "enabled", "focusable", "flexH", "flexV" }; SkASSERT(SK_ARRAY_COUNT(gFlagNames) == kFlagShiftCount); bool b; uint32_t flags = this->getFlags(); for (unsigned i = 0; i < SK_ARRAY_COUNT(gFlagNames); i++) if (dom.findBool(node, gFlagNames[i], &b)) flags = SkSetClearShift(flags, b, i); this->setFlags(flags); }
void SkStackViewLayout::onInflate(const SkDOM& dom, const SkDOM::Node* node) { int index; SkScalar value[4]; if ((index = dom.findList(node, "orient", "horizontal,vertical")) >= 0) this->setOrient((Orient)index); else assert_no_attr(dom, node, "orient"); if (dom.findScalars(node, "margin", value, 4)) { SkRect margin; margin.set(value[0], value[1], value[2], value[3]); this->setMargin(margin); } else assert_no_attr(dom, node, "margin"); if (dom.findScalar(node, "spacer", value)) this->setSpacer(value[0]); else assert_no_attr(dom, node, "spacer"); if ((index = dom.findList(node, "pack", "start,center,end")) >= 0) this->setPack((Pack)index); else assert_no_attr(dom, node, "pack"); if ((index = dom.findList(node, "align", "start,center,end,stretch")) >= 0) this->setAlign((Align)index); else assert_no_attr(dom, node, "align"); }
void SkPaint_Inflate(SkPaint* paint, const SkDOM& dom, const SkDOM::Node* node) { SkASSERT(paint); SkASSERT(&dom); SkASSERT(node); SkScalar x; if (dom.findScalar(node, "stroke-width", &x)) paint->setStrokeWidth(x); if (dom.findScalar(node, "text-size", &x)) paint->setTextSize(x); bool b; SkASSERT("legacy: use is-stroke" && !dom.findBool(node, "is-frame", &b)); if (dom.findBool(node, "is-stroke", &b)) paint->setStyle(b ? SkPaint::kStroke_Style : SkPaint::kFill_Style); if (dom.findBool(node, "is-antialias", &b)) paint->setAntiAlias(b); if (dom.findBool(node, "is-lineartext", &b)) paint->setLinearText(b); const char* str = dom.findAttr(node, "color"); if (str) { SkColor c = paint->getColor(); if (SkParse::FindColor(str, &c)) paint->setColor(c); } // do this AFTER parsing for the color if (dom.findScalar(node, "opacity", &x)) { x = SkMaxScalar(0, SkMinScalar(x, SK_Scalar1)); paint->setAlpha(SkScalarRound(x * 255)); } int index = dom.findList(node, "text-anchor", "left,center,right"); if (index >= 0) paint->setTextAlign((SkPaint::Align)index); SkShader* shader = inflate_shader(dom, node); if (shader) paint->setShader(shader)->unref(); }
void SkListView::onInflate(const SkDOM& dom, const SkDOM::Node* node) { this->INHERITED::onInflate(dom, node); SkScalar x; const SkDOM::Node* child; if (dom.findScalar(node, "row-height", &x)) this->setRowHeight(x); if ((child = dom.getFirstChild(node, "hilite-paint")) != NULL) SkPaint_Inflate(&this->paint(kHiliteCell_Attr), dom, child); // look for a listsource { SkListSource* src = NULL; if ((child = dom.getFirstChild(node, "file-listsource")) != NULL) { const char* path = dom.findAttr(child, "path"); if (path) src = SkListSource::CreateFromDir( path, dom.findAttr(child, "filter"), dom.findAttr(child, "target")); } else if ((child = dom.getFirstChild(node, "xml-listsource")) != NULL) { src = SkListSource::CreateFromDOM(dom, child); } if (src) { this->setListSource(src)->unref(); this->setSelection(0); } } }