svn path=/trunk/mcs/; revision=48361
authorVladimir Krasnov <krasnov@mono-cvs.ximian.com>
Sun, 14 Aug 2005 09:42:36 +0000 (09:42 -0000)
committerVladimir Krasnov <krasnov@mono-cvs.ximian.com>
Sun, 14 Aug 2005 09:42:36 +0000 (09:42 -0000)
mcs/class/System.Drawing/System.Drawing/ChangeLog
mcs/class/System.Drawing/System.Drawing/Graphics.jvm.cs

index 72caa75cedaa190d53f93b29eeea31857d412022..47a98e4dd427701222fc0ef6745189fd01fb815c 100644 (file)
@@ -1,5 +1,11 @@
 2005-08-14 Vladimir Krasnov <vladimirk@mainsoft.com>
 
+       * Graphics.jvm.cs: Implemented PageUnit, PageScale. 
+       Added UpdateInternalTransform
+       Fixed DrawImage, Transform, ConcatenateTransform
+
+2005-08-14 Vladimir Krasnov <vladimirk@mainsoft.com>
+
        * Icon.jvm.cs: Internal constructor from bitmap
        * Added SystemIcons.jvm.cs with implementation of SystemIcons
        
index d59da2c32d79d87ceb12d7b006a66d5614375ffa..39e64a0b0377d885c9750679ead1bc1456133814 100755 (executable)
@@ -15,6 +15,20 @@ namespace System.Drawing {
 \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
@@ -35,6 +49,8 @@ namespace System.Drawing {
                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
@@ -530,13 +546,28 @@ namespace System.Drawing {
 \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
@@ -564,7 +595,12 @@ namespace System.Drawing {
                \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
@@ -577,14 +613,22 @@ namespace System.Drawing {
                \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
@@ -595,7 +639,11 @@ namespace System.Drawing {
                }\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
@@ -629,7 +677,10 @@ namespace System.Drawing {
 #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
@@ -650,14 +701,20 @@ namespace System.Drawing {
 #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
@@ -671,7 +728,11 @@ namespace System.Drawing {
                }\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
@@ -687,14 +748,14 @@ namespace System.Drawing {
 #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
@@ -709,7 +770,7 @@ namespace System.Drawing {
 \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
@@ -724,7 +785,7 @@ namespace System.Drawing {
                \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
@@ -1434,13 +1495,13 @@ namespace System.Drawing {
 \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
@@ -1598,7 +1659,7 @@ namespace System.Drawing {
                \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
@@ -1612,7 +1673,7 @@ namespace System.Drawing {
                }\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
@@ -1647,7 +1708,7 @@ namespace System.Drawing {
                \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
@@ -1679,7 +1740,7 @@ namespace System.Drawing {
                }\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
@@ -1709,7 +1770,7 @@ namespace System.Drawing {
 \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
@@ -1735,29 +1796,45 @@ namespace System.Drawing {
 \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
@@ -1811,18 +1888,18 @@ namespace System.Drawing {
                                        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
@@ -1844,34 +1921,33 @@ namespace System.Drawing {
                        }\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