* ResXFileRef.cs: On 2.0 profile, special case files with .ico
authorGert Driesen <drieseng@users.sourceforge.net>
Sat, 10 Mar 2007 14:14:47 +0000 (14:14 -0000)
committerGert Driesen <drieseng@users.sourceforge.net>
Sat, 10 Mar 2007 14:14:47 +0000 (14:14 -0000)
extension to retain their actual dimension.
* ResXResourceReaderTest.cs: Added test for special casing of .ico
files.
* Makefile: Added 32x32 icon.

svn path=/trunk/mcs/; revision=74048

mcs/class/Managed.Windows.Forms/ChangeLog
mcs/class/Managed.Windows.Forms/Makefile
mcs/class/Managed.Windows.Forms/System.Resources/ChangeLog
mcs/class/Managed.Windows.Forms/System.Resources/ResXFileRef.cs
mcs/class/Managed.Windows.Forms/Test/System.Resources/ChangeLog
mcs/class/Managed.Windows.Forms/Test/System.Resources/ResXResourceReaderTest.cs
mcs/class/Managed.Windows.Forms/Test/resources/32x32.ico [new file with mode: 0644]

index 645897ca24cf4fe3db5dadfd1f05dc06ae2bddc5..b09be2dc434a59ffc7089c2151e8250419153ca7 100644 (file)
@@ -1,7 +1,11 @@
-2007-03-09  Rolf Bjarne Kvinge <RKvinge@novell.com> 
+2007-03-10  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * Makefile: Added 32x32 icon.
 
-       * System.Windows.Forms_test.dll.sources: Added FormHandleTest and MdiFormHandleTest.
+2007-03-09  Rolf Bjarne Kvinge <RKvinge@novell.com> 
 
+       * System.Windows.Forms_test.dll.sources: Added FormHandleTest and 
+       MdiFormHandleTest.
 
 2007-03-08  Chris Toshok <toshok@ximian.com>
 
index 691b7221431a297ebc90f4291f00f65c87e30603..51583cab7f6925610ada5f1c2877d6ab1a8a9362 100644 (file)
@@ -70,6 +70,7 @@ IMAGES_RESOURCES = \
 TEST_DISTFILES = \
        M.gif \
        Test/resources/a.cur \
+       Test/resources/32x32.ico \
        Test/System.Resources/compat_1_1.resx \
        Test/System.Resources/compat_2_0.resx \
        Test/System.Windows.Forms/bitmaps/a.png
@@ -81,7 +82,9 @@ EXTRA_DISTFILES = \
        $(TEST_DISTFILES)
 
 TEST_MCS_FLAGS = /r:System.Data.dll /r:System.Drawing.dll \
-       -resource:Test/resources/a.cur,a.cur -nowarn:618,612
+       -resource:Test/resources/a.cur,a.cur \
+       -resource:Test/resources/32x32.ico,32x32.ico \
+       -nowarn:618,612
 
 SWF.csproj: System.Windows.Forms.dll.sources System.Windows.Forms.dll.resources build-csproj
        ./build-csproj
index f9a2e7676cff5785d8e571eb7309ad3e334d67fc..4bdbc4cce9a039ca29d14a61aee17a68197ec046 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-10  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * ResXFileRef.cs: On 2.0 profile, special case files with .ico 
+       extension to retain their actual dimension.
+
 2007-02-10  Gert Driesen  <drieseng@users.sourceforge.net>
 
        * ResXResourceReader.cs: Add additional checks for validity of reader
index 88ab8285a1bd9672aca0e57fa574fc1285cb7168..8d9c24f04c8d2b348fbe24bf0f4d4454b9e27a73 100644 (file)
@@ -26,6 +26,9 @@
 
 using System;
 using System.ComponentModel;
+#if NET_2_0
+using System.Drawing;
+#endif
 using System.IO;
 using System.Reflection;
 using System.Text;
@@ -80,6 +83,13 @@ namespace System.Resources {
                                        file.Read(buffer, 0, (int) file.Length);
                                }
 
+#if NET_2_0
+                               if (type == typeof (Bitmap) && Path.GetExtension (parts [0]) == ".ico") {
+                                       MemoryStream ms = new MemoryStream (buffer);
+                                       return new Icon (ms).ToBitmap ();
+                               }
+#endif
+
                                return Activator.CreateInstance(type, BindingFlags.CreateInstance
                                        | BindingFlags.Public | BindingFlags.Instance, null, 
                                        new object[] { new MemoryStream (buffer) }, culture);
