summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
authorOwen Taylor <otaylor@redhat.com>2002-02-09 18:20:45 +0000
committerOwen Taylor <otaylor@src.gnome.org>2002-02-09 18:20:45 +0000
commit368d401585e079d52cc57a32b53b70d71ae55acc (patch)
treed8e85d538e7c421201dcf462577642a10ea5ce5d /gtk
parentc8905858677fc86a037e1bfe917813a9708c4408 (diff)
downloadgdk-pixbuf-368d401585e079d52cc57a32b53b70d71ae55acc.tar.gz
Add tools and images used for creating the check/radio button images in
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.
Diffstat (limited to 'gtk')
-rw-r--r--gtk/Makefile.am2
-rw-r--r--gtk/theme-bits/.cvsignore5
-rw-r--r--gtk/theme-bits/Makefile.am11
-rw-r--r--gtk/theme-bits/README29
-rw-r--r--gtk/theme-bits/check-13.pngbin0 -> 267 bytes
-rw-r--r--gtk/theme-bits/decompose-bits.c157
-rw-r--r--gtk/theme-bits/radio-13.pngbin0 -> 306 bytes
7 files changed, 203 insertions, 1 deletions
diff --git a/gtk/Makefile.am b/gtk/Makefile.am
index 8299e45a1..f7c3145ce 100644
--- a/gtk/Makefile.am
+++ b/gtk/Makefile.am
@@ -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
index 000000000..2e8c3f87e
--- /dev/null
+++ b/gtk/theme-bits/.cvsignore
@@ -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
index 000000000..47cd0b023
--- /dev/null
+++ b/gtk/theme-bits/Makefile.am
@@ -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
index 000000000..bbb3758c8
--- /dev/null
+++ b/gtk/theme-bits/README
@@ -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
index 000000000..50622eff5
--- /dev/null
+++ b/gtk/theme-bits/check-13.png
Binary files differ
diff --git a/gtk/theme-bits/decompose-bits.c b/gtk/theme-bits/decompose-bits.c
new file mode 100644
index 000000000..0a49bda11
--- /dev/null
+++ b/gtk/theme-bits/decompose-bits.c
@@ -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
index 000000000..410fd50a1
--- /dev/null
+++ b/gtk/theme-bits/radio-13.png
Binary files differ