// FIXME: We transform AffineTransform to TransformationMatrix. This is rather // inefficient. void TransformState::applyTransform( const AffineTransform& transformFromContainer, TransformAccumulation accumulate, bool* wasClamped) { applyTransform(transformFromContainer.toTransformationMatrix(), accumulate, wasClamped); }
void PluginView::paintWindowedPluginIntoContext(GraphicsContext& context, const IntRect& rect) { #if !USE(WINGDI) ASSERT(m_isWindowed); ASSERT(context.shouldIncludeChildWindows()); IntPoint locationInWindow = downcast<FrameView>(*parent()).convertToContainingWindow(frameRect().location()); LocalWindowsContext windowsContext(context, frameRect(), false); #if USE(CAIRO) // Must flush drawings up to this point to the backing metafile, otherwise the // plugin region will be overwritten with any clear regions specified in the // cairo-controlled portions of the rendering. cairo_show_page(context.platformContext()->cr()); #endif HDC hdc = windowsContext.hdc(); XFORM originalTransform; GetWorldTransform(hdc, &originalTransform); // The plugin expects the DC to be in client coordinates, so we translate // the DC to make that so. AffineTransform ctm = context.getCTM(); ctm.translate(locationInWindow.x(), locationInWindow.y()); XFORM transform = static_cast<XFORM>(ctm.toTransformationMatrix()); SetWorldTransform(hdc, &transform); paintIntoTransformedContext(hdc); SetWorldTransform(hdc, &originalTransform); #endif }
void GraphicsContextPlatformPrivate::concatCTM(const AffineTransform& transform) { if (!m_hdc) return; XFORM xform = transform.toTransformationMatrix(); ModifyWorldTransform(m_hdc, &xform, MWT_LEFTMULTIPLY); }
void GraphicsContextPlatformPrivate::setCTM(const AffineTransform& transform) { if (!m_hdc) return; XFORM xform = transform.toTransformationMatrix(); SetWorldTransform(m_hdc, &xform); }
void Image::drawPattern(GraphicsContext *gc, const FloatRect& srcRect, const AffineTransform& patternTransform, const FloatPoint& phase, ColorSpace, CompositeOperator, const FloatRect& destRect, BlendMode) { JNIEnv* env = WebCore_GetJavaEnv(); if (!gc || gc->paintingDisabled() || srcRect.isEmpty()) { return; } NativeImagePtr currFrame = nativeImageForCurrentFrame(); if (!currFrame) { return; } TransformationMatrix tm = patternTransform.toTransformationMatrix(); static jmethodID mid = env->GetMethodID(PG_GetGraphicsManagerClass(env), "createTransform", "(DDDDDD)Lcom/sun/webkit/graphics/WCTransform;"); ASSERT(mid); JLObject transform(env->CallObjectMethod(PL_GetGraphicsManager(env), mid, tm.a(), tm.b(), tm.c(), tm.d(), tm.e(), tm.f())); ASSERT(transform); CheckAndClearException(env); gc->platformContext()->rq().freeSpace(13 * 4) << (jint)com_sun_webkit_graphics_GraphicsDecoder_DRAWPATTERN << currFrame << srcRect.x() << srcRect.y() << srcRect.width() << srcRect.height() << RQRef::create(transform) << phase.x() << phase.y() << destRect.x() << destRect.y() << destRect.width() << destRect.height(); if (imageObserver()) imageObserver()->didDraw(this); }