void WPaintedWidget::getDomChanges(std::vector<DomElement *>& result, WApplication *app) { DomElement *e = DomElement::getForUpdate(this, DomElement_DIV); updateDom(*e, false); result.push_back(e); bool createdNew = createPainter(); if (needRepaint_) { WPaintDevice *device = painter_->getPaintDevice ((repaintFlags_ & PaintUpdate) && !createdNew); if (renderWidth_ != 0 && renderHeight_ != 0) { paintEvent(device); #ifdef WT_TARGET_JAVA if (device->painter()) device->painter()->end(); #endif // WT_TARGET_JAVA } if (createdNew) { DomElement *canvas = DomElement::getForUpdate('p' + id(), DomElement_DIV); canvas->removeAllChildren(); painter_->createContents(canvas, device); result.push_back(canvas); } else { painter_->updateContents(result, device); } needRepaint_ = false; repaintFlags_ = 0; } }
DomElement *WPaintedWidget::createDomElement(WApplication *app) { createPainter(); DomElement *result = DomElement::createNew(domElementType()); setId(result, app); DomElement *wrap = result; if (width().isAuto() && height().isAuto()) { result->setProperty(PropertyStylePosition, "relative"); wrap = DomElement::createNew(DomElement_DIV); wrap->setProperty(PropertyStylePosition, "absolute"); wrap->setProperty(PropertyStyleLeft, "0"); wrap->setProperty(PropertyStyleRight, "0"); } DomElement *canvas = DomElement::createNew(DomElement_DIV); if (!app->environment().agentIsSpiderBot()) canvas->setId('p' + id()); WPaintDevice *device = painter_->getPaintDevice(false); //handle the widget correctly when inline and using VML if (painter_->renderType() == WWidgetPainter::InlineVml && isInline()) { result->setProperty(PropertyStyle, "zoom: 1;"); canvas->setProperty(PropertyStyleDisplay, "inline"); canvas->setProperty(PropertyStyle, "zoom: 1;"); } if (renderWidth_ != 0 && renderHeight_ != 0) { paintEvent(device); #ifdef WT_TARGET_JAVA if (device->painter()) device->painter()->end(); #endif // WT_TARGET_JAVA } painter_->createContents(canvas, device); needRepaint_ = false; wrap->addChild(canvas); if (wrap != result) result->addChild(wrap); updateDom(*result, true); return result; }