index ffe629a52a76bdf195cdebd79737e6842b7a6e6c..8fd289c43262dc2b5383a0dac06f84009cf9aee2 100644 (file)
@@ -1,3 +1,8 @@
+2007-03-10  Gert Driesen  <drieseng@users.sourceforge.net>
+
+       * ResXResourceReaderTest.cs: Added test for special casing of .ico
+       files.
+
 2007-02-13  Rolf Bjarne Kvinge <RKvinge@novell.com> 
 
        * ResXFileRefTest.cs: Removed warnings.
index c07a087e0eb652bae7b9dfafa6747157c74af715..60a582abca844b754b994d9e585c75d8ff0aef2d 100644 (file)
@@ -7,6 +7,7 @@
 
 using System;
 using System.Collections;
+using System.Drawing;
 using System.Globalization;
 using System.IO;
 using System.Resources;
@@ -169,6 +170,61 @@ namespace MonoTests.System.Resources
                        }
                }
 
+               [Test]
+               public void ExternalFileReference_Icon ()
+               {
+                       string refFile = Path.Combine (_tempDirectory, "32x32.ico");
+                       WriteEmbeddedResource ("32x32.ico", refFile);
+
+                       string resxFile = Path.Combine (_tempDirectory, "resources.resx");
+                       using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
+                               sw.Write (string.Format (CultureInfo.InvariantCulture,
+                                       _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
+                                       Consts.AssemblySystem_Windows_Forms, refFile,
+                                       typeof (Bitmap).AssemblyQualifiedName, string.Empty));
+                       }
+
+                       using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
+                               IDictionaryEnumerator enumerator = r.GetEnumerator ();
+                               enumerator.MoveNext ();
+                               Assert.IsNotNull (enumerator.Current, "#A1");
+                               Assert.AreEqual ("foo", enumerator.Key, "#A2");
+                               Bitmap bitmap = enumerator.Value as Bitmap;
+                               Assert.IsNotNull (bitmap, "#A3");
+#if NET_2_0
+                               Assert.AreEqual (32, bitmap.Height, "#A4");
+                               Assert.AreEqual (32, bitmap.Width, "#A5");
+#else
+                               Assert.AreEqual (96, bitmap.Height, "#A4");
+                               Assert.AreEqual (96, bitmap.Width, "#A5");
+#endif
+                       }
+
+                       File.Delete (refFile);
+                       File.Delete (resxFile);
+
+                       refFile = Path.Combine (_tempDirectory, "32x32.ICO");
+                       WriteEmbeddedResource ("32x32.ico", refFile);
+
+                       using (StreamWriter sw = new StreamWriter (resxFile, false, Encoding.UTF8)) {
+                               sw.Write (string.Format (CultureInfo.InvariantCulture,
+                                       _resXFileRefTemplate, ResXResourceWriter.ResMimeType, "1.0",
+                                       Consts.AssemblySystem_Windows_Forms, refFile,
+                                       typeof (Bitmap).AssemblyQualifiedName, string.Empty));
+                       }
+
+                       using (ResXResourceReader r = new ResXResourceReader (resxFile)) {
+                               IDictionaryEnumerator enumerator = r.GetEnumerator ();
+                               enumerator.MoveNext ();
+                               Assert.IsNotNull (enumerator.Current, "#B1");
+                               Assert.AreEqual ("foo", enumerator.Key, "#B2");
+                               Bitmap bitmap = enumerator.Value as Bitmap;
+                               Assert.IsNotNull (bitmap, "#B3");
+                               Assert.AreEqual (96, bitmap.Height, "#B4");
+                               Assert.AreEqual (96, bitmap.Width, "#B5");
+                       }
+               }
+
                [Test]
                public void ExternalFileReference_RelativePath ()
                {
@@ -1409,6 +1465,25 @@ namespace MonoTests.System.Resources
                        }
                }
 
+               private static void WriteEmbeddedResource (string name, string filename)
+               {
+                       const int size = 512;
+                       byte [] buffer = new byte [size];
+                       int count = 0;
+
+                       Stream input = typeof (ResXResourceReaderTest).Assembly.
+                               GetManifestResourceStream (name);
+                       Stream output = File.Open (filename, FileMode.Create);
+
+                       try {
+                               while ((count = input.Read (buffer, 0, size)) > 0) {
+                                       output.Write (buffer, 0, count);
+                               }
+                       } finally {
+                               output.Close ();
+                       }
+               }
+
                private const string _resXFileRefTemplate =
                        "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
                        "<root>" +
diff --git a/mcs/class/Managed.Windows.Forms/Test/resources/32x32.ico b/mcs/class/Managed.Windows.Forms/Test/resources/32x32.ico
new file mode 100644 (file)
index 0000000..697973c
Binary files /dev/null and b/mcs/class/Managed.Windows.Forms/Test/resources/32x32.ico differ