]> Pileus Git - ~andy/gtk/commitdiff
Add tools and images used for creating the check/radio button images in
authorOwen Taylor <otaylor@redhat.com>
Sat, 9 Feb 2002 18:20:45 +0000 (18:20 +0000)
committerOwen Taylor <otaylor@src.gnome.org>
Sat, 9 Feb 2002 18:20:45 +0000 (18:20 +0000)
Sat Feb  9 13:19:20 2002  Owen Taylor  <otaylor@redhat.com>

* configure.in gtk/Makefile.am gtk/theme-bits/*: Add
tools and images used for creating the check/radio
button images in the default theme.

configure.in
gtk/Makefile.am
gtk/theme-bits/.cvsignore [new file with mode: 0644]
gtk/theme-bits/Makefile.am [new file with mode: 0644]
gtk/theme-bits/README [new file with mode: 0644]
gtk/theme-bits/check-13.png [new file with mode: 0644]
gtk/theme-bits/decompose-bits.c [new file with mode: 0644]
gtk/theme-bits/radio-13.png [new file with mode: 0644]

index 7295a1c7ee95ef44d0fe14513be014c5d3d4bac7..a14539bba93cc58962310384a4b2fde1b1297302 100644 (file)
@@ -1343,6 +1343,7 @@ gtk/makefile.msc
 gtk/gtkversion.h
 gtk/gtk-win32.rc
 gtk/stock-icons/Makefile
+gtk/theme-bits/Makefile
 modules/Makefile
 modules/input/Makefile
 contrib/Makefile
index 8299e45a160f1e86d23fa06413fbfdda7807267d..f7c3145ced18e4fa26702252a471beccffb26540 100644 (file)
@@ -1,6 +1,6 @@
 # Makefile.am for gtk+/gtk
 
-SUBDIRS=stock-icons
+SUBDIRS=stock-icons theme-bits
 
 INCLUDES = @STRIP_BEGIN@ \
        -DG_LOG_DOMAIN=\"Gtk\"                          \
diff --git a/gtk/theme-bits/.cvsignore b/gtk/theme-bits/.cvsignore
new file mode 100644 (file)
index 0000000..2e8c3f8
--- /dev/null
@@ -0,0 +1,5 @@
+.xvpics
+Makefile
+Makefile.in
+*.lo
+decompose-bits
diff --git a/gtk/theme-bits/Makefile.am b/gtk/theme-bits/Makefile.am
new file mode 100644 (file)
index 0000000..47cd0b0
--- /dev/null
@@ -0,0 +1,11 @@
+INCLUDES = -I$(top_srcdir) -I$(top_builddir)   \
+       -DG_DISABLE_DEPRECATED                  \
+       -DGDK_PIXBUF_DISABLE_DEPRECATED         \
+       @GDK_PIXBUF_DEP_CFLAGS@
+
+noinst_PROGRAMS = decompose-bits
+
+decompose_bits_SOURCES = decompose-bits.c
+decompose_bits_LDADD = $(top_builddir)/gdk-pixbuf/libgdk_pixbuf-1.3.la
+
+EXTRA_DIST = check-13.png radio-13.png
diff --git a/gtk/theme-bits/README b/gtk/theme-bits/README
new file mode 100644 (file)
index 0000000..bbb3758
--- /dev/null
@@ -0,0 +1,29 @@
+This directory contains bits and pieces used in the default theme.
+Right now, it contains a tool for extracting individual part 
+bitmaps from a composed image, and source images for the default
+check and radio buttons.
+
+The decompose-bits tools takes an image where the first line contains
+the colors for each part, and the rest of the image is the actual
+image.
+
+The colors on the first line are:
+
+ pixel 0: black
+ pixel 1: dark
+ pixel 2: mid
+ pixel 3: light
+ pixel 4: text
+ pixel 5: text_aa
+ pixel 6: base
+
+The generated XBM bits for the base part include the bits for text and
+text_aa as well; this is so that the result can be drawn either
+with or without the text/text_aa indicator. 
+
+Make sure that any PNG images added to this directory are added with
+'cvs add -kb'.
+
+Owen Taylor
+9 February 2002
+
diff --git a/gtk/theme-bits/check-13.png b/gtk/theme-bits/check-13.png
new file mode 100644 (file)
index 0000000..50622ef
Binary files /dev/null and b/gtk/theme-bits/check-13.png differ
diff --git a/gtk/theme-bits/decompose-bits.c b/gtk/theme-bits/decompose-bits.c
new file mode 100644 (file)
index 0000000..0a49bda
--- /dev/null
@@ -0,0 +1,157 @@
+#include <gdk-pixbuf/gdk-pixbuf.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#define BYTES_PER_OUTPUT_LINE 15
+
+static gint
+output_byte (guchar byte,
+            gint   online)
+{
+  if (online == BYTES_PER_OUTPUT_LINE)
+    {
+      printf (",\n  ");
+      online = 0;
+    }
+  else if (online)
+    {
+      printf (",");
+    }
+
+  printf ("0x%02x", byte);
+  return online + 1;
+}
+
+static void
+do_part (GdkPixbuf  *pixbuf,
+        gint        part1_index,
+        gint        part2_index,
+        gint        part3_index,
+        const char *base_name,
+        const char *part_name)
+{
+  const guchar *pixels = gdk_pixbuf_get_pixels (pixbuf);
+  const guchar *color1;
+  const guchar *color2;
+  const guchar *color3;
+  gint rowstride = gdk_pixbuf_get_rowstride (pixbuf);
+  gint n_channels = gdk_pixbuf_get_n_channels (pixbuf);
+  gint width = gdk_pixbuf_get_width (pixbuf);
+  gint height = gdk_pixbuf_get_height (pixbuf);
+  gint online = 0;
+
+  color1 = pixels + part1_index * n_channels;
+  color2 = pixels + part2_index * n_channels;
+  color3 = pixels + part3_index * n_channels;
+  pixels += rowstride;
+  
+  printf ("static char %s_%s_bits[] = {\n", base_name, part_name);
+  printf ("  ");
+
+  while (height--)
+    {
+      guchar bit = 1;
+      guchar byte = 0;
+      const guchar *p = pixels;
+      gint n = width;
+
+      while (n--)
+       {
+         if ((part1_index > 0 && memcmp (p, color1, n_channels) == 0) ||
+             (part2_index > 0 && memcmp (p, color2, n_channels) == 0) ||
+             (part3_index > 0 && memcmp (p, color3, n_channels) == 0))
+           byte |= bit;
+
+         if (bit == 0x80)
+           {
+             online = output_byte (byte, online);
+             byte = 0;
+             bit = 1;
+           }
+         else
+           bit <<= 1;
+
+         p += n_channels;
+       }
+
+      if (width & 7)           /* a leftover partial byte */
+       online = output_byte (byte, online);
+
+      pixels += rowstride;
+    }
+  
+  printf ("};\n");
+}
+
+typedef enum {
+  PART_BLACK,
+  PART_DARK,
+  PART_MID,
+  PART_LIGHT,
+  PART_TEXT,
+  PART_TEXT_AA,
+  PART_BASE,
+  PART_LAST
+} Part;
+
+const char *part_names[PART_LAST] = {
+  "black",
+  "dark",
+  "mid",
+  "light",
+  "text",
+  "aa",
+  "base",
+};
+
+int main (int argc, char **argv)
+{
+  gchar *progname = g_path_get_basename (argv[0]);
+  GdkPixbuf *pixbuf;
+  GError *error = NULL;
+  gint i;
+
+  if (argc != 3)
+    {
+      fprintf (stderr, "%s: Usage: %s FILE BASE\n", progname, progname);
+      exit (1);
+    }
+
+  g_type_init ();
+  
+  pixbuf = gdk_pixbuf_new_from_file (argv[1], &error);
+  if (!pixbuf)
+    {
+      fprintf (stderr, "%s: cannot open file '%s': %s\n", progname, argv[1], error->message);
+      exit (1);
+    }
+  
+  if (gdk_pixbuf_get_width (pixbuf) < PART_LAST)
+    {
+      fprintf (stderr, "%s: source image must be at least %d pixels wide\n", progname, PART_LAST);
+      exit (1);
+    }
+
+  if (gdk_pixbuf_get_height (pixbuf) < 1)
+    {
+      fprintf (stderr, "%s: source image must be at least 1 pixel height\n", progname);
+      exit (1);
+    }
+
+  printf ("/*\n * Extracted from %s, width=%d, height=%d\n */\n", argv[1],
+         gdk_pixbuf_get_width (pixbuf), gdk_pixbuf_get_height (pixbuf) - 1);
+
+  for (i = 0; i < PART_LAST; i++)
+    {
+      /* As a bit of a hack, we want the base image to extend over the text
+       * and text_aa parts so that we can draw the image either with or without
+       * the indicator
+       */
+      if (i == PART_BASE)
+       do_part (pixbuf, PART_BASE, PART_TEXT_AA, PART_TEXT, argv[2], part_names[i]);
+      else
+       do_part (pixbuf, i, -1, -1, argv[2], part_names[i]);
+    }
+  return 0;
+}
diff --git a/gtk/theme-bits/radio-13.png b/gtk/theme-bits/radio-13.png
new file mode 100644 (file)
index 0000000..410fd50
Binary files /dev/null and b/gtk/theme-bits/radio-13.png differ