bool RenderThemeGtk::paintProgressBar(RenderObject* renderObject, const PaintInfo& paintInfo, const IntRect& rect) { if (!renderObject->isProgress()) return true; GtkWidget* progressBarWidget = moz_gtk_get_progress_widget(); if (!progressBarWidget) return true; if (paintRenderObject(MOZ_GTK_PROGRESSBAR, renderObject, paintInfo.context, rect)) return true; IntRect chunkRect(rect); RenderProgress* renderProgress = toRenderProgress(renderObject); GtkStyle* style = gtk_widget_get_style(progressBarWidget); chunkRect.setHeight(chunkRect.height() - (2 * style->ythickness)); chunkRect.setY(chunkRect.y() + style->ythickness); chunkRect.setWidth((chunkRect.width() - (2 * style->xthickness)) * renderProgress->position()); if (renderObject->style()->direction() == RTL) chunkRect.setX(rect.x() + rect.width() - chunkRect.width() - style->xthickness); else chunkRect.setX(chunkRect.x() + style->xthickness); return paintRenderObject(MOZ_GTK_PROGRESS_CHUNK, renderObject, paintInfo.context, chunkRect); }
IntRect RenderThemeGtk::calculateProgressRect(RenderObject* renderObject, const IntRect& fullBarRect) { IntRect progressRect(fullBarRect); RenderProgress* renderProgress = toRenderProgress(renderObject); if (renderProgress->isDeterminate()) { int progressWidth = progressRect.width() * renderProgress->position(); if (renderObject->style()->direction() == RTL) progressRect.setX(progressRect.x() + progressRect.width() - progressWidth); progressRect.setWidth(progressWidth); return progressRect; } double animationProgress = renderProgress->animationProgress(); // Never let the progress rect shrink smaller than 2 pixels. int newWidth = max(2, progressRect.width() / progressActivityBlocks); int movableWidth = progressRect.width() - newWidth; progressRect.setWidth(newWidth); // We want the first 0.5 units of the animation progress to represent the // forward motion and the second 0.5 units to represent the backward motion, // thus we multiply by two here to get the full sweep of the progress bar with // each direction. if (animationProgress < 0.5) progressRect.setX(progressRect.x() + (animationProgress * 2 * movableWidth)); else progressRect.setX(progressRect.x() + ((1.0 - animationProgress) * 2 * movableWidth)); return progressRect; }
void process_job (Job& job) { VERBOSE_OUT(3) << job.filename.c_str() << " -- " << std::endl; VERBOSE_OUT(3) << '\t' << boost::format("w:%d, h:%d, a:%d, pxaspect:%f, imaspect:%f, span:%f") % job.desc.get_w() % job.desc.get_h() % job.desc.get_antialias() % job.desc.get_pixel_aspect() % job.desc.get_image_aspect() % job.desc.get_span() << std::endl; VERBOSE_OUT(3) << '\t' << boost::format("tl:[%f,%f], br:[%f,%f], focus:[%f,%f]") % job.desc.get_tl()[0] % job.desc.get_tl()[1] % job.desc.get_br()[0] % job.desc.get_br()[1] % job.desc.get_focus()[0] % job.desc.get_focus()[1] << std::endl; RenderProgress p; p.task(job.filename + " ==> " + job.outfilename); if(job.sifout) { // todo: support containers if(!save_canvas(FileSystemNative::instance()->get_identifier(job.outfilename), job.canvas)) throw (SynfigToolException(SYNFIGTOOL_RENDERFAILURE, _("Render Failure."))); } else { VERBOSE_OUT(1) << _("Rendering...") << std::endl; boost::chrono::system_clock::time_point start_timepoint = boost::chrono::system_clock::now(); // Call the render member of the target if(!job.target->render(&p)) throw (SynfigToolException(SYNFIGTOOL_RENDERFAILURE, _("Render Failure."))); if(SynfigToolGeneralOptions::instance()->should_print_benchmarks()) { boost::chrono::duration<double> duration = boost::chrono::system_clock::now() - start_timepoint; std::cout << job.filename.c_str() << _(": Rendered in ") << duration.count() << _(" seconds.") << std::endl; } } VERBOSE_OUT(1) << _("Done.") << std::endl; }
void HTMLProgressElement::didElementStateChange() { m_value->setWidthPercentage(position() * 100); if (renderer() && renderer()->isProgress()) { RenderProgress* render = toRenderProgress(renderer()); bool wasDeterminate = render->isDeterminate(); renderer()->updateFromElement(); if (wasDeterminate != isDeterminate()) setNeedsStyleRecalc(); } }
bool RenderThemeNix::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& rect) { RenderProgress* renderProgress = toRenderProgress(o); WebKit::WebThemeEngine::ProgressBarExtraParams extraParams; extraParams.isDeterminate = renderProgress->isDeterminate(); extraParams.position = renderProgress->position(); extraParams.animationProgress = renderProgress->animationProgress(); extraParams.animationStartTime = renderProgress->animationStartTime(); themeEngine()->paintProgressBar(webCanvas(i), getWebThemeState(this, o), WebKit::WebRect(rect), extraParams); return false; }
bool RenderThemeQStyle::paintProgressBar(RenderObject* o, const PaintInfo& pi, const IntRect& r) { if (!o->isProgress()) return true; StylePainterQStyle p(this, pi, o); if (!p.isValid()) return true; p.styleOption.rect = r; RenderProgress* renderProgress = toRenderProgress(o); p.paintProgressBar(renderProgress->position(), renderProgress->animationProgress()); return false; }
bool RenderThemeChromiumWin::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& r) { if (!o->isProgress()) return true; RenderProgress* renderProgress = toRenderProgress(o); // For indeterminate bar, valueRect is ignored and it is computed by the theme engine // because the animation is a platform detail and WebKit doesn't need to know how. IntRect valueRect = renderProgress->isDeterminate() ? determinateProgressValueRectFor(renderProgress, r) : IntRect(0, 0, 0, 0); double animatedSeconds = renderProgress->animationStartTime() ? WTF::currentTime() - renderProgress->animationStartTime() : 0; ThemePainter painter(i.context, r); ChromiumBridge::paintProgressBar(painter.context(), r, valueRect, renderProgress->isDeterminate(), animatedSeconds); return false; }
bool RenderThemeChromiumWin::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& r) { if (!o->isProgress()) return true; RenderProgress* renderProgress = toRenderProgress(o); // For indeterminate bar, valueRect is ignored and it is computed by the theme engine // because the animation is a platform detail and WebKit doesn't need to know how. IntRect valueRect = renderProgress->isDeterminate() ? determinateProgressValueRectFor(renderProgress, r) : IntRect(0, 0, 0, 0); double animatedSeconds = renderProgress->animationStartTime() ? WTF::currentTime() - renderProgress->animationStartTime() : 0; ThemePainter painter(i.context, r); DirectionFlippingScope scope(o, i, r); WebKit::WebCanvas* canvas = painter.context()->platformContext()->canvas(); WebKit::Platform::current()->themeEngine()->paintProgressBar(canvas, WebKit::WebRect(r), WebKit::WebRect(valueRect), renderProgress->isDeterminate(), animatedSeconds); return false; }
bool RenderThemeChromiumLinux::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& rect) { if (!o->isProgress()) return true; RenderProgress* renderProgress = toRenderProgress(o); IntRect valueRect = progressValueRectFor(renderProgress, rect); PlatformSupport::ThemePaintExtraParams extraParams; extraParams.progressBar.determinate = renderProgress->isDeterminate(); extraParams.progressBar.valueRectX = valueRect.x(); extraParams.progressBar.valueRectY = valueRect.y(); extraParams.progressBar.valueRectWidth = valueRect.width(); extraParams.progressBar.valueRectHeight = valueRect.height(); PlatformSupport::paintThemePart(i.context, PlatformSupport::PartProgressBar, getWebThemeState(this, o), rect, &extraParams); return false; }
bool RenderThemeQtMobile::paintProgressBar(RenderObject* o, const PaintInfo& pi, const IntRect& r) { if (!o->isProgress()) return true; StylePainterMobile p(this, pi); if (!p.isValid()) return true; RenderProgress* renderProgress = toRenderProgress(o); const bool isRTL = (renderProgress->style()->direction() == RTL); if (renderProgress->isDeterminate()) p.drawProgress(r, renderProgress->position(), !isRTL); else p.drawProgress(r, renderProgress->animationProgress(), !isRTL, true); return false; }
bool RenderThemeChromiumDefault::paintProgressBar(RenderObject* o, const PaintInfo& i, const IntRect& rect) { if (!o->isProgress()) return true; RenderProgress* renderProgress = toRenderProgress(o); IntRect valueRect = progressValueRectFor(renderProgress, rect); WebKit::WebThemeEngine::ExtraParams extraParams; extraParams.progressBar.determinate = renderProgress->isDeterminate(); extraParams.progressBar.valueRectX = valueRect.x(); extraParams.progressBar.valueRectY = valueRect.y(); extraParams.progressBar.valueRectWidth = valueRect.width(); extraParams.progressBar.valueRectHeight = valueRect.height(); DirectionFlippingScope scope(o, i, rect); WebKit::WebCanvas* canvas = i.context->canvas(); WebKit::Platform::current()->themeEngine()->paint(canvas, WebKit::WebThemeEngine::PartProgressBar, getWebThemeState(this, o), WebKit::WebRect(rect), &extraParams); return false; }
bool RenderThemeQStyle::paintProgressBar(RenderObject* o, const PaintInfo& pi, const IntRect& r) { if (!o->isProgress()) return true; StylePainterQStyle p(this, pi); if (!p.isValid()) return true; QStyleOptionProgressBarV2 option; initStyleOption(p.widget, option); initializeCommonQStyleOptions(option, o); RenderProgress* renderProgress = toRenderProgress(o); option.rect = r; option.maximum = std::numeric_limits<int>::max(); option.minimum = 0; option.progress = (renderProgress->position() * std::numeric_limits<int>::max()); const QPoint topLeft = r.location(); p.painter->translate(topLeft); option.rect.moveTo(QPoint(0, 0)); option.rect.setSize(r.size()); if (option.progress < 0) { // FIXME: Until http://bugreports.qt.nokia.com/browse/QTBUG-9171 is fixed, // we simulate one square animating across the progress bar. p.drawControl(QStyle::CE_ProgressBarGroove, option); int chunkWidth = qStyle()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &option); QColor color = (option.palette.highlight() == option.palette.background()) ? option.palette.color(QPalette::Active, QPalette::Highlight) : option.palette.color(QPalette::Highlight); if (renderProgress->style()->direction() == RTL) p.painter->fillRect(option.rect.right() - chunkWidth - renderProgress->animationProgress() * option.rect.width(), 0, chunkWidth, option.rect.height(), color); else p.painter->fillRect(renderProgress->animationProgress() * option.rect.width(), 0, chunkWidth, option.rect.height(), color); } else p.drawControl(QStyle::CE_ProgressBar, option); p.painter->translate(-topLeft); return false; }