[webkit-reviews] review denied: [Bug 21421] Add WebKitCSSMatrix object : [Attachment 24136] Patch, including LayoutTest file
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Sat Oct 11 13:40:46 PDT 2008
Sam Weinig <sam at webkit.org> has denied Chris Marrin <cmarrin at apple.com>'s
request for review:
Bug 21421: Add WebKitCSSMatrix object
https://bugs.webkit.org/show_bug.cgi?id=21421
Attachment 24136: Patch, including LayoutTest file
https://bugs.webkit.org/attachment.cgi?id=24136&action=edit
------- Additional Comments from Sam Weinig <sam at webkit.org>
The license for JSWebKitCSSMatrixConstructor.cpp should be the two clause BSD
license. It can be found in ScrollbarThemeComposite.h for example.
+#include "Text.h"
Why is this included?
+ if (args.size() >= 1) {
+ s = args.at(exec, 0)->toString(exec);
+ }
Braces are not needed.
Why does the JSWebKitCSSMatrixConstructor store a JSDocument if it never seems
to use it? Did you intend to use it when constructing the WebKitCSSMatrix?
Perhaps to enforce strict parsing rules?
In WebKitCSSMatrix.cpp:
+ * This file is part of the DOM implementation for KDE.
+ *
+ * (C) 1999-2003 Lars Knoll (knoll at kde.org)
+ * (C) 2002-2003 Dirk Mueller (mueller at kde.org)
+ * Copyright (C) 2002, 2005, 2006 Apple Computer, Inc.
Why is this new file giving copyright to these individuals?
+WebKitCSSMatrix::WebKitCSSMatrix() : StyleBase(0)
The initialization list should have on item per line.
+WebKitCSSMatrix::WebKitCSSMatrix(const WebKitCSSMatrix& m) : StyleBase(0)
+{
+ m_matrix = m.m_matrix;
Same issue, and m_matrix can be initialized using initializer list syntax.
+WebKitCSSMatrix::WebKitCSSMatrix(const AffineTransform& m) : StyleBase(0)
+{
+ m_matrix = m;
Same here.
+ CSSParser p(useStrictParsing());
Since a parent is never passed to StyleBase, I think this is always the same.
+WebKitCSSMatrix* WebKitCSSMatrix::multiply(WebKitCSSMatrix* secondMatrix)
+{
+ AffineTransform tmp(secondMatrix->m_matrix);
+ tmp.multiply(m_matrix);
+ return new WebKitCSSMatrix(tmp);
+}
This should probably return a PassRefPtr and use WebKitCSSMatrix::create
instead of new.
+WebKitCSSMatrix* WebKitCSSMatrix::inverse()
+{
+ return new WebKitCSSMatrix(m_matrix.inverse());
+}
Same here.
+WebKitCSSMatrix* WebKitCSSMatrix::translate(float x, float y)
And here.
+{
+ if (isnan(x)) x = 0;
The x = 0 should be on its own line.
+ if (isnan(y)) y = 0;
Here too.
+ return new WebKitCSSMatrix(AffineTransform(m_matrix).translate(x,y));
m_matrix is already an AffineTransform so I see no reason to call the
constructor. There is also a missing space after the x,.
+WebKitCSSMatrix* WebKitCSSMatrix::scale(float scaleX, float scaleY)
+{
+ if (isnan(scaleX)) scaleX = 1;
+ if (isnan(scaleY)) scaleY = scaleX;
+ return new
WebKitCSSMatrix(AffineTransform(m_matrix).scale(scaleX,scaleY));
+}
Same issues as WebKitCSSMatrix::translate
+WebKitCSSMatrix* WebKitCSSMatrix::rotate(float rot)
+{
+ if (isnan(rot))
+ rot = 0;
+ return new WebKitCSSMatrix(AffineTransform(m_matrix).rotate(rot));
+}
No need to call the constructor and it should use PassRefPtr/create.
+typedef int ExceptionCode;
This typedef is not used.
+ float a() const { return (float) m_matrix.a(); }
+ float b() const { return (float) m_matrix.b(); }
+ float c() const { return (float) m_matrix.c(); }
+ float d() const { return (float) m_matrix.d(); }
+ float e() const { return (float) m_matrix.e(); }
+ float f() const { return (float) m_matrix.f(); }
Please use static_cast<float>.
+ void setA(float f) { m_matrix.setA(f); }
+ void setB(float f) { m_matrix.setB(f); }
+ void setC(float f) { m_matrix.setC(f); }
+ void setD(float f) { m_matrix.setD(f); }
+ void setE(float f) { m_matrix.setE(f); }
+ void setF(float f) { m_matrix.setF(f); }
The extra white space is not needed.
+ void setMatrixValue(const String& string);
+
+ // this = this * secondMatrix
+ WebKitCSSMatrix* multiply(WebKitCSSMatrix* secondMatrix);
+
+ // FIXME: we really should have an exception here, for when matrix is not
invertible
+ WebKitCSSMatrix* inverse();
+ WebKitCSSMatrix* translate(float x, float y);
+ WebKitCSSMatrix* scale(float scaleX, float scaleY);
+ WebKitCSSMatrix* rotate(float rot);
+
+ const AffineTransform& transform() { return m_matrix; }
We usually don't put this kind of whitespace in.
+ WebKitCSSMatrix(const WebKitCSSMatrix& m);
+ WebKitCSSMatrix(const AffineTransform& m);
+ WebKitCSSMatrix(const String& s);
The parameter names are not needed here.
+ interface [
+ InterfaceUUID=349c989e-877f-416e-9cce-ca811e52d9e8,
+ ImplementationUUID=5feb16e6-f441-4b46-9b10-9e833a4dcd1b
+ ] WebKitCSSMatrix {
How were these UUIDs generated. I think they are probably not necessary as we
are not using this class in COM yet.
+ WebKitCSSMatrix multiply(in WebKitCSSMatrix secondMatrix) raises
CSSException;
Since the c++ implementation does not raise an exception, this should not be
here. The reason this is probably not showing up is that the idl syntax we use
for exceptions is raises(CSSException); and the parser is lax
enough to ignore this.
+ DOMString toString();
This should probably be [DontEnum]
Your test does not test the methods or attributes of the WebKitCSSMatrix
object. I am also curious why you chose floats instead of doubles for the type
of the matrix values as it seems like this will cause a lot of unneeded casting
as the AffineTransform is in terms of doubles as are JS numbers
r-
More information about the webkit-reviews
mailing list