void WWidgetCanvasPainter::updateContents(std::vector<DomElement *>& result, WPaintDevice *device) { WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); if (widget_->sizeChanged_) { DomElement *canvas = DomElement::getForUpdate('c' + widget_->id(), DomElement_CANVAS); canvas->setAttribute("width", boost::lexical_cast<std::string>(widget_->renderWidth_)); canvas->setAttribute("height", boost::lexical_cast<std::string>(widget_->renderHeight_)); result.push_back(canvas); widget_->sizeChanged_ = false; } bool domText = canvasDevice->textMethod() == WCanvasPaintDevice::DomText; DomElement *el = DomElement::getForUpdate(domText ? 't' + widget_->id() : widget_->id(), DomElement_DIV); if (domText) el->removeAllChildren(); canvasDevice->render('c' + widget_->id(), el); result.push_back(el); delete device; }
void WWidgetCanvasPainter::createContents(DomElement *result, WPaintDevice *device) { std::string wstr = boost::lexical_cast<std::string>(widget_->renderWidth_); std::string hstr = boost::lexical_cast<std::string>(widget_->renderHeight_); result->setProperty(PropertyStylePosition, "relative"); result->setProperty(PropertyStyleOverflowX, "hidden"); DomElement *canvas = DomElement::createNew(DomElement_CANVAS); canvas->setId('c' + widget_->id()); canvas->setProperty(PropertyStyleDisplay, "block"); canvas->setAttribute("width", wstr); canvas->setAttribute("height", hstr); result->addChild(canvas); WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); DomElement *text = 0; if (canvasDevice->textMethod() == WCanvasPaintDevice::DomText) { text = DomElement::createNew(DomElement_DIV); text->setId('t' + widget_->id()); text->setProperty(PropertyStylePosition, "absolute"); text->setProperty(PropertyStyleZIndex, "1"); text->setProperty(PropertyStyleTop, "0px"); text->setProperty(PropertyStyleLeft, "0px"); } canvasDevice->render("c" + widget_->id(), text ? text : result); if (text) result->addChild(text); delete device; }
void WWidgetCanvasPainter::createContents(DomElement *result, WPaintDevice *device) { std::string wstr = boost::lexical_cast<std::string>(widget_->renderWidth_); std::string hstr = boost::lexical_cast<std::string>(widget_->renderHeight_); result->setProperty(PropertyStylePosition, "relative"); result->setProperty(PropertyStyleOverflowX, "hidden"); result->setProperty(PropertyStyleOverflowY, "hidden"); DomElement *canvas = DomElement::createNew(DomElement_CANVAS); canvas->setId('c' + widget_->id()); canvas->setProperty(PropertyStyleDisplay, "block"); canvas->setAttribute("width", wstr); canvas->setAttribute("height", hstr); result->addChild(canvas); widget_->sizeChanged_ = false; WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); DomElement *text = 0; if (canvasDevice->textMethod() == WCanvasPaintDevice::DomText) { text = DomElement::createNew(DomElement_DIV); text->setId('t' + widget_->id()); text->setProperty(PropertyStylePosition, "absolute"); text->setProperty(PropertyStyleZIndex, "1"); text->setProperty(PropertyStyleTop, "0px"); text->setProperty(PropertyStyleLeft, "0px"); } DomElement *el = text ? text : result; bool hasJsObjects = widget_->jsObjects_.size() > 0; if (hasJsObjects) { WStringStream ss; WApplication *app = WApplication::instance(); ss << "new " WT_CLASS ".WPaintedWidget(" << app->javaScriptClass() << "," << widget_->jsRef() << ");"; widget_->jsObjects_.updateJs(ss); el->callJavaScript(ss.str()); } canvasDevice->render('c' + widget_->id(), el); if (hasJsObjects) { WStringStream ss; ss << widget_->objJsRef() << ".repaint=function(){"; ss << canvasDevice->recordedJs_.str(); ss << "};"; el->callJavaScript(ss.str()); } if (text) result->addChild(text); delete device; }
void WWidgetCanvasPainter::updateContents(std::vector<DomElement *>& result, WPaintDevice *device) { WCanvasPaintDevice *canvasDevice = dynamic_cast<WCanvasPaintDevice *>(device); if (widget_->sizeChanged_) { DomElement *canvas = DomElement::getForUpdate('c' + widget_->id(), DomElement_CANVAS); canvas->setAttribute("width", boost::lexical_cast<std::string>(widget_->renderWidth_)); canvas->setAttribute("height", boost::lexical_cast<std::string>(widget_->renderHeight_)); result.push_back(canvas); widget_->sizeChanged_ = false; } bool domText = canvasDevice->textMethod() == WCanvasPaintDevice::DomText; DomElement *el = DomElement::getForUpdate(domText ? 't' + widget_->id() : widget_->id(), DomElement_DIV); if (domText) el->removeAllChildren(); bool hasJsObjects = widget_->jsObjects_.size() > 0; if (hasJsObjects) { WStringStream ss; widget_->jsObjects_.updateJs(ss); el->callJavaScript(ss.str()); } canvasDevice->render('c' + widget_->id(), el); if (hasJsObjects) { WStringStream ss; ss << widget_->objJsRef() << ".repaint=function(){"; ss << canvasDevice->recordedJs_.str(); ss << "};"; el->callJavaScript(ss.str()); } result.push_back(el); delete device; }