Commit e8597130 authored by Havoc Pennington's avatar Havoc Pennington Committed by Havoc Pennington

Move more text widget headers into the private header list

2000-09-26  Havoc Pennington  <hp@redhat.com>

	* gtk/Makefile.am (gtk_private_h_sources): Move more text widget
	headers	into the private header list

	* Makefile.am (pkgconfig_DATA): install pkg-config files

	* configure.in: add pkg-config files

	* gdk-2.0.pc.in, gdk-pixbuf.pc.in, gtk+-2.0.pc.in: pkg-config files

	* gtk/gtkwindow.c (gtk_window_read_rcfiles): Invalidate
	outstanding icon caches on theme change.

	* gtk/gtkiconfactory.h, gtk/gtkiconfactory.c: New icon system. Three
	important types:

	(GtkIconSource): Specification for creating a pixbuf
	appropriate for a direction/state/size triplet from
	a source pixbuf or filename

	(GtkIconSet): List of GtkIconSource objects that are used to
	create the "same" icon (e.g. an OK button icon), and cache for
	rendered icons

	(GtkIconFactory): Hash from stock ID to GtkIconSet; used to look
	up the icon set for a given stock ID.  GTK maintains a stack of
	GtkIconFactory to search, and applications or libraries can add
	additional icon factories on top of the stack

        * gtk/gtkrc.h, gtk/gtkrc.c: When loading an RcStyle, parse
	the set of GtkIconSource specified for a given stock ID into
	a GtkIconSet, and put the GtkIconSet into a GtkIconFactory for the
	RcStyle, under the specified stock ID.

	* gtk/gtkstyle.h, gtk/gtkstyle.c: Add a virtual function
	render_icon used to derive a GdkPixbuf from a GtkIconSource.
	This allows people to theme how prelight, insensitive, etc. are
	done.

	(gtk_style_lookup_icon_set): Look up a stock ID in the list of
	icon factories for a style, and return the resulting
	icon set if any.

	(gtk_style_render_icon): Render an icon using the render_icon
	method in the GtkStyleClass.

	* gtk/gtkwidget.h, gtk/gtkwidget.c (gtk_widget_render_icon):
	Use the style for a given widget to look up a stock ID, get the
	icon set, and render an icon using the render_icon method
	of the style

	* gtk/gtkstock.h, gtk/gtkstock.c: Header with the GtkStockItem type
	(contains information about a stock item), the built-in stock item
	IDs, and functions to add/lookup stock items.

	* gtk/stock-icons/*: Stock icons that come with GTK

	* gtk/gtkbutton.h, gtk/gtkbutton.c (gtk_button_new_stock): Returns
	a button based on a GtkStockItem
	(gtk_button_new_accel): Takes a uline string and accel group, and
	installs the accelerator.

	* gtk/gtkimage.h, gtk/gtkimage.c: Make this into a generic
	image-display widget.
parent 9bec105a
......@@ -112,6 +112,9 @@ EXTRA_DIST = \
examples/spinbutton/Makefile \
examples/find-examples.sh
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA= gdk-pixbuf.pc gdk-2.0.pc gtk+-2.0.pc
dist-hook: gtk+.spec
if test -e $(srcdir)/INSTALL.in && test -e $(srcdir)/README.in ; then \
CONFIG_FILES="INSTALL:$(srcdir)/INSTALL.in README:$(srcdir)/README.in" \
......
......@@ -1005,6 +1005,9 @@ gtk+.spec
docs/gtk-config.1
Makefile
gtk-config-2.0
gdk-pixbuf.pc
gdk-2.0.pc
gtk+-2.0.pc
po/Makefile.in
build/Makefile
build/win32/Makefile
......@@ -1031,6 +1034,7 @@ gdk/linux-fb/Makefile
gtk/Makefile
gtk/makefile.mingw
gtk/gtkcompat.h
gtk/stock-icons/Makefile
modules/Makefile
modules/linux-fb/Makefile
], [chmod +x gtk-config-2.0])
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
target=@gdktarget@
Name: GDK
Description: GIMP Drawing Kit
Version: @VERSION@
Requires: gdk-pixbuf,pangox
Libs: -L${libdir} @more_ldflags@ -lgdk-${target}-1.3 @more_libs@ @GDK_WLIBS@
Cflags: -I${includedir}/gtk-2.0 -I${libdir}/gtk-2.0/include @more_cflags@
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
Name: GdkPixbuf
Description: Image loading and scaling
Version: @VERSION@
Requires: gobject-2.0,gmodule-2.0
Libs: -L${libdir} -lgdk_pixbuf-1.3 @INTLLIBS@ @MATH_LIB@
Cflags: -I${includedir}
2000-09-26 Havoc Pennington <hp@redhat.com>
* gdk-pixbuf-util.c (gdk_pixbuf_saturate_and_pixelate): Add this
function here, instead of putting it in a private GTK+ file.
* gdk-pixbuf-private.h (GdkPixbufInlineFormat): include an
enum here for the known formats of inlined pixbufs.
Also, #define our file magic here.
2000-06-23 Havoc Pennington <hp@redhat.com>
* make-inline-pixbuf.c: Small program that creates C variable
declarations of inline pixbuf data. This can be read
by gdk_pixbuf_new_from_inline.
* gdk-pixbuf.h (gdk_pixbuf_new_from_inline): New function to read
inline pixbuf data and create a pixbuf from it.
* gdk-pixbuf-data.c (gdk_pixbuf_new_from_inline): implement here
2000-09-07 Tor Lillqvist <tml@iki.fi>
* makefile.mingw.in: Use own version number for gdk-pixbuf DLLs,
......@@ -27,6 +47,7 @@
* io-wbmp.c: Some bug fixes - now tested to work.
2000-07-27 Elliot Lee <sopwith@redhat.com>
* gdk-pixbuf-io.h, gdk-pixbuf-io.c: Add gdk_pixbuf_get_named_module() function to facilitate above change
* io-wbmp.c, pixbufloader_wbmp.defs, gdk-pixbuf-io.c, Makefile: Implement loader for WBMP format.
* io-bmp.c: Don't malloc a temporary buffer - use stack instead.
......@@ -91,7 +112,7 @@ Thu Jul 6 11:49:47 2000 Owen Taylor <otaylor@redhat.com>
* Makefile.am (libgdk_pixbuf_la_LDFLAGS): Use GTK+ version
soname scheme for gdk-pixbuf.
2000-06-21 Havoc Pennington <hp@pobox.com>
* gdk-pixbuf.c: Convert GdkPixbuf to GObject, leaving it opaque
......
......@@ -148,6 +148,12 @@ LDADDS = libgdk_pixbuf-1.3.la $(GLIB_LIBS) $(STATIC_LIB_DEPS)
test_gdk_pixbuf_LDADD = $(LDADDS)
bin_PROGRAMS=make-inline-pixbuf
make_inline_pixbuf_SOURCES=make-inline-pixbuf.c
make_inline_pixbuf_LDADD = $(LDADDS)
GDK_PIXBUF_LIBS = $(GLIB_LIBS)
#
......
......@@ -23,6 +23,8 @@
#include <config.h>
#include "gdk-pixbuf.h"
#include "gdk-pixbuf-private.h"
#include <stdlib.h>
#include <string.h>
......@@ -75,3 +77,175 @@ gdk_pixbuf_new_from_data (const guchar *data, GdkColorspace colorspace, gboolean
return pixbuf;
}
static guint32
read_int (const guchar **p)
{
guint32 num;
/* Note most significant bytes are first in the byte stream */
num =
(*p)[3] |
((*p)[2] << 8) |
((*p)[1] << 16) |
((*p)[0] << 24);
*p += 4;
return num;
}
static gboolean
read_bool (const guchar **p)
{
gboolean val = **p != 0;
++(*p);
return val;
}
static GdkPixbuf*
read_raw_inline (const guchar *data, gboolean copy_pixels, int length)
{
GdkPixbuf *pixbuf;
const guchar *p = data;
guint32 rowstride, width, height, colorspace,
n_channels, bits_per_sample;
gboolean has_alpha;
if (length >= 0 && length < 12) {
/* Not enough buffer to hold the width/height/rowstride */
return NULL;
}
rowstride = read_int (&p);
width = read_int (&p);
height = read_int (&p);
if (rowstride < width)
return NULL; /* bad data from untrusted source. */
/* rowstride >= width, so we can trust width */
length -= 12;
/* There's some better way like G_MAXINT/height > rowstride
* but I'm not sure it works, so stick to this for now.
*/
if (((double)height) * ((double)rowstride) > (double)G_MAXINT)
return NULL; /* overflow */
if (length >= 0 &&
length < (height * rowstride + 13)) {
/* Not enough buffer to hold the remaining header
* information plus the data.
*/
return NULL;
}
/* Read the remaining 13 bytes of header information */
has_alpha = read_bool (&p) != FALSE;
colorspace = read_int (&p);
n_channels = read_int (&p);
bits_per_sample = read_int (&p);
if (colorspace != GDK_COLORSPACE_RGB)
return NULL;
if (bits_per_sample != 8)
return NULL;
if (has_alpha && n_channels != 4)
return NULL;
if (!has_alpha && n_channels != 3)
return NULL;
if (copy_pixels) {
guchar *pixels;
gint dest_rowstride;
gint row;
pixbuf = gdk_pixbuf_new (colorspace,
has_alpha, bits_per_sample,
width, height);
pixels = gdk_pixbuf_get_pixels (pixbuf);
dest_rowstride = gdk_pixbuf_get_rowstride (pixbuf);
for (row = 0; row < height; row++) {
memcpy (pixels, p, rowstride);
pixels += dest_rowstride;
p += rowstride;
}
} else {
pixbuf = gdk_pixbuf_new_from_data (p,
colorspace,
has_alpha,
bits_per_sample,
width, height,
rowstride,
NULL, NULL);
}
return pixbuf;
}
/**
* gdk_pixbuf_new_from_inline:
* @data: An inlined GdkPixbuf
* @copy_pixels: whether to copy the pixels out of the inline data, or to use them in-place
*
* Create a #GdkPixbuf from a custom format invented to store pixbuf
* data in C program code. This library comes with a program called "make-inline-pixbuf"
* that can write out a variable definition containing an inlined pixbuf.
* This is useful if you want to ship a program with images, but
* don't want to depend on any external files.
*
* The inline data format contains the pixels in #GdkPixbuf's native
* format. Since the inline pixbuf is read-only static data, you
* don't need to copy it unless you intend to write to it.
*
* Return value: A newly-created #GdkPixbuf structure with a reference count of
* 1.
**/
GdkPixbuf*
gdk_pixbuf_new_from_inline (const guchar *inline_pixbuf,
gboolean copy_pixels,
int length)
{
const guchar *p;
GdkPixbuf *pixbuf;
GdkPixbufInlineFormat format;
if (length >= 0 && length < 8) {
/* not enough bytes to contain even the magic number
* and format code.
*/
return NULL;
}
p = inline_pixbuf;
if (read_int (&p) != GDK_PIXBUF_INLINE_MAGIC_NUMBER) {
return NULL;
}
format = read_int (&p);
switch (format)
{
case GDK_PIXBUF_INLINE_RAW:
pixbuf = read_raw_inline (p, copy_pixels, length - 8);
break;
default:
return NULL;
}
return pixbuf;
}
......@@ -117,4 +117,14 @@ struct _GdkPixbufAnimationClass {
#define GDK_PIXBUF_INLINE_MAGIC_NUMBER 0x47646B50 /* 'GdkP' */
typedef enum
{
GDK_PIXBUF_INLINE_RAW = 0,
GDK_PIXBUF_INLINE_RLE = 1
} GdkPixbufInlineFormat;
#endif
......@@ -131,3 +131,102 @@ gdk_pixbuf_copy_area (const GdkPixbuf *src_pixbuf,
1.0, 1.0,
GDK_INTERP_NEAREST);
}
#define INTENSITY(r, g, b) ((r) * 0.30 + (g) * 0.59 + (b) * 0.11)
/**
* gdk_pixbuf_saturate_and_pixelate:
* @src: source image
* @dest: place to write modified version of @src
* @saturation: saturation factor
* @pixelate: whether to pixelate
*
* Modifies saturation and optionally pixelates @src, placing the
* result in @dest. @src and @dest may be the same pixbuf with no ill
* effects. If @saturation is 1.0 then saturation is not changed. If
* it's less than 1.0, saturation is reduced (the image is darkened);
* if greater than 1.0, saturation is increased (the image is
* brightened). If @pixelate is TRUE, then pixels are faded in a
* checkerboard pattern to create a pixelated image. @src and @dest
* must have the same image format, size, and rowstride.
*
**/
void
gdk_pixbuf_saturate_and_pixelate(const GdkPixbuf *src,
GdkPixbuf *dest,
gfloat saturation,
gboolean pixelate)
{
/* NOTE that src and dest MAY be the same pixbuf! */
g_return_if_fail (GDK_IS_PIXBUF (src));
g_return_if_fail (GDK_IS_PIXBUF (dest));
g_return_if_fail (gdk_pixbuf_get_height (src) == gdk_pixbuf_get_height (dest));
g_return_if_fail (gdk_pixbuf_get_width (src) == gdk_pixbuf_get_width (dest));
g_return_if_fail (gdk_pixbuf_get_rowstride (src) == gdk_pixbuf_get_rowstride (dest));
g_return_if_fail (gdk_pixbuf_get_colorspace (src) == gdk_pixbuf_get_colorspace (dest));
if (saturation == 1.0 && !pixelate) {
if (dest != src)
memcpy (gdk_pixbuf_get_pixels (dest),
gdk_pixbuf_get_pixels (src),
gdk_pixbuf_get_height (src) * gdk_pixbuf_get_rowstride (src));
return;
} else {
gint i, j;
gint width, height, has_alpha, rowstride;
guchar *target_pixels;
guchar *original_pixels;
guchar *current_pixel;
guchar intensity;
has_alpha = gdk_pixbuf_get_has_alpha (src);
width = gdk_pixbuf_get_width (src);
height = gdk_pixbuf_get_height (src);
rowstride = gdk_pixbuf_get_rowstride (src);
target_pixels = gdk_pixbuf_get_pixels (dest);
original_pixels = gdk_pixbuf_get_pixels (src);
for (i = 0; i < height; i++) {
for (j = 0; j < width; j++) {
current_pixel = original_pixels + i*rowstride + j*(has_alpha?4:3);
intensity = INTENSITY (*(current_pixel), *(current_pixel + 1), *(current_pixel + 2));
if (pixelate && (i+j)%2 == 0) {
*(target_pixels + i*rowstride + j*(has_alpha?4:3)) = intensity/2 + 127;
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 1) = intensity/2 + 127;
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 2) = intensity/2 + 127;
} else if (pixelate) {
#define DARK_FACTOR 0.7
*(target_pixels + i*rowstride + j*(has_alpha?4:3)) =
(guchar) (((1.0 - saturation) * intensity
+ saturation * (*(current_pixel)))) * DARK_FACTOR;
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 1) =
(guchar) (((1.0 - saturation) * intensity
+ saturation * (*(current_pixel + 1)))) * DARK_FACTOR;
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 2) =
(guchar) (((1.0 - saturation) * intensity
+ saturation * (*(current_pixel + 2)))) * DARK_FACTOR;
} else {
*(target_pixels + i*rowstride + j*(has_alpha?4:3)) =
(guchar) ((1.0 - saturation) * intensity
+ saturation * (*(current_pixel)));
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 1) =
(guchar) ((1.0 - saturation) * intensity
+ saturation * (*(current_pixel + 1)));
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 2) =
(guchar) ((1.0 - saturation) * intensity
+ saturation * (*(current_pixel + 2)));
}
if (has_alpha)
*(target_pixels + i*rowstride + j*(has_alpha?4:3) + 3) = *(current_pixel + 3);
}
}
return;
}
}
......@@ -36,7 +36,10 @@ extern "C" {
/* Color spaces; right now only RGB is supported */
/* Color spaces; right now only RGB is supported.
* Note that these values are encoded in inline pixbufs
* as ints, so don't reorder them
*/
typedef enum {
GDK_COLORSPACE_RGB
} GdkColorspace;
......@@ -103,6 +106,11 @@ GdkPixbuf *gdk_pixbuf_new_from_data (const guchar *data,
GdkPixbuf *gdk_pixbuf_new_from_xpm_data (const char **data);
/* Read an inline pixbuf */
GdkPixbuf *gdk_pixbuf_new_from_inline (const guchar *inline_pixbuf,
gboolean copy_pixels,
int length);
/* Adding an alpha channel */
GdkPixbuf *gdk_pixbuf_add_alpha (const GdkPixbuf *pixbuf, gboolean substitute_color,
guchar r, guchar g, guchar b);
......@@ -114,6 +122,12 @@ void gdk_pixbuf_copy_area (const GdkPixbuf *src_pixbuf,
GdkPixbuf *dest_pixbuf,
int dest_x, int dest_y);
/* Brighten/darken and optionally make it pixelated-looking */
void gdk_pixbuf_saturate_and_pixelate (const GdkPixbuf *src,
GdkPixbuf *dest,
gfloat saturation,
gboolean pixelate);
/* Rendering to a drawable */
......
/* Program to convert an image file to inline C data
*
* Copyright (C) 2000 Red Hat, Inc.
*
* Developed by Havoc Pennington <hp@redhat.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 59 Temple Place - Suite 330,
* Boston, MA 02111-1307, USA.
*/
#include <config.h>
#include "gdk-pixbuf-private.h"
#include <stdio.h>
#include <errno.h>
#include <string.h>
#include <stdlib.h>
void
output_int (FILE *outfile, guint32 num, const char *comment)
{
guchar bytes[4];
/* Note, most significant bytes first */
bytes[0] = num >> 24;
bytes[1] = num >> 16;
bytes[2] = num >> 8;
bytes[3] = num;
fprintf(outfile, " /* %s (%u) */\n 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x,\n",
comment, num,
bytes[0], bytes[1], bytes[2], bytes[3]);
}
void
output_bool (FILE *outfile, gboolean val, const char *comment)
{
fprintf(outfile, " /* %s (%s) */\n 0x%.2x,\n",
comment,
val ? "TRUE" : "FALSE",
val ? 1 : 0);
}
void
output_pixbuf (FILE *outfile, gboolean ext_symbols,
const char *varname,
GdkPixbuf *pixbuf)
{
const char *modifier;
const guchar *p;
const guchar *end;
gboolean has_alpha;
int column;
modifier = "static ";
if (ext_symbols)
modifier = "";
fprintf (outfile, "%sconst guchar ", modifier);
fputs (varname, outfile);
fputs ("[] =\n", outfile);
fputs ("{\n", outfile);
p = gdk_pixbuf_get_pixels (pixbuf);
end = p + gdk_pixbuf_get_rowstride (pixbuf) * gdk_pixbuf_get_height (pixbuf);
has_alpha = gdk_pixbuf_get_has_alpha (pixbuf);
/* Sync the order of writing with the order of reading in
* gdk-pixbuf-data.c
*/
output_int (outfile, GDK_PIXBUF_INLINE_MAGIC_NUMBER, "File magic");
output_int (outfile, GDK_PIXBUF_INLINE_RAW, "Format of following stuff");
output_int (outfile, gdk_pixbuf_get_rowstride (pixbuf), "Rowstride");
output_int (outfile, gdk_pixbuf_get_width (pixbuf), "Width");
output_int (outfile, gdk_pixbuf_get_height (pixbuf), "Height");
output_bool (outfile, has_alpha, "Has an alpha channel");
output_int (outfile, gdk_pixbuf_get_colorspace (pixbuf), "Colorspace (0 == RGB, no other options implemented)");
output_int (outfile, gdk_pixbuf_get_n_channels (pixbuf), "Number of channels");
output_int (outfile, gdk_pixbuf_get_bits_per_sample (pixbuf), "Bits per sample");
fputs (" /* Image data */\n", outfile);
/* Copy the data in the pixbuf */
column = 0;
while (p != end)
{
guchar r, g, b, a;
r = *p;
++p;
g = *p;
++p;
b = *p;
++p;
if (has_alpha)
{
a = *p;
++p;
}
else
a = 0;
if (has_alpha)
fprintf(outfile, " 0x%.2x, 0x%.2x, 0x%.2x, 0x%.2x", r, g, b, a);
else
fprintf(outfile, " 0x%.2x, 0x%.2x, 0x%.2x", r, g, b);
if (p != end)
fputs (",", outfile);
else
fputs ("\n", outfile);
++column;
if (column > 2)
{
fputs ("\n", outfile);
column = 0;
}
}
fputs ("};\n\n", outfile);
}
void
usage (void)
{
fprintf (stderr, "Usage: make-inline-pixbuf [--extern-symbols] OUTFILE varname1 imagefile1 varname2 imagefile2 ...\n");
exit (1);
}
int
main (int argc, char **argv)
{
gboolean ext_symbols = FALSE;
FILE *outfile;
int i;
gdk_pixbuf_init ();
if (argc < 4)
usage ();
i = 1;
if (strcmp (argv[i], "--extern-symbols") == 0)
{
ext_symbols = TRUE;
++i;
if (argc < 5)
usage ();
}
outfile = fopen (argv[i], "w");
if (outfile == NULL)
{
fprintf (stderr, "Failed to open output file `%s': %s\n",
argv[i], strerror (errno));
exit (1);
}
++i;
fputs ("/* This file was automatically generated by the make-inline-pixbuf program.\n"
" * It contains inline RGB image data.\n"
" */\n\n", outfile);
/* Check for matched pairs of images/names */
if (((argc - i) % 2) != 0)
usage ();
while (i < argc)
{
GdkPixbuf *pixbuf;
g_assert ((i + 1) < argc);
pixbuf = gdk_pixbuf_new_from_file (argv[i+1]);
if (pixbuf == NULL)
{
fprintf (stderr, "Failed to open image file `%s': %s\n",
argv[i+1], strerror (errno));
exit (1);
}
output_pixbuf (outfile, ext_symbols, argv[i], pixbuf);
gdk_pixbuf_unref (pixbuf);
i += 2;
}
fclose (outfile);
return 0;
}
prefix=@prefix@
exec_prefix=@exec_prefix@
libdir=@libdir@
includedir=@includedir@
target=@gdktarget@
Name: GTK+
Description: GIMP Tool Kit
Version: @VERSION@
Requires: gdk-2.0
Libs: -L${libdir} -lgtk-${target}-1.3
Cflags: -I${includedir}
## Makefile.am for gtk+/gtk
SUBDIRS=stock-icons
INCLUDES = @STRIP_BEGIN@ \
-DG_LOG_DOMAIN=\"Gtk\" \
-DGTK_DISABLE_COMPAT_H \
......@@ -96,6 +98,7 @@ gtk_public_h_sources = @STRIP_BEGIN@ \
gtkhscrollbar.h \
gtkhseparator.h \
gtkhsv.h \
gtkiconfactory.h \
gtkimage.h \
gtkimcontext.h \
gtkimmulticontext.h \
......@@ -141,6 +144,7 @@ gtk_public_h_sources = @STRIP_BEGIN@ \
gtkspinbutton.h \
gtkstyle.h \
gtkstatusbar.h \
gtkstock.h \
gtktable.h \
gtktearoffmenuitem.h \
gtktextbuffer.h \
......@@ -178,16 +182,18 @@ gtk_public_h_sources = @STRIP_BEGIN@ \
# interface)
gtk_semipublic_h_sources = @STRIP_BEGIN@ \
gtktextbtree.h \
gtktextchild.h \
gtktextdisplay.h \
gtktextlayout.h \
gtktextsegment.h \
gtktexttypes.h \
@STRIP_END@
# GTK+ header files that don't get installed