Esempio n. 1
0
static v8::Handle<v8::Value> rotateFromVectorCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGMatrix.rotateFromVector");
    if (args.Length() < 2)
        return throwError("Not enough arguments", V8Proxy::TypeError);
    RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return v8::Handle<v8::Value>();
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    ExceptionCode ec = 0;
    {
    EXCEPTION_BLOCK(float, x, static_cast<float>(MAYBE_MISSING_PARAMETER(args, 0, MissingIsUndefined)->NumberValue()));
    EXCEPTION_BLOCK(float, y, static_cast<float>(MAYBE_MISSING_PARAMETER(args, 1, MissingIsUndefined)->NumberValue()));
    SVGMatrix result = imp->rotateFromVector(x, y, ec);
    if (UNLIKELY(ec))
        goto fail;
    return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(result)));
    }
    fail:
    V8Proxy::setDOMException(ec);
    return v8::Handle<v8::Value>();
}
Esempio n. 2
0
static v8::Handle<v8::Value> cAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info)
{
    INC_STATS("DOM.SVGMatrix.c._get");
    SVGPropertyTearOff<SVGMatrix>* wrapper = V8SVGMatrix::toNative(info.Holder());
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    return v8::Number::New(imp->c());
}
SVGMatrix *SVGStyledTransformableElement::getScreenCTM() const
{
    SVGMatrix *ctm = SVGLocatable::getScreenCTM(this);

    if(m_localMatrix)
        ctm->multiply(m_localMatrix.get());

    return ctm;
}
Esempio n. 4
0
static v8::Handle<v8::Value> flipYCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGMatrix.flipY");
    RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return v8::Handle<v8::Value>();
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(imp->flipY())));
}
Esempio n. 5
0
SVGMatrix *SVGPatternElement::getCTM() const
{
    SVGMatrix *mat = SVGSVGElement::createSVGMatrix();
    if (mat)
    {
        RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(),
                                                        height()->baseVal()->value());

        mat->multiply(viewBox.get());
    }

    return mat;
}
Esempio n. 6
0
static void bAttrSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info)
{
    INC_STATS("DOM.SVGMatrix.b._set");
    SVGPropertyTearOff<SVGMatrix>* wrapper = V8SVGMatrix::toNative(info.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return;
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    double v = static_cast<double>(value->NumberValue());
    imp->setB(v);
    wrapper->commitChange();
    return;
}
Esempio n. 7
0
static v8::Handle<v8::Value> skewYCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGMatrix.skewY");
    if (args.Length() < 1)
        return throwError("Not enough arguments", V8Proxy::TypeError);
    RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return v8::Handle<v8::Value>();
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    EXCEPTION_BLOCK(float, angle, static_cast<float>(MAYBE_MISSING_PARAMETER(args, 0, MissingIsUndefined)->NumberValue()));
    return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(imp->skewY(angle))));
}
Esempio n. 8
0
SVGMatrix *SVGSVGElement::getScreenCTM() const
{
    SVGMatrix *mat = SVGStyledLocatableElement::getScreenCTM();
    if(mat)
    {
        mat->translate(x()->baseVal()->value(), y()->baseVal()->value());

        if(attributes()->getNamedItem(SVGNames::viewBoxAttr))
        {
            RefPtr<SVGMatrix> viewBox = viewBoxToViewTransform(width()->baseVal()->value(), height()->baseVal()->value());
            mat->multiply(viewBox.get());
        }
    }

    return mat;
}
Esempio n. 9
0
void
SVGTransform::SetMatrix(SVGMatrix& aMatrix, ErrorResult& rv)
{
  if (mIsAnimValItem) {
    rv.Throw(NS_ERROR_DOM_NO_MODIFICATION_ALLOWED_ERR);
    return;
  }
  SetMatrix(aMatrix.GetMatrix());
}
Esempio n. 10
0
static v8::Handle<v8::Value> inverseCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGMatrix.inverse");
    RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return v8::Handle<v8::Value>();
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    ExceptionCode ec = 0;
    {
    SVGMatrix result = imp->inverse(ec);
    if (UNLIKELY(ec))
        goto fail;
    return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(result)));
    }
    fail:
    V8Proxy::setDOMException(ec);
    return v8::Handle<v8::Value>();
}
Esempio n. 11
0
static v8::Handle<v8::Value> multiplyCallback(const v8::Arguments& args)
{
    INC_STATS("DOM.SVGMatrix.multiply");
    if (args.Length() < 1)
        return throwError("Not enough arguments", V8Proxy::TypeError);
    RefPtr<SVGPropertyTearOff<SVGMatrix> > wrapper = V8SVGMatrix::toNative(args.Holder());
    if (wrapper->role() == AnimValRole) {
        V8Proxy::setDOMException(NO_MODIFICATION_ALLOWED_ERR);
        return v8::Handle<v8::Value>();
    }
    SVGMatrix& impInstance = wrapper->propertyReference();
    SVGMatrix* imp = &impInstance;
    if (args.Length() > 0 && !isUndefinedOrNull(args[0]) && !V8SVGMatrix::HasInstance(args[0])) {
        V8Proxy::throwTypeError();
        return notHandledByInterceptor();
    }
    EXCEPTION_BLOCK(RefPtr<SVGPropertyTearOff<SVGMatrix> >, secondMatrix, V8SVGMatrix::HasInstance(MAYBE_MISSING_PARAMETER(args, 0, MissingIsUndefined)) ? V8SVGMatrix::toNative(v8::Handle<v8::Object>::Cast(MAYBE_MISSING_PARAMETER(args, 0, MissingIsUndefined))) : 0);
    if (!secondMatrix) {
        V8Proxy::setDOMException(WebCore::TYPE_MISMATCH_ERR);
        return v8::Handle<v8::Value>();
    }
    return toV8(WTF::getPtr(SVGPropertyTearOff<SVGMatrix>::create(imp->multiply(secondMatrix->propertyReference()))));
}
Esempio n. 12
0
already_AddRefed<nsISVGPoint>
DOMSVGTranslatePoint::MatrixTransform(SVGMatrix& matrix)
{
  float a = matrix.A(), b = matrix.B(), c = matrix.C();
  float d = matrix.D(), e = matrix.E(), f = matrix.F();
  float x = mPt.GetX();
  float y = mPt.GetY();

  nsCOMPtr<nsISVGPoint> point = new DOMSVGPoint(a*x + c*y + e, b*x + d*y + f);
  return point.forget();
}
Esempio n. 13
0
Ref<SVGTransform> SVGSVGElement::createSVGTransformFromMatrix(SVGMatrix& matrix)
{
    return SVGTransform::create(SVGTransformValue { matrix.propertyReference() });
}
Esempio n. 14
0
String SVGTransformList::StringFromTransformList() const
{
	IO::StringWriter str;

	unsigned int numberOfItems = m_p->m_items.GetSize();

	for (size_t i = 0; i < numberOfItems; i++)
	{
		SVGTransform* transform = m_p->m_items[i];

		SVGTransformType type = transform->get_type();

		SVGMatrix* matrix = transform->get_matrix();

		double a = matrix->get_a();
		double b = matrix->get_b();
		double c = matrix->get_c();
		double d = matrix->get_d();
		double e = matrix->get_e();
		double f = matrix->get_f();

		if (i > 0) str << " ";

		switch (type)
		{
			case SVG_TRANSFORM_TRANSLATE:
			{
				str << "translate(" << e << "," << f << ")";
			}
			break;

			case SVG_TRANSFORM_SCALE:
			{
			//	swprintf(str2, OLESTR("scale(%g, %g)"), a, d);
			//	str += str2;
				str << "scale(" << a << "," << d << ")";
			}
			break;

			case SVG_TRANSFORM_ROTATE:
			{
				double angle = transform->get_angle();
			//	swprintf(str2, OLESTR("rotate(%g, %g, %g)"), angle, e, f);
			//	str += str2;
				str << "rotate(" << angle << "," << e << "," << f << ")";
			}
			break;

			case SVG_TRANSFORM_SKEWX:
			{
				double angle = transform->get_angle();
		//		swprintf(str2, OLESTR("skewX(%g)"), angle);
		//		str += str2;
				str << "skewX(" << angle << ")";
			}
			break;

			case SVG_TRANSFORM_SKEWY:
			{
				double angle = transform->get_angle();
			//	swprintf(str2, OLESTR("skewY(%g)"), angle);
			//	str += str2;
				str << "skewY(" << angle << ")";
			}
			break;

			case SVG_TRANSFORM_MATRIX:
			{
			//	swprintf(str2, OLESTR("matrix(%g %g %g %g %g %g)"), a, b, c, d, e, f);
			//	str += str2;
				str << "matrix(" << a << "," << b << "," << c << "," << d << "," << e << "," << f << ")";
			}
			break;

			default:
				ASSERT(0);
		}
	}

	return str.str();
}