[libvirt] [PATCH] Add a Windows icon resource to virsh.exe

Richard W.M. Jones rjones at redhat.com
Wed Oct 15 16:37:51 UTC 2008


This patch adds a Windows resource icon to virsh.exe (on Windows only,
obviously).

I've generated 16x16, 32x32, 48x48 and 64x64 MS .ico files, starting
from Diana Fong / Tim Allen's libvirtLogo.png in the docs directory,
scaling it down to the required size, and adding an alpha mask.

The *.ico files have to go into the src directory, because of
limitations of the Microsoft resource editor file format itself.  I
propose to add the 64x64 PNG file into the docs directory, or perhaps
not bother adding it at all -- it's not actually used and can be quite
trivially recreated.

My graphical attempts are fairly lame.  This is partly because these
icons really need to be tweaked by hand for legibility at small sizes,
and partly because Windows itself does some quantization on the .ico
files after loading them.  This quantization I don't understand and
isn't documented anywhere.  Nevertheless the icon looks not totally
unreasonable, as you can see from the final screenshot attached.

Rich.

-- 
Richard Jones, Emerging Technologies, Red Hat  http://et.redhat.com/~rjones
Read my OCaml programming blog: http://camltastic.blogspot.com/
Fedora now supports 68 OCaml packages (the OPEN alternative to F#)
http://cocan.org/getting_started_with_ocaml_on_red_hat_and_fedora
-------------- next part --------------
? docs/libvirt_win_icon_64x64.png
? src/libvirt_win_icon_16x16.ico
? src/libvirt_win_icon_32x32.ico
? src/libvirt_win_icon_48x48.ico
? src/libvirt_win_icon_64x64.ico
Index: configure.in
===================================================================
RCS file: /data/cvs/libvirt/configure.in,v
retrieving revision 1.171
diff -u -r1.171 configure.in
--- configure.in	10 Oct 2008 13:57:13 -0000	1.171
+++ configure.in	15 Oct 2008 16:29:24 -0000
@@ -34,6 +34,8 @@
 AC_PROG_INSTALL
 AC_PROG_CPP
 
+AC_OBJEXT
+
 dnl gl_INIT uses m4_foreach_w, yet that is not defined in autoconf-2.59.
 dnl In order to accommodate developers with such old tools, here's a
 dnl replacement definition.
@@ -1040,6 +1042,10 @@
 AC_SUBST([CYGWIN_EXTRA_PYTHON_LIBADD])
 AC_SUBST([MINGW_EXTRA_LDFLAGS])
 
+dnl Look for windres to build a Windows icon resource.
+AC_CHECK_TOOL([WINDRES], [windres], [no])
+AM_CONDITIONAL([WITH_WIN_ICON], [test "$WINDRES" != "no"])
+
 # Set LV_LIBTOOL_OBJDIR to "." or $lt_cv_objdir, depending on whether
 # we're building shared libraries.  This is the name of the directory
 # in which .o files will be created.
Index: src/Makefile.am
===================================================================
RCS file: /data/cvs/libvirt/src/Makefile.am,v
retrieving revision 1.95
diff -u -r1.95 Makefile.am
--- src/Makefile.am	10 Oct 2008 13:57:13 -0000	1.95
+++ src/Makefile.am	15 Oct 2008 16:29:24 -0000
@@ -283,6 +283,33 @@
 	rm -f $@
 	mv $@-tmp $@
 
+if WITH_WIN_ICON
+virsh_LDADD += virsh_win_icon.$(OBJEXT)
+virsh_DEPENDENCIES += virsh_win_icon.$(OBJEXT)
+
+# Before you edit virsh_win_icon.rc, please note the following
+# limitations of the resource file format:
+#
+# (1) '..' is not permitted in the icon filename field.
+# (2) '-' is not permitted in the icon filename field.
+# (3) Comments are not permitted in the file.
+#
+# Windows appears to choose the first <= 32x32 icon it finds
+# in the resource file.  Therefore you should list the available
+# icons from largest to smallest, and make sure that the 32x32
+# icon is the most legible.
+#
+# Windows .ICO is a special MS-only format.  GIMP and other
+# tools can write it.  However there are several variations,
+# and Windows seems to do its own colour quantization.  More
+# information is needed in this area.
+
+virsh_win_icon.$(OBJEXT): virsh_win_icon.rc
+	$(WINDRES) \
+	  --input-format rc --input $< \
+	  --output-format coff --output $@
+endif
+
 libexec_PROGRAMS =
 
 if WITH_STORAGE_DISK
Index: src/virsh_win_icon.rc
===================================================================
RCS file: src/virsh_win_icon.rc
diff -N src/virsh_win_icon.rc
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/virsh_win_icon.rc	15 Oct 2008 16:29:24 -0000
@@ -0,0 +1,4 @@
+xlarge  ICON    libvirt_win_icon_64x64.ico
+large   ICON    libvirt_win_icon_48x48.ico
+medium  ICON    libvirt_win_icon_32x32.ico
+small   ICON    libvirt_win_icon_16x16.ico
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libvirt_win_icon_64x64.png
Type: image/png
Size: 4995 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0002.png>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libvirt_win_icon_64x64.ico
Type: image/vnd.microsoft.icon
Size: 16958 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0004.ico>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libvirt_win_icon_48x48.ico
Type: image/vnd.microsoft.icon
Size: 9662 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0005.ico>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libvirt_win_icon_32x32.ico
Type: image/vnd.microsoft.icon
Size: 4286 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0006.ico>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: libvirt_win_icon_16x16.ico
Type: image/vnd.microsoft.icon
Size: 1150 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0007.ico>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: screenshot.png
Type: image/png
Size: 12213 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20081015/aacf65c5/attachment-0003.png>


More information about the libvir-list mailing list