\r
readonly awt.Graphics2D _nativeObject;\r
readonly Image _image;\r
+ \r
+ Matrix _transform;\r
+ GraphicsUnit _pageUnit = GraphicsUnit.Display;\r
+ float _pageScale = 1.0f;\r
+\r
+ static readonly float [] _unitConversion = {\r
+ 1, // World\r
+ 1, // Display\r
+ 1, // Pixel\r
+ DefaultScreenResolution / 72.0f, // Point\r
+ DefaultScreenResolution, // Inch\r
+ DefaultScreenResolution / 300.0f,// Document\r
+ DefaultScreenResolution / 25.4f // Millimeter\r
+ };\r
\r
static internal readonly bool IsHeadless;\r
\r
private Graphics (Image image) {\r
_nativeObject = (awt.Graphics2D)image.NativeObject.getGraphics();\r
_image = image;\r
+ _transform = new Matrix ();\r
+ _nativeObject.setTransform( _transform.NativeObject );\r
\r
// NativeObject.setRenderingHint(awt.RenderingHints.KEY_TEXT_ANTIALIASING,awt.RenderingHints.VALUE_TEXT_ANTIALIAS_ON);\r
//\r
\r
\r
public void DrawImage (Image image, Rectangle destRect, Rectangle srcRect, GraphicsUnit srcUnit) {\r
- //TODO:GraficsUnit\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
- g.drawImage(image.NativeObject,destRect.X,destRect.Y,destRect.Width,destRect.Height,srcRect.X,srcRect.Y,srcRect.Width,srcRect.Height,null);\r
+ g.drawImage(image.NativeObject,\r
+ destRect.X,\r
+ destRect.Y,\r
+ destRect.X + destRect.Width,\r
+ destRect.Y + destRect.Height,\r
+ srcRect.X,\r
+ srcRect.Y,\r
+ srcRect.X + srcRect.Width,\r
+ srcRect.Y + srcRect.Height,\r
+ null);\r
}\r
\r
public void DrawImage (Image image, RectangleF destRect, RectangleF srcRect, GraphicsUnit srcUnit) { \r
- //TODO:GraficsUnit\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,\r
(int)destRect.X,\r
\r
public void DrawImage (Image image, Point [] destPoints, Rectangle srcRect, GraphicsUnit srcUnit, \r
ImageAttributes imageAttr) {\r
- //TBD: GraphicsUnit, ImageAttributes\r
+ \r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+ \r
+ //TBD: ImageAttributes\r
Matrix m = new Matrix(srcRect, destPoints);\r
NativeObject.drawImage(image.NativeObject,m.NativeObject,null);\r
}\r
\r
public void DrawImage (Image image, PointF [] destPoints, RectangleF srcRect, GraphicsUnit srcUnit, \r
ImageAttributes imageAttr) {\r
- //TBD: GraphicsUnit, ImageAttributes\r
+\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
+ //TBD: ImageAttributes\r
Matrix m = new Matrix(srcRect, destPoints);\r
NativeObject.drawImage(image.NativeObject,m.NativeObject,null);\r
}\r
\r
\r
public void DrawImage (Image image, int x, int y, Rectangle srcRect, GraphicsUnit srcUnit) { \r
- //TODO:units\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,x,y,srcRect.Width,srcRect.Height,srcRect.X,srcRect.Y,srcRect.Width,srcRect.Height,null);\r
}\r
}\r
\r
public void DrawImage (Image image, float x, float y, RectangleF srcRect, GraphicsUnit srcUnit) { \r
- //TODO:units,casts\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+ \r
+ //TBD: casts\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,\r
(int)x,\r
#endif\r
\r
public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit) {\r
- //TODO:units\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,\r
(int)destRect.X,\r
#endif\r
\r
public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit) {\r
- //TODO:units\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,destRect.X,destRect.Y,destRect.Width,destRect.Height,srcX,srcY,srcWidth,srcHeight,null);\r
}\r
\r
\r
public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttrs) {\r
- //TODO:units\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,\r
(int)destRect.X,\r
}\r
\r
public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr) { \r
- //TODO:units,attributes\r
+ if (srcUnit != GraphicsUnit.Pixel)\r
+ throw new NotImplementedException();\r
+ // Like in .NET http://dotnet247.com/247reference/msgs/45/227979.aspx\r
+ \r
+ //TBD: attributes\r
java.awt.Graphics2D g = NativeObject;\r
g.drawImage(image.NativeObject,\r
destRect.X,\r
#if INTPTR_SUPPORT \r
public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)\r
{\r
- //TODO:units,attributes, callback\r
+ //TBD:units,attributes, callback\r
java.awt.Graphics2D g = (java.awt.Graphics2D)nativeObject;\r
g.drawImage(image.NativeObject,destRect.X,destRect.Y,destRect.Width,destRect.Height,srcX,srcY,srcWidth,srcHeight,null);\r
}\r
\r
public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback)\r
{\r
- //TODO:units,attributes, callback\r
+ //TBD:units,attributes, callback\r
java.awt.Graphics2D g = (java.awt.Graphics2D)nativeObject;\r
g.drawImage(image.NativeObject,\r
(int)destRect.X,\r
\r
public void DrawImage (Image image, Rectangle destRect, float srcX, float srcY, float srcWidth, float srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)\r
{\r
- //TODO:units,attributes, callback\r
+ //TBD:units,attributes, callback\r
java.awt.Graphics2D g = (java.awt.Graphics2D)nativeObject;\r
g.drawImage(image.NativeObject,\r
(int)destRect.X,\r
\r
public void DrawImage (Image image, Rectangle destRect, int srcX, int srcY, int srcWidth, int srcHeight, GraphicsUnit srcUnit, ImageAttributes imageAttr, DrawImageAbort callback, IntPtr callbackData)\r
{\r
- //TODO:units,attributes, callback\r
+ //TBD:units,attributes, callback\r
java.awt.Graphics2D g = (java.awt.Graphics2D)nativeObject;\r
g.drawImage(image.NativeObject,\r
destRect.X,\r
\r
\r
public SizeF MeasureString (string text, Font font, PointF origin, StringFormat format) {\r
- //TODO: MeasureDraw still not dealing with clipping region of dc\r
+ //TBD: MeasureDraw still not dealing with clipping region of dc\r
return MeasureDraw(text,font,null,new RectangleF(origin.X,origin.Y,99999f,99999f),format,false);\r
}\r
\r
\r
public SizeF MeasureString (string text, Font font, SizeF layoutArea, StringFormat stringFormat, out int charactersFitted, out int linesFilled) { \r
- //TODO: charcount\r
+ //TBD: charcount\r
throw new NotImplementedException();\r
}\r
#endregion\r
\r
#region TransformPoints\r
public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, PointF [] pts) {\r
- //TODO:CoordinateSpace\r
+ //TBD:CoordinateSpace\r
java.awt.Graphics2D g = NativeObject;\r
java.awt.geom.AffineTransform tr = g.getTransform();\r
float[] fpts = new float[2];\r
}\r
\r
public void TransformPoints (CoordinateSpace destSpace, CoordinateSpace srcSpace, Point [] pts) { \r
- //TODO:CoordinateSpace\r
+ //TBD:CoordinateSpace\r
java.awt.Graphics2D g = NativeObject;\r
java.awt.geom.AffineTransform tr = g.getTransform();\r
float[] fpts = new float[2];\r
\r
public void TranslateTransform (float dx, float dy, MatrixOrder order) {\r
ConcatenateTransform(\r
- geom.AffineTransform.getTranslateInstance(dx, dy),\r
+ geom.AffineTransform.getTranslateInstance(dx, dy), \r
order);\r
}\r
#endregion\r
}\r
\r
public CompositingMode CompositingMode {\r
- //TODO:check this carefully\r
+ //TBD:check this carefully\r
get {\r
return (NativeObject.getComposite() == awt.AlphaComposite.SrcOver) ?\r
CompositingMode.SourceOver : CompositingMode.SourceCopy;\r
\r
public float DpiY {\r
get {\r
- //TODO: assume 72 (screen) for now\r
+ //TBD: assume 72 (screen) for now\r
return DpiX;\r
}\r
}\r
\r
public bool IsVisibleClipEmpty {\r
get {\r
- //TODO:correct this\r
+ //TBD:correct this\r
return IsClipEmpty;\r
}\r
}\r
\r
public float PageScale {\r
get {\r
- throw new NotImplementedException();\r
+ return _pageScale;\r
}\r
set {\r
- throw new NotImplementedException();\r
+ _pageScale = value;\r
+ UpdateInternalTransform();\r
}\r
}\r
\r
public GraphicsUnit PageUnit {\r
get {\r
- throw new NotImplementedException();\r
+ return _pageUnit;\r
}\r
set {\r
- throw new NotImplementedException();\r
+ _pageUnit = value;\r
+ UpdateInternalTransform();\r
}\r
}\r
\r
+ internal void UpdateInternalTransform()\r
+ {\r
+ float new_scale = _pageScale * _unitConversion[ (int)PageUnit ];\r
+ Matrix mx = _transform.Clone();\r
+\r
+ mx.Scale( new_scale, new_scale, MatrixOrder.Prepend );\r
+ mx.Translate(\r
+ mx.OffsetX * new_scale - mx.OffsetX,\r
+ mx.OffsetY * new_scale - mx.OffsetY, MatrixOrder.Append);\r
+\r
+ java.awt.Graphics2D g = NativeObject;\r
+ g.setTransform( mx.NativeObject );\r
+ }\r
+\r
public PixelOffsetMode PixelOffsetMode {\r
get {\r
throw new NotImplementedException();\r
g.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING,java.awt.RenderingHints.VALUE_ANTIALIAS_ON);\r
else\r
g.setRenderingHint(java.awt.RenderingHints.KEY_ANTIALIASING,java.awt.RenderingHints.VALUE_ANTIALIAS_OFF);\r
- //TODO:make it good\r
+ //TBD:make it good\r
}\r
}\r
\r
public int TextContrast {\r
get {\r
- //TODO:implement this\r
+ //TBD:implement this\r
throw new NotImplementedException();\r
}\r
\r
set {\r
- //TODO:implement this\r
+ //TBD:implement this\r
throw new NotImplementedException();\r
}\r
}\r
}\r
\r
set {\r
- //TODO: implement this\r
+ //TBD: implement this\r
throw new NotImplementedException();\r
}\r
}\r
\r
public Matrix Transform {\r
get {\r
- java.awt.Graphics2D g = NativeObject;\r
- Matrix matrix = new Matrix (g.getTransform());\r
- return matrix;\r
+ return _transform;\r
}\r
set {\r
- java.awt.Graphics2D g = NativeObject;\r
- g.setTransform(value.NativeObject);\r
+ _transform = value.Clone();\r
+ UpdateInternalTransform();\r
}\r
}\r
\r
public RectangleF VisibleClipBounds {\r
get {\r
- //TODO: implement this\r
+ //TBD: implement this\r
throw new NotImplementedException();\r
}\r
}\r
\r
void ConcatenateTransform(geom.AffineTransform transform, MatrixOrder order) {\r
- geom.AffineTransform at = NativeObject.getTransform();\r
+ geom.AffineTransform at = _transform.NativeObject;\r
Matrix.Multiply(at, transform, order);\r
- NativeObject.setTransform(at);\r
+\r
+ UpdateInternalTransform();\r
}\r
#endregion\r
}\r