]> Pileus Git - ~andy/gtk/commitdiff
removed linux-fb backend files.
authorMichael Natterer <mitch@imendio.com>
Tue, 11 Mar 2008 17:14:00 +0000 (17:14 +0000)
committerMichael Natterer <mitch@src.gnome.org>
Tue, 11 Mar 2008 17:14:00 +0000 (17:14 +0000)
2008-03-11  Michael Natterer  <mitch@imendio.com>

* gdk/linux-fb/*: removed linux-fb backend files.

* acconfig.h
* config.h.win32.in
* docs/README.linux-fb
* gtk/Makefile.am: remove remaining traces of linux-fb.

* gtk/gtkwindow-decorate.c: same here. There is some code that
calls into linux-fb to set window move/resize callbacks. I put it
in #if 0 as a reminder because we did use decorated windows with
the DirectFB backend and it did work, so I don't really know why
this code is needed or how it could work with DirectFB back then.
The file does actually compile now if DECORATE_WINDOWS is defined,
but I didn't test with DirectFB to check if it does anything.

svn path=/trunk/; revision=19749

61 files changed:
ChangeLog
acconfig.h
config.h.win32.in
docs/README.linux-fb [deleted file]
gdk/linux-fb/Makefile.am [deleted file]
gdk/linux-fb/gdkcolor-fb.c [deleted file]
gdk/linux-fb/gdkcursor-fb.c [deleted file]
gdk/linux-fb/gdkdisplay-fb.c [deleted file]
gdk/linux-fb/gdkdnd-fb.c [deleted file]
gdk/linux-fb/gdkdrawable-fb2.c [deleted file]
gdk/linux-fb/gdkevents-fb.c [deleted file]
gdk/linux-fb/gdkfb.h [deleted file]
gdk/linux-fb/gdkfbmanager.c [deleted file]
gdk/linux-fb/gdkfbmanager.h [deleted file]
gdk/linux-fb/gdkfbswitch.c [deleted file]
gdk/linux-fb/gdkfont-fb.c [deleted file]
gdk/linux-fb/gdkgc-fb.c [deleted file]
gdk/linux-fb/gdkgeometry-fb.c [deleted file]
gdk/linux-fb/gdkglobals-fb.c [deleted file]
gdk/linux-fb/gdkim-fb.c [deleted file]
gdk/linux-fb/gdkimage-fb.c [deleted file]
gdk/linux-fb/gdkinput-none.c [deleted file]
gdk/linux-fb/gdkinput.c [deleted file]
gdk/linux-fb/gdkinputprivate.h [deleted file]
gdk/linux-fb/gdkkeyboard-fb.c [deleted file]
gdk/linux-fb/gdkmain-fb.c [deleted file]
gdk/linux-fb/gdkmouse-fb.c [deleted file]
gdk/linux-fb/gdkpango-fb.c [deleted file]
gdk/linux-fb/gdkpixmap-fb.c [deleted file]
gdk/linux-fb/gdkprivate-fb.h [deleted file]
gdk/linux-fb/gdkproperty-fb.c [deleted file]
gdk/linux-fb/gdkrender-fb.c [deleted file]
gdk/linux-fb/gdkscreen-fb.c [deleted file]
gdk/linux-fb/gdkselection-fb.c [deleted file]
gdk/linux-fb/gdkspawn-fb.c [deleted file]
gdk/linux-fb/gdkvisual-fb.c [deleted file]
gdk/linux-fb/gdkwindow-fb.c [deleted file]
gdk/linux-fb/mi.h [deleted file]
gdk/linux-fb/miarc.c [deleted file]
gdk/linux-fb/midash.c [deleted file]
gdk/linux-fb/mifillarc.c [deleted file]
gdk/linux-fb/mifillarc.h [deleted file]
gdk/linux-fb/mifpoly.h [deleted file]
gdk/linux-fb/mifpolycon.c [deleted file]
gdk/linux-fb/miline.h [deleted file]
gdk/linux-fb/mipoly.c [deleted file]
gdk/linux-fb/mipoly.h [deleted file]
gdk/linux-fb/mipolygen.c [deleted file]
gdk/linux-fb/mipolyutil.c [deleted file]
gdk/linux-fb/miscanfill.h [deleted file]
gdk/linux-fb/mispans.c [deleted file]
gdk/linux-fb/mispans.h [deleted file]
gdk/linux-fb/mistruct.h [deleted file]
gdk/linux-fb/mitypes.h [deleted file]
gdk/linux-fb/miwideline.c [deleted file]
gdk/linux-fb/miwideline.h [deleted file]
gdk/linux-fb/mizerclip.c [deleted file]
gdk/linux-fb/mizerline.c [deleted file]
gdk/linux-fb/x-cursors.xbm [deleted file]
gtk/Makefile.am
gtk/gtkwindow-decorate.c

index 701c508fe7eea4b772e1b4d14e343c402da0ffa2..3b58d34e9e3ecb5e790fb096d4c82ad80910721c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,20 @@
+2008-03-11  Michael Natterer  <mitch@imendio.com>
+
+       * gdk/linux-fb/*: removed linux-fb backend files.
+
+       * acconfig.h
+       * config.h.win32.in
+       * docs/README.linux-fb
+       * gtk/Makefile.am: remove remaining traces of linux-fb.
+
+       * gtk/gtkwindow-decorate.c: same here. There is some code that
+       calls into linux-fb to set window move/resize callbacks. I put it
+       in #if 0 as a reminder because we did use decorated windows with
+       the DirectFB backend and it did work, so I don't really know why
+       this code is needed or how it could work with DirectFB back then.
+       The file does actually compile now if DECORATE_WINDOWS is defined,
+       but I didn't test with DirectFB to check if it does anything.
+
 2008-03-11  Alberto Ruiz  <aruiz@gnome.org>
 
        * gtk/gtkcombobox.c (gtk_combo_box_size_allocate):
index 6dda772af1a94b83ac76e2e0446c697109143dbb..6aa859995d54b590b0402f00a1a1d9a71ae44a7b 100644 (file)
 /* Define to use XKB extension */
 #undef HAVE_XKB
 
-/* Define to use shadowfb in the linux-fb port */
-#undef ENABLE_SHADOW_FB
-
-/* Define to use a fb manager in the linux-fb port */
-#undef ENABLE_FB_MANAGER
-
 #undef XINPUT_NONE
 #undef XINPUT_GXI
 #undef XINPUT_XFREE
index 99c00b7343bd6f762b70e23d08bfc369361f70d5..0e39db0588ed43a6e26f9b5d95f4ce46761f4656 100644 (file)
 /* Define to use XKB extension */
 /* #undef HAVE_XKB */
 
-/* Define to use shadowfb in the linux-fb port */
-/* #undef ENABLE_SHADOW_FB */
-
-/* Define to use a fb manager in the linux-fb port */
-/* #undef ENABLE_FB_MANAGER */
-
 /* #undef XINPUT_NONE */
 /* #undef XINPUT_GXI */
 /* #undef XINPUT_XFREE */
diff --git a/docs/README.linux-fb b/docs/README.linux-fb
deleted file mode 100644 (file)
index ef11378..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-
-
-
-
-THIS FILE IS OBSOLETE - use docs/reference/gtk/framebuffer.sgml
-
-
-
-
-
-
-
-About GtkFB:
-------------
-The linux-fb port of Gtk+, also known as GtkFB is an implementation of
-gdk (and therefor gtk) that runs on the linux framebuffer. It runs in
-a single process that doesn't need X. It should run most Gtk+ programs
-without any changes to the source.
-
-Build requirements:
--------------------
-To run GtkFB programs you will need glib, pango and gtk from cvs
-HEAD. Make sure you update these at the same time, since changes to
-glib and pango often forces changes in gtk+. Pango optionally depends
-on libfribidi, but for normal GtkFB usage that can be ignored.
-
-You also need freetype 2, I recommend that you use freetype 2.0.1 or
-later, as there was some problems with freetype-config in 2.0.
-Make sure that you install freetype before pango, since pango also
-needs it.
-Freetype can be found at ftp://ftp.freetype.org
-
-Hardware requirements:
-----------------------
-You need a graphics card with an available framebuffer driver that can
-run in 8, 16, 24 or 32 bpp. I use the matroxfb driver, but i.e. vesafb
-should work too. You also need a supported mouse. Currently supported
-is ps2 mouse, ms serial mouse and fidmour touchscreen.
-
-Building and installing:
-------------------------
-First build and install glib and pango as usual, in that order.
-
-Then configure Gtk by running configure (or autogen.sh if running from
-cvs) with --with-gdktarget=linux-fb.
-
-Then compile as usual: make; make install
-
-Fonts:
-------
-Since GtkFB uses freetype 2 to render fonts it can render truetype and
-postscript type 1 antialiased fonts.
-
-At startup it scans some directories looking for fonts. By default
-it looks in $prefix/lib/ft2fonts, and if you want to change this you
-must add something like:
-
-[PangoFT2]
-FontPath = /usr/share/fonts/default/Type1:/usr/share/fonts/default/TrueType
-
-To your $prefix/etc/pango/pangorc or ~/.pangorc.
-
-You must also set up font aliases for the fonts Sans, Serif and Monotype.
-This is done by creating a $prefix/etc/pango/pangoft2.aliases or
-~/.pangoft2_aliases file. You can also set the name of this file using the
-key AliasFiles in the PangoFT2 section in pangorc.
-
-An example of a font alias file for the urw fontset is:
-sans normal normal normal normal "urw gothic l"
-serif normal normal normal normal "urw palladio l"
-monospace normal normal normal normal "nimbus mono l"
-
-And one using the Windows truetype fonts is:
-sans normal normal normal normal "arial"
-serif normal normal normal normal "times new roman"
-monospace normal normal normal normal "courier new"
-
-A more detailed example can be found in examples/pangoft2.aliases in the
-pango distribution.
-
-Running:
---------
-To run a program you should only need to start it, but there are some
-things that can cause problems, and some things that can be controlled
-by environment variables. Try testgtk distributed with gtk+ to test
-if things work.
-
-If you use a ps2 mouse, make sure that /dev/psaux is readable and
-writable.
-
-Make sure gpm is not running.
-
-If you don't specify anything GtkFB will start up in the current
-virtual console in the current resolution and bit-depth. This can be
-changed by specifying environment variables:
-
-GDK_VT:
- unset means open on the current VT.
- 0-9: open on the specified VT. Make sure you have read/write rights
-      there.
- new: Allocate a new VT after the last currently used one.
-
-GDK_DISPLAY_MODE:
- Specifies the name of a mode in /etc/fb.modes that you want to use.
-
-GDK_DISPLAY_DEPTH:
- Specify the desired bit depth of the framebuffer.
-GDK_DISPLAY_WIDTH:
- Specify the desired width of the framebuffer.
-GDK_DISPLAY_HEIGHT:
- Specify the desired height of the framebuffer.
-
-GDK_DISPLAY:
- Specify the framebuffer device to use. Default is /dev/fb0
-
-GDK_MOUSE_TYPE:
- Specify mouse type. Currently supported is:
-  ps2 - PS/2 mouse
-  imps2 - PS/2 intellimouse (wheelmouse)
-  ms - Microsoft serial mouse
-  fidmour - touch screen
- Default is ps2.
-
-GDK_KEYBOARD_TYPE:
- Specify keyboard type. Currently supported is
-  xlate - normal tty mode keyboard.
-    Quite limited, cannot detect key up/key down events. Doesn't
-    handle ctrl/alt/shift for all keys. This is the default driver,
-    but should not be used in "production" use.
-  raw - read from the tty in RAW mode.
-    Sets the keyboard in RAW mode and handles all the keycodes. This
-    gives correct handling of modifiers and key up/down events. You
-    must be root to use this. If you use this for development or
-    debugging it is recommended to enable magic sysrq handling in the
-    kernel. Then you can use ALT-SysRQ-r to turn the keyboard back to
-    normal mode.
- Default is xlate.
-
-HACKING:
---------
-
-Pressing Ctrl-Alt-Return repaints the whole screen.
-Unfortunately this cannot be pressed when using the xlate keyboard
-driver, so instead you can use shift-F1 instead when using this
-driver.
-
-Pressing Ctrl-Alt-BackSpace kills the GtkFB program. (Can't be pressed
-in the xlate driver.
-
-More to be written.
-
-   - Alexander Larsson <alexl@redhat.com>
-     2000/12/06
-
-   
diff --git a/gdk/linux-fb/Makefile.am b/gdk/linux-fb/Makefile.am
deleted file mode 100644 (file)
index 3a019a9..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-## Process this file with automake to produce Makefile.in
-include $(top_srcdir)/Makefile.decl
-
-bin_PROGRAMS =
-
-if ENABLE_FB_MANAGER
-bin_PROGRAMS += gdkfbmanager gdkfbswitch
-endif
-
-libgdkincludedir = $(includedir)/gtk-2.0/gdk
-libgdkfbincludedir = $(includedir)/gtk-2.0/gdk/linux-fb
-
-INCLUDES = \
-       -DG_LOG_DOMAIN=\"Gdk\"  \
-       -DGDK_DATA_PREFIX=\"$(prefix)\" \
-       -I$(top_srcdir)         \
-       -I$(top_srcdir)/gdk     \
-       -I$(top_builddir)/gdk   \
-       -DGDK_PIXBUF_DISABLE_DEPRECATED \
-       $(GDK_DEP_CFLAGS)       \
-       $(GTK_DEBUG_FLAGS)
-
-noinst_LTLIBRARIES = libgdk-linux-fb.la
-
-libgdkinclude_HEADERS= \
-       gdkfb.h
-
-libgdk_linux_fb_la_SOURCES =    \
-       gdkcolor-fb.c           \
-       gdkcursor-fb.c          \
-       gdkdisplay-fb.c         \
-       gdkdnd-fb.c             \
-       gdkdrawable-fb2.c       \
-       gdkevents-fb.c          \
-       gdkfbmanager.h          \
-       gdkfont-fb.c            \
-       gdkgc-fb.c              \
-       gdkgeometry-fb.c        \
-       gdkglobals-fb.c         \
-       gdkim-fb.c              \
-       gdkimage-fb.c           \
-       gdkinput.c              \
-       gdkinputprivate.h       \
-       gdkkeyboard-fb.c        \
-       gdkmain-fb.c            \
-       gdkmouse-fb.c           \
-       gdkpango-fb.c           \
-       gdkpixmap-fb.c          \
-       gdkprivate-fb.h         \
-       gdkproperty-fb.c        \
-       gdkrender-fb.c          \
-       gdkscreen-fb.c          \
-       gdkselection-fb.c       \
-       gdkspawn-fb.c           \
-       gdkvisual-fb.c          \
-       gdkwindow-fb.c          \
-       mi.h                    \
-       miarc.c                 \
-       midash.c                \
-       mifillarc.c             \
-       mifillarc.h             \
-       mifpoly.h               \
-       mifpolycon.c            \
-       miline.h                \
-       mipoly.c                \
-       mipoly.h                \
-       mipolygen.c             \
-       mipolyutil.c            \
-       miscanfill.h            \
-       mispans.c               \
-       mispans.h               \
-       mistruct.h              \
-       mitypes.h               \
-       miwideline.c            \
-       miwideline.h            \
-       mizerclip.c             \
-       mizerline.c
-
-gdkfbmanager_sources = gdkfbmanager.c 
-gdkfbmanager_LDFLAGS = $(GLIB_LIBS)
-gdkfbswitch_sources = gdkfbswitch.c
-gdkfbswitch_LDFLAGS = $(GLIB_LIBS)
-
-EXTRA_DIST += x-cursors.xbm
diff --git a/gdk/linux-fb/gdkcolor-fb.c b/gdk/linux-fb/gdkcolor-fb.c
deleted file mode 100644 (file)
index c2bbb10..0000000
+++ /dev/null
@@ -1,866 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <time.h>
-#include <sys/ioctl.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "gdkcolor.h"
-#include "gdkprivate-fb.h"
-
-#define GDK_COLORMAP_PRIVATE_DATA(cmap) ((GdkColormapPrivateFB *) GDK_COLORMAP (cmap)->windowing_data)
-
-static gint  gdk_colormap_match_color (GdkColormap *cmap,
-                                      GdkColor    *color,
-                                      const gchar *available);
-static void  gdk_fb_color_round_to_hw (GdkColor *color);
-
-static gpointer parent_class;
-
-static void
-gdk_colormap_finalize (GObject *object)
-{
-  GdkColormap *colormap = GDK_COLORMAP (object);
-  GdkColormapPrivateFB *private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  if (private->hash)
-    g_hash_table_destroy (private->hash);
-  
-  g_free (private->info);
-  g_free (colormap->colors);
-  g_free (private);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_colormap_init (GdkColormap *colormap)
-{
-  GdkColormapPrivateFB *private;
-
-  private = g_new (GdkColormapPrivateFB, 1);
-
-  colormap->windowing_data = private;
-  
-  colormap->size = 0;
-  colormap->colors = NULL;
-}
-
-static void
-gdk_colormap_class_init (GdkColormapClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_colormap_finalize;
-}
-
-GType
-gdk_colormap_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkColormapClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_colormap_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkColormap),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_colormap_init,
-      };
-      
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkColormap",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-GdkColormap *
-gdk_colormap_new (GdkVisual *visual,
-                 gint       private_cmap)
-{
-  GdkColormap *colormap;
-  GdkColormap *system;
-  GdkColormapPrivateFB *private;
-  GdkFBDisplay *fbd;
-  int i;
-
-  g_return_val_if_fail (visual != NULL, NULL);
-
-  colormap = g_object_new (gdk_colormap_get_type (), NULL);
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  colormap->visual = visual;
-  fbd = gdk_display;
-
-  private->hash = NULL;
-  
-  colormap->size = visual->colormap_size;
-  colormap->colors = NULL;
-
-  switch (visual->type)
-    {
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_PSEUDO_COLOR:
-      private->info = g_new0 (GdkColorInfo, colormap->size);
-      colormap->colors = g_new (GdkColor, colormap->size);
-      
-      private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                       (GEqualFunc) gdk_color_equal);
-
-      system = gdk_colormap_get_system ();
-      memcpy (colormap->colors, system->colors, colormap->size * sizeof (GdkColor));
-      
-      if (private_cmap)
-       {
-         guint16 red[256], green[256], blue[256];
-         struct fb_cmap fbc = {0, 256};
-
-         fbc.red = red;
-         fbc.green = green;
-         fbc.blue = blue;
-
-         if (ioctl (fbd->fb_fd, FBIOGETCMAP, &fbc))
-           g_error("ioctl(FBIOGETCMAP) failed");
-
-         for (i = 0; i < colormap->size; i++)
-           {
-             colormap->colors[i].pixel = i;
-             colormap->colors[i].red = red[i];
-             colormap->colors[i].green = green[i];
-             colormap->colors[i].blue = blue[i];
-           }
-
-         gdk_colormap_change (colormap, colormap->size);
-       }
-      break;
-
-    case GDK_VISUAL_DIRECT_COLOR:
-      g_warning ("gdk_colormap_new () on a direct color visual not implemented");
-#if 0
-      colormap->colors = g_new (GdkColor, colormap->size);
-
-      size = 1 << visual->red_prec;
-      for (i = 0; i < size; i++)
-       colormap->colors[i].red = i * 65535 / (size - 1);
-
-      size = 1 << visual->green_prec;
-      for (i = 0; i < size; i++)
-       colormap->colors[i].green = i * 65535 / (size - 1);
-
-      size = 1 << visual->blue_prec;
-      for (i = 0; i < size; i++)
-       colormap->colors[i].blue = i * 65535 / (size - 1);
-
-      gdk_colormap_change (colormap, colormap->size);
-#endif
-      break;
-
-    default:
-      g_assert_not_reached ();
-
-    case GDK_VISUAL_TRUE_COLOR:
-      break;
-    }
-
-  return colormap;
-}
-
-GdkColormap*
-gdk_screen_get_system_colormap (GdkScreen *screen)
-{
-  static GdkColormap *colormap = NULL;
-
-  if (!colormap)
-    {
-      GdkColormapPrivateFB *private;
-      GdkVisual *visual = gdk_visual_get_system ();
-      int i, r, g, b;
-      
-      colormap = g_object_new (gdk_colormap_get_type (), NULL);
-      private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-      colormap->visual = visual;
-      private->hash = NULL;
-      
-      colormap->size = visual->colormap_size;
-      colormap->colors = NULL;
-      
-      switch (visual->type)
-       {
-       case GDK_VISUAL_STATIC_GRAY:
-       case GDK_VISUAL_STATIC_COLOR:
-       case GDK_VISUAL_GRAYSCALE:
-       case GDK_VISUAL_PSEUDO_COLOR:
-         private->info = g_new0 (GdkColorInfo, colormap->size);
-         colormap->colors = g_new (GdkColor, colormap->size);
-         
-         private->hash = g_hash_table_new ((GHashFunc) gdk_color_hash,
-                                           (GEqualFunc) gdk_color_equal);
-         switch(visual->type)
-           {
-           case GDK_VISUAL_GRAYSCALE:
-             for(i = 0; i < 256; i++) {
-               colormap->colors[i].red = 
-                 colormap->colors[i].green =
-                 colormap->colors[i].blue = i << 8;
-               gdk_fb_color_round_to_hw (&colormap->colors[i]);
-             }
-             i--;
-             colormap->colors[i].red = 
-               colormap->colors[i].green =
-               colormap->colors[i].blue = 65535; /* Make it a true white */
-             gdk_fb_color_round_to_hw (&colormap->colors[i]);
-             break;
-           case GDK_VISUAL_PSEUDO_COLOR:
-             /* Color cube stolen from gdkrgb upon advice from Owen */
-             for(i = r = 0; r < 6; r++)
-               for(g = 0; g < 6; g++)
-                 for(b = 0; b < 6; b++)
-                   {
-                     colormap->colors[i].red = r * 65535 / 5;
-                     colormap->colors[i].green = g * 65535 / 5;
-                     colormap->colors[i].blue = b * 65535 / 5;
-                     gdk_fb_color_round_to_hw (&colormap->colors[i]);
-                     i++;
-                   }
-             g_assert (i == 216);
-             /* Fill in remaining space with grays */
-             for(i = 216; i < 256; i++)
-               {
-                 colormap->colors[i].red = 
-                   colormap->colors[i].green =
-                   colormap->colors[i].blue = (i - 216) * 40;
-                 gdk_fb_color_round_to_hw (&colormap->colors[i]);
-               }
-             /* Real white */
-             colormap->colors[255].red = 
-                 colormap->colors[255].green =
-                 colormap->colors[255].blue = 65535;
-             gdk_fb_color_round_to_hw (&colormap->colors[255]);
-
-             break;
-           default:
-             break;
-           }
-         break;
-       case GDK_VISUAL_DIRECT_COLOR:
-         g_warning ("gdk_colormap_get_system() on a direct color visual is not implemented");
-         break;
-       default:
-         g_assert_not_reached ();
-       case GDK_VISUAL_TRUE_COLOR:
-         break;
-       }
-      
-      /* Lock all colors for the system colormap
-       * on pseudocolor visuals. The AA text rendering
-       * takes to many colors otherwise.
-       */
-      if ((visual->type == GDK_VISUAL_GRAYSCALE) ||
-         (visual->type == GDK_VISUAL_PSEUDO_COLOR))
-       {
-         for(i = 0; i < 256; i++)
-           {
-             colormap->colors[i].pixel = i;
-             private->info[i].ref_count = 1;
-             g_hash_table_insert (private->hash,
-                                  &colormap->colors[i],
-                                  &colormap->colors[i]);
-           }
-       }
-      gdk_colormap_change (colormap, colormap->size);
-    }
-
-  return colormap;
-}
-
-gint
-gdk_colormap_get_system_size (void)
-{
-  return 1 << (gdk_display->modeinfo.bits_per_pixel);
-}
-
-void
-gdk_colormap_change (GdkColormap *colormap,
-                    gint         ncolors)
-{
-  guint16 red[256], green[256], blue[256];
-  struct fb_cmap fbc = {0,256};
-  GdkColormapPrivateFB *private;
-  int i;
-
-  g_return_if_fail (colormap != NULL);
-
-  fbc.red = red;
-  fbc.green = green;
-  fbc.blue = blue;
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-  switch (colormap->visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-      for(i = 0; i < ncolors; i++)
-       {
-         red[i] = green[i] = blue[i] =
-           (colormap->colors[i].red +
-            colormap->colors[i].green +
-            colormap->colors[i].blue)/3;
-       }
-      ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
-      break;
-
-    case GDK_VISUAL_PSEUDO_COLOR:
-      for (i = 0; i < ncolors; i++)
-       {
-         red[i] = colormap->colors[i].red;
-         green[i] = colormap->colors[i].green;
-         blue[i] = colormap->colors[i].blue;
-       }
-      ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
-      break;
-
-    default:
-      break;
-    }
-}
-
-void
-gdk_colormap_free_colors (GdkColormap *colormap,
-                         GdkColor    *colors,
-                         gint         ncolors)
-{
-  GdkColormapPrivateFB *private;
-  gint i;
-
-  g_return_if_fail (colormap != NULL);
-  g_return_if_fail (colors != NULL);
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  if ((colormap->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (colormap->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-
-  for (i = 0; i < ncolors; i++)
-    {
-      gulong pixel = colors[i].pixel;
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colormap->colors[pixel]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-}
-
-/********************
- * Color allocation *
- ********************/
-
-static void
-gdk_fb_color_round_to_hw (GdkColor *color)
-{
-  guint rmask, gmask, bmask, len;
-
-  len = gdk_display->modeinfo.red.length;
-  rmask = ((1 << len) - 1) << (16-len);
-  len = gdk_display->modeinfo.green.length;
-  gmask = ((1 << len) - 1) << (16-len);
-  len = gdk_display->modeinfo.blue.length;
-  bmask = ((1 << len) - 1) << (16-len);
-  
-  color->red &=rmask;
-  color->green &=gmask;
-  color->blue &=bmask;
-}
-
-/* Try to allocate a single color using XAllocColor. If it succeeds,
- * cache the result in our colormap, and store in ret.
- */
-static gboolean 
-gdk_colormap_alloc1 (GdkColormap *colormap,
-                    GdkColor    *color,
-                    GdkColor    *ret)
-{
-  GdkColormapPrivateFB *private;
-  int i;
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  if (colormap->visual->type != GDK_VISUAL_GRAYSCALE
-      && colormap->visual->type != GDK_VISUAL_PSEUDO_COLOR)
-    return FALSE;
-
-  *ret = *color;
-  
-  gdk_fb_color_round_to_hw (ret);
-
-  for (i = 0; i<colormap->size; i++)
-    {
-      if (!(private->info[i].flags & GDK_COLOR_WRITEABLE) &&
-         (ret->red == colormap->colors[i].red) &&
-         (ret->green == colormap->colors[i].green) &&
-         (ret->blue == colormap->colors[i].blue))
-       {
-         ret->pixel = i;
-         colormap->colors[i].pixel = i;
-         if (private->info[i].ref_count == 0)
-           g_hash_table_insert (private->hash,
-                                &colormap->colors[ret->pixel],
-                                &colormap->colors[ret->pixel]);
-         private->info[i].ref_count++;
-         return TRUE;
-       }
-    }
-
-  for (i = 0; i<colormap->size; i++)
-    {
-      if (private->info[i].ref_count==0)
-       {
-         guint16 red = color->red, green = color->green, blue = color->blue;
-         struct fb_cmap fbc;
-         
-         fbc.len = 1;
-         fbc.start = i;
-         fbc.red = &red;
-         fbc.green = &green;
-         fbc.blue = &blue;
-
-         ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
-
-         ret->pixel = i;
-         colormap->colors[ret->pixel] = *ret;
-         private->info[ret->pixel].ref_count = 1;
-         g_hash_table_insert (private->hash,
-                              &colormap->colors[ret->pixel],
-                              &colormap->colors[ret->pixel]);
-         return TRUE;
-       }
-    }
-      
-  return FALSE;
-}
-
-static gint
-gdk_colormap_alloc_colors_shared (GdkColormap *colormap,
-                                 GdkColor    *colors,
-                                 gint         ncolors,
-                                 gboolean     writeable,
-                                 gboolean     best_match,
-                                 gboolean    *success)
-{
-  GdkColormapPrivateFB *private;
-  gint i, index;
-  gint nremaining = 0;
-  gint nfailed = 0;
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-  index = -1;
-
-  for (i = 0; i < ncolors; i++)
-    {
-      if (!success[i])
-       {
-         if (gdk_colormap_alloc1 (colormap, &colors[i], &colors[i]))
-           success[i] = TRUE;
-         else
-           nremaining++;
-       }
-    }
-
-
-  if (nremaining > 0 && best_match)
-    {
-      gchar *available = g_new (gchar, colormap->size);
-
-      for (i = 0; i < colormap->size; i++)
-       available[i] = ((private->info[i].ref_count == 0) ||
-                       !(private->info[i].flags & GDK_COLOR_WRITEABLE));
-      
-      while (nremaining > 0)
-       {
-         for (i = 0; i < ncolors; i++)
-           {
-             if (!success[i])
-               {
-                 index = gdk_colormap_match_color (colormap, &colors[i], available);
-                 if (index != -1)
-                   {
-                     if (private->info[index].ref_count)
-                       {
-                         private->info[index].ref_count++;
-                         colors[i] = colormap->colors[index];
-                         success[i] = TRUE;
-                         nremaining--;
-                       }
-                     else
-                       {
-                         if (gdk_colormap_alloc1 (colormap, 
-                                                  &colormap->colors[index],
-                                                  &colors[i]))
-                           {
-                             success[i] = TRUE;
-                             nremaining--;
-                             break;
-                           }
-                         else
-                           {
-                             available[index] = FALSE;
-                           }
-                       }
-                   }
-                 else
-                   {
-                     nfailed++;
-                     nremaining--;
-                     success[i] = 2; /* flag as permanent failure */
-                   }
-               }
-           }
-       }
-      g_free (available);
-    }
-
-  /* Change back the values we flagged as permanent failures */
-  if (nfailed > 0)
-    {
-      for (i = 0; i < ncolors; i++)
-       if (success[i] == 2)
-         success[i] = FALSE;
-      nremaining = nfailed;
-    }
-  
-  return (ncolors - nremaining);
-}
-
-static gint
-gdk_colormap_alloc_colors_pseudocolor (GdkColormap *colormap,
-                                      GdkColor    *colors,
-                                      gint         ncolors,
-                                      gboolean     writeable,
-                                      gboolean     best_match,
-                                      gboolean    *success)
-{
-  GdkColormapPrivateFB *private;
-  GdkColor *lookup_color;
-  gint i;
-  gint nremaining = 0;
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  /* Check for an exact match among previously allocated colors */
-
-  for (i = 0; i < ncolors; i++)
-    {
-      if (!success[i])
-       {
-         lookup_color = g_hash_table_lookup (private->hash, &colors[i]);
-         if (lookup_color)
-           {
-             private->info[lookup_color->pixel].ref_count++;
-             colors[i].pixel = lookup_color->pixel;
-             success[i] = TRUE;
-           }
-         else
-           nremaining++;
-       }
-    }
-
-  /* If that failed, we try to allocate a new color, or approxmiate
-   * with what we can get if best_match is TRUE.
-   */
-  if (nremaining > 0)
-    return gdk_colormap_alloc_colors_shared (colormap, colors, ncolors, writeable, best_match, success);
-  else
-    return 0;
-}
-
-gint
-gdk_colormap_alloc_colors (GdkColormap *colormap,
-                          GdkColor    *colors,
-                          gint         ncolors,
-                          gboolean     writeable,
-                          gboolean     best_match,
-                          gboolean    *success)
-{
-  GdkColormapPrivateFB *private;
-  GdkVisual *visual;
-  gint i;
-  gint nremaining = 0;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (colors != NULL, FALSE);
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  for (i = 0; i < ncolors; i++)
-    success[i] = FALSE;
-
-  visual = colormap->visual;
-  switch (visual->type)
-    {
-    case GDK_VISUAL_PSEUDO_COLOR:
-    case GDK_VISUAL_GRAYSCALE:
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_STATIC_COLOR:
-      return gdk_colormap_alloc_colors_pseudocolor (colormap, colors, ncolors,
-                                                   writeable, best_match, success);
-      break;
-
-    case GDK_VISUAL_DIRECT_COLOR:
-    case GDK_VISUAL_TRUE_COLOR:
-      for (i = 0; i < ncolors; i++)
-       {
-         colors[i].pixel = (((colors[i].red >> (16 - visual->red_prec)) << visual->red_shift) +
-                            ((colors[i].green >> (16 - visual->green_prec)) << visual->green_shift) +
-                            ((colors[i].blue >> (16 - visual->blue_prec)) << visual->blue_shift));
-         success[i] = TRUE;
-       }
-      break;
-    }
-  return nremaining;
-}
-
-gboolean
-gdk_color_change (GdkColormap *colormap,
-                 GdkColor    *color)
-{
-  GdkColormapPrivateFB *private;
-  struct fb_cmap fbc = {0, 1};
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-  g_return_val_if_fail (color != NULL, FALSE);
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-
-  switch(colormap->visual->type)
-    {
-    case GDK_VISUAL_GRAYSCALE:
-      color->red = color->green = color->blue = (color->red + color->green + color->blue)/3;
-
-      /* Fall through */
-    case GDK_VISUAL_PSEUDO_COLOR:
-      colormap->colors[color->pixel] = *color;
-      
-      fbc.start = color->pixel;
-      fbc.red = &color->red;
-      fbc.green = &color->green;
-      fbc.blue = &color->blue;
-      ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
-      break;
-
-    default:
-      break;
-    }
-
-  return TRUE;
-}
-
-static gint
-gdk_colormap_match_color (GdkColormap *cmap,
-                         GdkColor    *color,
-                         const gchar *available)
-{
-  GdkColor *colors;
-  guint sum, max;
-  gint rdiff, gdiff, bdiff;
-  gint i, index;
-
-  g_return_val_if_fail (cmap != NULL, 0);
-  g_return_val_if_fail (color != NULL, 0);
-
-  colors = cmap->colors;
-  max = 3 * (65536);
-  index = -1;
-
-  for (i = 0; i < cmap->size; i++)
-    {
-      if ((!available) || (available && available[i]))
-       {
-         rdiff = (color->red - colors[i].red);
-         gdiff = (color->green - colors[i].green);
-         bdiff = (color->blue - colors[i].blue);
-
-         sum = ABS (rdiff) + ABS (gdiff) + ABS (bdiff);
-
-         if (sum < max)
-           {
-             index = i;
-             max = sum;
-           }
-       }
-    }
-
-  return index;
-}
-
-gboolean
-gdk_colors_alloc (GdkColormap  *colormap,
-                 gboolean       contiguous,
-                 gulong        *planes,
-                 gint           nplanes,
-                 gulong        *pixels,
-                 gint           npixels)
-{
-  GdkColormapPrivateFB *private;
-  gint found, i, col;
-
-  g_return_val_if_fail (colormap != NULL, FALSE);
-
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-  
-  if (nplanes > 0)
-    return FALSE;
-
-  found = 0;
-  for (i = 1; i < colormap->size; i++)
-    {
-      if (private->info[i].ref_count == 0)
-       {
-         found++;
-         if (found >= npixels)
-           break;
-       }
-    }
-
-  if (found < npixels)
-    return FALSE;
-
-  col = 0;
-  for (i = 1; i < colormap->size; i++)
-    {
-      if (private->info[i].ref_count == 0)
-       {
-         pixels[col++] = i;
-         private->info[i].ref_count++;
-         private->info[i].flags |= GDK_COLOR_WRITEABLE;
-         if (col == npixels)
-           return TRUE;
-       }
-    }
-
-  g_assert_not_reached ();
-  return FALSE;
-}
-
-void
-gdk_colors_free        (GdkColormap    *colormap,
-                gulong         *pixels,
-                gint            npixels,
-                gulong          planes)
-{
-  GdkColormapPrivateFB *private;
-  gint i, pixel;
-
-  g_return_if_fail (colormap != NULL);
-
-  if ((colormap->visual->type != GDK_VISUAL_PSEUDO_COLOR) &&
-      (colormap->visual->type != GDK_VISUAL_GRAYSCALE))
-    return;
-  
-  private = GDK_COLORMAP_PRIVATE_DATA (colormap);
-  
-  for (i = 0; i < npixels; i++)
-    {
-      pixel = pixels[i];
-      
-      if (private->info[pixel].ref_count)
-       {
-         private->info[pixel].ref_count--;
-
-         if (private->info[pixel].ref_count == 0)
-           {
-             if (!(private->info[pixel].flags & GDK_COLOR_WRITEABLE))
-               g_hash_table_remove (private->hash, &colormap->colors[pixel]);
-             private->info[pixel].flags = 0;
-           }
-       }
-    }
-}
-
-
-void
-gdk_colormap_query_color (GdkColormap *colormap,
-                         gulong       pixel,
-                         GdkColor    *result)
-{
-  GdkVisual *visual;
-
-  g_return_if_fail (GDK_IS_COLORMAP (colormap));
-  
-  visual = gdk_colormap_get_visual (colormap);
-
-  switch (visual->type)
-    {
-    case GDK_VISUAL_DIRECT_COLOR:
-    case GDK_VISUAL_TRUE_COLOR:
-      result->red = 65535. * (gdouble) ((pixel & visual->red_mask) >> visual->red_shift) / ((1 << visual->red_prec) - 1);
-      result->green = 65535. * (gdouble) ((pixel & visual->green_mask) >> visual->green_shift) / ((1 << visual->green_prec) - 1);
-      result->blue = 65535. * (gdouble) ((pixel & visual->blue_mask) >> visual->blue_shift) / ((1 << visual->blue_prec) - 1);
-      break;
-    case GDK_VISUAL_STATIC_GRAY:
-    case GDK_VISUAL_GRAYSCALE:
-      result->red = result->green = result->blue = 65535. * (double)pixel/((1<<visual->depth) - 1);
-      break;
-    case GDK_VISUAL_PSEUDO_COLOR:
-      result->red = colormap->colors[pixel].red;
-      result->green = colormap->colors[pixel].green;
-      result->blue = colormap->colors[pixel].blue;
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-    }
-}
-
-GdkScreen*
-gdk_colormap_get_screen (GdkColormap *cmap)
-{
-  g_return_val_if_fail (cmap != NULL, NULL);
-
-  return gdk_screen_get_default ();
-}
diff --git a/gdk/linux-fb/gdkcursor-fb.c b/gdk/linux-fb/gdkcursor-fb.c
deleted file mode 100644 (file)
index 737abaf..0000000
+++ /dev/null
@@ -1,538 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdkfb.h"
-#include "gdkprivate-fb.h"
-#include "gdkcursor.h"
-
-#include "x-cursors.xbm"
-
-static struct {
-  const guchar *bits;
-  int width, height, hotx, hoty;
-  GdkCursor *cursor;
-} stock_cursors[] = {
-{X_cursor_bits, X_cursor_width, X_cursor_height, X_cursor_x_hot, X_cursor_y_hot},
-{X_cursor_mask_bits, X_cursor_mask_width, X_cursor_mask_height, X_cursor_mask_x_hot, X_cursor_mask_y_hot},
-{arrow_bits, arrow_width, arrow_height, arrow_x_hot, arrow_y_hot},
-{arrow_mask_bits, arrow_mask_width, arrow_mask_height, arrow_mask_x_hot, arrow_mask_y_hot},
-{based_arrow_down_bits, based_arrow_down_width, based_arrow_down_height, based_arrow_down_x_hot, based_arrow_down_y_hot},
-{based_arrow_down_mask_bits, based_arrow_down_mask_width, based_arrow_down_mask_height, based_arrow_down_mask_x_hot, based_arrow_down_mask_y_hot},
-{based_arrow_up_bits, based_arrow_up_width, based_arrow_up_height, based_arrow_up_x_hot, based_arrow_up_y_hot},
-{based_arrow_up_mask_bits, based_arrow_up_mask_width, based_arrow_up_mask_height, based_arrow_up_mask_x_hot, based_arrow_up_mask_y_hot},
-{boat_bits, boat_width, boat_height, boat_x_hot, boat_y_hot},
-{boat_mask_bits, boat_mask_width, boat_mask_height, boat_mask_x_hot, boat_mask_y_hot},
-{bogosity_bits, bogosity_width, bogosity_height, bogosity_x_hot, bogosity_y_hot},
-{bogosity_mask_bits, bogosity_mask_width, bogosity_mask_height, bogosity_mask_x_hot, bogosity_mask_y_hot},
-{bottom_left_corner_bits, bottom_left_corner_width, bottom_left_corner_height, bottom_left_corner_x_hot, bottom_left_corner_y_hot},
-{bottom_left_corner_mask_bits, bottom_left_corner_mask_width, bottom_left_corner_mask_height, bottom_left_corner_mask_x_hot, bottom_left_corner_mask_y_hot},
-{bottom_right_corner_bits, bottom_right_corner_width, bottom_right_corner_height, bottom_right_corner_x_hot, bottom_right_corner_y_hot},
-{bottom_right_corner_mask_bits, bottom_right_corner_mask_width, bottom_right_corner_mask_height, bottom_right_corner_mask_x_hot, bottom_right_corner_mask_y_hot},
-{bottom_side_bits, bottom_side_width, bottom_side_height, bottom_side_x_hot, bottom_side_y_hot},
-{bottom_side_mask_bits, bottom_side_mask_width, bottom_side_mask_height, bottom_side_mask_x_hot, bottom_side_mask_y_hot},
-{bottom_tee_bits, bottom_tee_width, bottom_tee_height, bottom_tee_x_hot, bottom_tee_y_hot},
-{bottom_tee_mask_bits, bottom_tee_mask_width, bottom_tee_mask_height, bottom_tee_mask_x_hot, bottom_tee_mask_y_hot},
-{box_spiral_bits, box_spiral_width, box_spiral_height, box_spiral_x_hot, box_spiral_y_hot},
-{box_spiral_mask_bits, box_spiral_mask_width, box_spiral_mask_height, box_spiral_mask_x_hot, box_spiral_mask_y_hot},
-{center_ptr_bits, center_ptr_width, center_ptr_height, center_ptr_x_hot, center_ptr_y_hot},
-{center_ptr_mask_bits, center_ptr_mask_width, center_ptr_mask_height, center_ptr_mask_x_hot, center_ptr_mask_y_hot},
-{circle_bits, circle_width, circle_height, circle_x_hot, circle_y_hot},
-{circle_mask_bits, circle_mask_width, circle_mask_height, circle_mask_x_hot, circle_mask_y_hot},
-{clock_bits, clock_width, clock_height, clock_x_hot, clock_y_hot},
-{clock_mask_bits, clock_mask_width, clock_mask_height, clock_mask_x_hot, clock_mask_y_hot},
-{coffee_mug_bits, coffee_mug_width, coffee_mug_height, coffee_mug_x_hot, coffee_mug_y_hot},
-{coffee_mug_mask_bits, coffee_mug_mask_width, coffee_mug_mask_height, coffee_mug_mask_x_hot, coffee_mug_mask_y_hot},
-{cross_bits, cross_width, cross_height, cross_x_hot, cross_y_hot},
-{cross_mask_bits, cross_mask_width, cross_mask_height, cross_mask_x_hot, cross_mask_y_hot},
-{cross_reverse_bits, cross_reverse_width, cross_reverse_height, cross_reverse_x_hot, cross_reverse_y_hot},
-{cross_reverse_mask_bits, cross_reverse_mask_width, cross_reverse_mask_height, cross_reverse_mask_x_hot, cross_reverse_mask_y_hot},
-{crosshair_bits, crosshair_width, crosshair_height, crosshair_x_hot, crosshair_y_hot},
-{crosshair_mask_bits, crosshair_mask_width, crosshair_mask_height, crosshair_mask_x_hot, crosshair_mask_y_hot},
-{diamond_cross_bits, diamond_cross_width, diamond_cross_height, diamond_cross_x_hot, diamond_cross_y_hot},
-{diamond_cross_mask_bits, diamond_cross_mask_width, diamond_cross_mask_height, diamond_cross_mask_x_hot, diamond_cross_mask_y_hot},
-{dot_bits, dot_width, dot_height, dot_x_hot, dot_y_hot},
-{dot_mask_bits, dot_mask_width, dot_mask_height, dot_mask_x_hot, dot_mask_y_hot},
-{dotbox_bits, dotbox_width, dotbox_height, dotbox_x_hot, dotbox_y_hot},
-{dotbox_mask_bits, dotbox_mask_width, dotbox_mask_height, dotbox_mask_x_hot, dotbox_mask_y_hot},
-{double_arrow_bits, double_arrow_width, double_arrow_height, double_arrow_x_hot, double_arrow_y_hot},
-{double_arrow_mask_bits, double_arrow_mask_width, double_arrow_mask_height, double_arrow_mask_x_hot, double_arrow_mask_y_hot},
-{draft_large_bits, draft_large_width, draft_large_height, draft_large_x_hot, draft_large_y_hot},
-{draft_large_mask_bits, draft_large_mask_width, draft_large_mask_height, draft_large_mask_x_hot, draft_large_mask_y_hot},
-{draft_small_bits, draft_small_width, draft_small_height, draft_small_x_hot, draft_small_y_hot},
-{draft_small_mask_bits, draft_small_mask_width, draft_small_mask_height, draft_small_mask_x_hot, draft_small_mask_y_hot},
-{draped_box_bits, draped_box_width, draped_box_height, draped_box_x_hot, draped_box_y_hot},
-{draped_box_mask_bits, draped_box_mask_width, draped_box_mask_height, draped_box_mask_x_hot, draped_box_mask_y_hot},
-{exchange_bits, exchange_width, exchange_height, exchange_x_hot, exchange_y_hot},
-{exchange_mask_bits, exchange_mask_width, exchange_mask_height, exchange_mask_x_hot, exchange_mask_y_hot},
-{fleur_bits, fleur_width, fleur_height, fleur_x_hot, fleur_y_hot},
-{fleur_mask_bits, fleur_mask_width, fleur_mask_height, fleur_mask_x_hot, fleur_mask_y_hot},
-{gobbler_bits, gobbler_width, gobbler_height, gobbler_x_hot, gobbler_y_hot},
-{gobbler_mask_bits, gobbler_mask_width, gobbler_mask_height, gobbler_mask_x_hot, gobbler_mask_y_hot},
-{gumby_bits, gumby_width, gumby_height, gumby_x_hot, gumby_y_hot},
-{gumby_mask_bits, gumby_mask_width, gumby_mask_height, gumby_mask_x_hot, gumby_mask_y_hot},
-{hand1_bits, hand1_width, hand1_height, hand1_x_hot, hand1_y_hot},
-{hand1_mask_bits, hand1_mask_width, hand1_mask_height, hand1_mask_x_hot, hand1_mask_y_hot},
-{hand2_bits, hand2_width, hand2_height, hand2_x_hot, hand2_y_hot},
-{hand2_mask_bits, hand2_mask_width, hand2_mask_height, hand2_mask_x_hot, hand2_mask_y_hot},
-{heart_bits, heart_width, heart_height, heart_x_hot, heart_y_hot},
-{heart_mask_bits, heart_mask_width, heart_mask_height, heart_mask_x_hot, heart_mask_y_hot},
-{icon_bits, icon_width, icon_height, icon_x_hot, icon_y_hot},
-{icon_mask_bits, icon_mask_width, icon_mask_height, icon_mask_x_hot, icon_mask_y_hot},
-{iron_cross_bits, iron_cross_width, iron_cross_height, iron_cross_x_hot, iron_cross_y_hot},
-{iron_cross_mask_bits, iron_cross_mask_width, iron_cross_mask_height, iron_cross_mask_x_hot, iron_cross_mask_y_hot},
-{left_ptr_bits, left_ptr_width, left_ptr_height, left_ptr_x_hot, left_ptr_y_hot},
-{left_ptr_mask_bits, left_ptr_mask_width, left_ptr_mask_height, left_ptr_mask_x_hot, left_ptr_mask_y_hot},
-{left_side_bits, left_side_width, left_side_height, left_side_x_hot, left_side_y_hot},
-{left_side_mask_bits, left_side_mask_width, left_side_mask_height, left_side_mask_x_hot, left_side_mask_y_hot},
-{left_tee_bits, left_tee_width, left_tee_height, left_tee_x_hot, left_tee_y_hot},
-{left_tee_mask_bits, left_tee_mask_width, left_tee_mask_height, left_tee_mask_x_hot, left_tee_mask_y_hot},
-{leftbutton_bits, leftbutton_width, leftbutton_height, leftbutton_x_hot, leftbutton_y_hot},
-{leftbutton_mask_bits, leftbutton_mask_width, leftbutton_mask_height, leftbutton_mask_x_hot, leftbutton_mask_y_hot},
-{ll_angle_bits, ll_angle_width, ll_angle_height, ll_angle_x_hot, ll_angle_y_hot},
-{ll_angle_mask_bits, ll_angle_mask_width, ll_angle_mask_height, ll_angle_mask_x_hot, ll_angle_mask_y_hot},
-{lr_angle_bits, lr_angle_width, lr_angle_height, lr_angle_x_hot, lr_angle_y_hot},
-{lr_angle_mask_bits, lr_angle_mask_width, lr_angle_mask_height, lr_angle_mask_x_hot, lr_angle_mask_y_hot},
-{man_bits, man_width, man_height, man_x_hot, man_y_hot},
-{man_mask_bits, man_mask_width, man_mask_height, man_mask_x_hot, man_mask_y_hot},
-{middlebutton_bits, middlebutton_width, middlebutton_height, middlebutton_x_hot, middlebutton_y_hot},
-{middlebutton_mask_bits, middlebutton_mask_width, middlebutton_mask_height, middlebutton_mask_x_hot, middlebutton_mask_y_hot},
-{mouse_bits, mouse_width, mouse_height, mouse_x_hot, mouse_y_hot},
-{mouse_mask_bits, mouse_mask_width, mouse_mask_height, mouse_mask_x_hot, mouse_mask_y_hot},
-{pencil_bits, pencil_width, pencil_height, pencil_x_hot, pencil_y_hot},
-{pencil_mask_bits, pencil_mask_width, pencil_mask_height, pencil_mask_x_hot, pencil_mask_y_hot},
-{pirate_bits, pirate_width, pirate_height, pirate_x_hot, pirate_y_hot},
-{pirate_mask_bits, pirate_mask_width, pirate_mask_height, pirate_mask_x_hot, pirate_mask_y_hot},
-{plus_bits, plus_width, plus_height, plus_x_hot, plus_y_hot},
-{plus_mask_bits, plus_mask_width, plus_mask_height, plus_mask_x_hot, plus_mask_y_hot},
-{question_arrow_bits, question_arrow_width, question_arrow_height, question_arrow_x_hot, question_arrow_y_hot},
-{question_arrow_mask_bits, question_arrow_mask_width, question_arrow_mask_height, question_arrow_mask_x_hot, question_arrow_mask_y_hot},
-{right_ptr_bits, right_ptr_width, right_ptr_height, right_ptr_x_hot, right_ptr_y_hot},
-{right_ptr_mask_bits, right_ptr_mask_width, right_ptr_mask_height, right_ptr_mask_x_hot, right_ptr_mask_y_hot},
-{right_side_bits, right_side_width, right_side_height, right_side_x_hot, right_side_y_hot},
-{right_side_mask_bits, right_side_mask_width, right_side_mask_height, right_side_mask_x_hot, right_side_mask_y_hot},
-{right_tee_bits, right_tee_width, right_tee_height, right_tee_x_hot, right_tee_y_hot},
-{right_tee_mask_bits, right_tee_mask_width, right_tee_mask_height, right_tee_mask_x_hot, right_tee_mask_y_hot},
-{rightbutton_bits, rightbutton_width, rightbutton_height, rightbutton_x_hot, rightbutton_y_hot},
-{rightbutton_mask_bits, rightbutton_mask_width, rightbutton_mask_height, rightbutton_mask_x_hot, rightbutton_mask_y_hot},
-{rtl_logo_bits, rtl_logo_width, rtl_logo_height, rtl_logo_x_hot, rtl_logo_y_hot},
-{rtl_logo_mask_bits, rtl_logo_mask_width, rtl_logo_mask_height, rtl_logo_mask_x_hot, rtl_logo_mask_y_hot},
-{sailboat_bits, sailboat_width, sailboat_height, sailboat_x_hot, sailboat_y_hot},
-{sailboat_mask_bits, sailboat_mask_width, sailboat_mask_height, sailboat_mask_x_hot, sailboat_mask_y_hot},
-{sb_down_arrow_bits, sb_down_arrow_width, sb_down_arrow_height, sb_down_arrow_x_hot, sb_down_arrow_y_hot},
-{sb_down_arrow_mask_bits, sb_down_arrow_mask_width, sb_down_arrow_mask_height, sb_down_arrow_mask_x_hot, sb_down_arrow_mask_y_hot},
-{sb_h_double_arrow_bits, sb_h_double_arrow_width, sb_h_double_arrow_height, sb_h_double_arrow_x_hot, sb_h_double_arrow_y_hot},
-{sb_h_double_arrow_mask_bits, sb_h_double_arrow_mask_width, sb_h_double_arrow_mask_height, sb_h_double_arrow_mask_x_hot, sb_h_double_arrow_mask_y_hot},
-{sb_left_arrow_bits, sb_left_arrow_width, sb_left_arrow_height, sb_left_arrow_x_hot, sb_left_arrow_y_hot},
-{sb_left_arrow_mask_bits, sb_left_arrow_mask_width, sb_left_arrow_mask_height, sb_left_arrow_mask_x_hot, sb_left_arrow_mask_y_hot},
-{sb_right_arrow_bits, sb_right_arrow_width, sb_right_arrow_height, sb_right_arrow_x_hot, sb_right_arrow_y_hot},
-{sb_right_arrow_mask_bits, sb_right_arrow_mask_width, sb_right_arrow_mask_height, sb_right_arrow_mask_x_hot, sb_right_arrow_mask_y_hot},
-{sb_up_arrow_bits, sb_up_arrow_width, sb_up_arrow_height, sb_up_arrow_x_hot, sb_up_arrow_y_hot},
-{sb_up_arrow_mask_bits, sb_up_arrow_mask_width, sb_up_arrow_mask_height, sb_up_arrow_mask_x_hot, sb_up_arrow_mask_y_hot},
-{sb_v_double_arrow_bits, sb_v_double_arrow_width, sb_v_double_arrow_height, sb_v_double_arrow_x_hot, sb_v_double_arrow_y_hot},
-{sb_v_double_arrow_mask_bits, sb_v_double_arrow_mask_width, sb_v_double_arrow_mask_height, sb_v_double_arrow_mask_x_hot, sb_v_double_arrow_mask_y_hot},
-{shuttle_bits, shuttle_width, shuttle_height, shuttle_x_hot, shuttle_y_hot},
-{shuttle_mask_bits, shuttle_mask_width, shuttle_mask_height, shuttle_mask_x_hot, shuttle_mask_y_hot},
-{sizing_bits, sizing_width, sizing_height, sizing_x_hot, sizing_y_hot},
-{sizing_mask_bits, sizing_mask_width, sizing_mask_height, sizing_mask_x_hot, sizing_mask_y_hot},
-{spider_bits, spider_width, spider_height, spider_x_hot, spider_y_hot},
-{spider_mask_bits, spider_mask_width, spider_mask_height, spider_mask_x_hot, spider_mask_y_hot},
-{spraycan_bits, spraycan_width, spraycan_height, spraycan_x_hot, spraycan_y_hot},
-{spraycan_mask_bits, spraycan_mask_width, spraycan_mask_height, spraycan_mask_x_hot, spraycan_mask_y_hot},
-{star_bits, star_width, star_height, star_x_hot, star_y_hot},
-{star_mask_bits, star_mask_width, star_mask_height, star_mask_x_hot, star_mask_y_hot},
-{target_bits, target_width, target_height, target_x_hot, target_y_hot},
-{target_mask_bits, target_mask_width, target_mask_height, target_mask_x_hot, target_mask_y_hot},
-{tcross_bits, tcross_width, tcross_height, tcross_x_hot, tcross_y_hot},
-{tcross_mask_bits, tcross_mask_width, tcross_mask_height, tcross_mask_x_hot, tcross_mask_y_hot},
-{top_left_arrow_bits, top_left_arrow_width, top_left_arrow_height, top_left_arrow_x_hot, top_left_arrow_y_hot},
-{top_left_arrow_mask_bits, top_left_arrow_mask_width, top_left_arrow_mask_height, top_left_arrow_mask_x_hot, top_left_arrow_mask_y_hot},
-{top_left_corner_bits, top_left_corner_width, top_left_corner_height, top_left_corner_x_hot, top_left_corner_y_hot},
-{top_left_corner_mask_bits, top_left_corner_mask_width, top_left_corner_mask_height, top_left_corner_mask_x_hot, top_left_corner_mask_y_hot},
-{top_right_corner_bits, top_right_corner_width, top_right_corner_height, top_right_corner_x_hot, top_right_corner_y_hot},
-{top_right_corner_mask_bits, top_right_corner_mask_width, top_right_corner_mask_height, top_right_corner_mask_x_hot, top_right_corner_mask_y_hot},
-{top_side_bits, top_side_width, top_side_height, top_side_x_hot, top_side_y_hot},
-{top_side_mask_bits, top_side_mask_width, top_side_mask_height, top_side_mask_x_hot, top_side_mask_y_hot},
-{top_tee_bits, top_tee_width, top_tee_height, top_tee_x_hot, top_tee_y_hot},
-{top_tee_mask_bits, top_tee_mask_width, top_tee_mask_height, top_tee_mask_x_hot, top_tee_mask_y_hot},
-{trek_bits, trek_width, trek_height, trek_x_hot, trek_y_hot},
-{trek_mask_bits, trek_mask_width, trek_mask_height, trek_mask_x_hot, trek_mask_y_hot},
-{ul_angle_bits, ul_angle_width, ul_angle_height, ul_angle_x_hot, ul_angle_y_hot},
-{ul_angle_mask_bits, ul_angle_mask_width, ul_angle_mask_height, ul_angle_mask_x_hot, ul_angle_mask_y_hot},
-{umbrella_bits, umbrella_width, umbrella_height, umbrella_x_hot, umbrella_y_hot},
-{umbrella_mask_bits, umbrella_mask_width, umbrella_mask_height, umbrella_mask_x_hot, umbrella_mask_y_hot},
-{ur_angle_bits, ur_angle_width, ur_angle_height, ur_angle_x_hot, ur_angle_y_hot},
-{ur_angle_mask_bits, ur_angle_mask_width, ur_angle_mask_height, ur_angle_mask_x_hot, ur_angle_mask_y_hot},
-{watch_bits, watch_width, watch_height, watch_x_hot, watch_y_hot},
-{watch_mask_bits, watch_mask_width, watch_mask_height, watch_mask_x_hot, watch_mask_y_hot},
-{xterm_bits, xterm_width, xterm_height, xterm_x_hot, xterm_y_hot},
-{xterm_mask_bits, xterm_mask_width, xterm_mask_height, xterm_mask_x_hot, xterm_mask_y_hot}
-};
-
-GdkCursor*
-gdk_cursor_new_for_display (GdkDisplay    *display,
-                           GdkCursorType  cursor_type)
-{
-  GdkCursor *cursor;
-  
-  if (cursor_type >= sizeof(stock_cursors)/sizeof(stock_cursors[0]))
-    return NULL;
-
-  cursor = stock_cursors[cursor_type].cursor;
-  if (!cursor)
-    {
-      GdkPixmap *tmp_pm, *pm, *mask;
-      GdkGC *copy_gc;
-      char *data;
-     
-      tmp_pm = gdk_bitmap_create_from_data (_gdk_parent_root,
-                                           stock_cursors[cursor_type].bits,
-                                           stock_cursors[cursor_type].width,
-                                           stock_cursors[cursor_type].height);
-
-      /* Create an empty bitmap the size of the mask */
-      data = g_malloc0 (((stock_cursors[cursor_type+1].width+7)/8) * stock_cursors[cursor_type+1].height);
-      pm = gdk_bitmap_create_from_data (_gdk_parent_root,
-                                       data,
-                                       stock_cursors[cursor_type+1].width,
-                                       stock_cursors[cursor_type+1].height);
-      copy_gc = gdk_gc_new (pm);
-      gdk_draw_drawable(pm,
-                       copy_gc,
-                       tmp_pm,
-                       0, 0,
-                       stock_cursors[cursor_type+1].hotx - stock_cursors[cursor_type].hotx,
-                       stock_cursors[cursor_type+1].hoty - stock_cursors[cursor_type].hoty,
-                       stock_cursors[cursor_type].width,
-                       stock_cursors[cursor_type].height);
-      gdk_pixmap_unref (tmp_pm);
-      g_free (data);
-      gdk_gc_unref (copy_gc);
-
-      mask =  gdk_bitmap_create_from_data (_gdk_parent_root,
-                                          stock_cursors[cursor_type+1].bits,
-                                          stock_cursors[cursor_type+1].width,
-                                          stock_cursors[cursor_type+1].height);
-
-      cursor = gdk_cursor_new_from_pixmap (pm, mask, NULL, NULL,
-                                    stock_cursors[cursor_type+1].hotx,
-                                    stock_cursors[cursor_type+1].hoty);
-
-      stock_cursors[cursor_type].cursor = cursor;
-    }
-  return gdk_cursor_ref (cursor);
-}
-
-GdkCursor*
-gdk_cursor_new_from_pixmap (GdkPixmap      *source,
-                           GdkPixmap      *mask,
-                           const GdkColor *fg,
-                           const GdkColor *bg,
-                           gint            x,
-                           gint            y)
-{
-  GdkCursorPrivateFB *private;
-  GdkCursor *cursor;
-
-  g_return_val_if_fail (source != NULL, NULL);
-
-  private = g_new (GdkCursorPrivateFB, 1);
-  cursor = (GdkCursor *) private;
-  cursor->type = GDK_CURSOR_IS_PIXMAP;
-  cursor->ref_count = 1;
-  private->cursor = gdk_pixmap_ref (source);
-  private->mask = gdk_pixmap_ref (mask);
-  private->hot_x = x;
-  private->hot_y = y;
-  
-  return cursor;
-}
-
-void
-_gdk_cursor_destroy (GdkCursor *cursor)
-{
-  GdkCursorPrivateFB *private;
-
-  g_return_if_fail (cursor != NULL);
-  g_return_if_fail (cursor->ref_count == 0);
-
-  private = (GdkCursorPrivateFB *) cursor;
-
-  if (private->mask)
-    gdk_pixmap_unref (private->mask);
-  gdk_pixmap_unref (private->cursor);
-  
-  g_free (private);
-}
-
-/* Global data to keep track of cursor */
-static GdkPixmap *last_contents = NULL;
-static GdkPoint last_location, last_contents_size;
-static GdkCursor *last_cursor = NULL;
-static GdkFBDrawingContext *gdk_fb_cursor_dc = NULL;
-static GdkFBDrawingContext cursor_dc_dat;
-static GdkGC *cursor_gc;
-static gint cursor_visibility_count = 1;
-
-static GdkFBDrawingContext *
-gdk_fb_cursor_dc_reset (void)
-{
-  if (gdk_fb_cursor_dc)
-    gdk_fb_drawing_context_finalize (gdk_fb_cursor_dc);
-
-  gdk_fb_cursor_dc = &cursor_dc_dat;
-  gdk_fb_drawing_context_init (gdk_fb_cursor_dc,
-                              GDK_DRAWABLE_IMPL(_gdk_parent_root),
-                              cursor_gc,
-                              TRUE,
-                              FALSE);
-
-  return gdk_fb_cursor_dc;
-}
-
-void
-gdk_fb_cursor_hide (void)
-{
-  GdkFBDrawingContext *mydc = gdk_fb_cursor_dc;
-
-  cursor_visibility_count--;
-  g_assert (cursor_visibility_count <= 0);
-  
-  if (cursor_visibility_count < 0)
-    return;
-
-  if (!mydc)
-    mydc = gdk_fb_cursor_dc_reset ();
-
-  if (last_contents)
-    {
-      gdk_gc_set_clip_mask (cursor_gc, NULL);
-      /* Restore old picture */
-      gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL(_gdk_parent_root),
-                             cursor_gc,
-                             GDK_DRAWABLE_IMPL(last_contents),
-                             mydc,
-                             0, 0,
-                             last_location.x,
-                             last_location.y,
-                             last_contents_size.x,
-                             last_contents_size.y);
-      gdk_shadow_fb_update (last_location.x, last_location.y,
-                           last_location.x + last_contents_size.x,
-                           last_location.y + last_contents_size.y);
-    }
-}
-
-void
-gdk_fb_cursor_invalidate (void)
-{
-  if (last_contents)
-    {
-      gdk_pixmap_unref (last_contents);
-      last_contents = NULL;
-    }
-}
-
-void
-gdk_fb_cursor_unhide (void)
-{
-  GdkFBDrawingContext *mydc = gdk_fb_cursor_dc;
-  GdkCursorPrivateFB *last_private;
-  GdkDrawableFBData *pixmap_last;
-  
-  last_private = GDK_CURSOR_FB (last_cursor);
-  cursor_visibility_count++;
-  g_assert (cursor_visibility_count <= 1);
-  if (cursor_visibility_count < 1)
-    return;
-
-  if (!mydc)
-    mydc = gdk_fb_cursor_dc_reset ();
-
-  if (last_cursor)
-    {
-      pixmap_last = GDK_DRAWABLE_IMPL_FBDATA (last_private->cursor);
-      
-      if (!last_contents ||
-         pixmap_last->width > GDK_DRAWABLE_IMPL_FBDATA (last_contents)->width ||
-         pixmap_last->height > GDK_DRAWABLE_IMPL_FBDATA (last_contents)->height)
-       {
-         if (last_contents)
-           gdk_pixmap_unref (last_contents);
-
-         last_contents = gdk_pixmap_new (_gdk_parent_root,
-                                         pixmap_last->width,
-                                         pixmap_last->height,
-                                         GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->depth);
-       }
-
-      gdk_gc_set_clip_mask (cursor_gc, NULL);
-      gdk_fb_draw_drawable_2 (GDK_DRAWABLE_IMPL (last_contents),
-                             cursor_gc,
-                             GDK_DRAWABLE_IMPL (_gdk_parent_root),
-                             last_location.x,
-                             last_location.y,
-                             0, 0,
-                             pixmap_last->width,
-                             pixmap_last->height,
-                             TRUE, FALSE);
-      last_contents_size.x = pixmap_last->width;
-      last_contents_size.y = pixmap_last->height;
-      
-      gdk_gc_set_clip_mask (cursor_gc, last_private->mask);
-      gdk_gc_set_clip_origin (cursor_gc,
-                             last_location.x,
-                             last_location.y);
-
-      gdk_fb_cursor_dc_reset ();
-      gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL (_gdk_parent_root),
-                             cursor_gc,
-                             GDK_DRAWABLE_IMPL (last_private->cursor),
-                             mydc,
-                             0, 0,
-                             last_location.x, last_location.y,
-                             pixmap_last->width,
-                             pixmap_last->height);
-      gdk_shadow_fb_update (last_location.x, last_location.y,
-                           last_location.x + pixmap_last->width,
-                           last_location.y + pixmap_last->height);
-    }
-  else
-    gdk_fb_cursor_invalidate ();
-}
-
-gboolean
-gdk_fb_cursor_region_need_hide (GdkRegion *region)
-{
-  GdkRectangle testme;
-
-  if (!last_cursor)
-    return FALSE;
-
-  testme.x = last_location.x;
-  testme.y = last_location.y;
-  testme.width = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->width;
-  testme.height = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->height;
-
-  return (gdk_region_rect_in (region, &testme) != GDK_OVERLAP_RECTANGLE_OUT);
-}
-
-gboolean
-gdk_fb_cursor_need_hide (GdkRectangle *rect)
-{
-  GdkRectangle testme;
-
-  if (!last_cursor)
-    return FALSE;
-
-  testme.x = last_location.x;
-  testme.y = last_location.y;
-  testme.width = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->width;
-  testme.height = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->height;
-
-  return gdk_rectangle_intersect (rect, &testme, &testme);
-}
-
-void
-gdk_fb_get_cursor_rect (GdkRectangle *rect)
-{
-  if (last_cursor)
-    {
-      rect->x = last_location.x;
-      rect->y = last_location.y;
-      rect->width = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->width;
-      rect->height = GDK_DRAWABLE_IMPL_FBDATA (GDK_CURSOR_FB (last_cursor)->cursor)->height;
-    }
-  else
-    {
-      rect->x = rect->y = -1;
-      rect->width = rect->height = 0;
-    }
-}
-
-void
-gdk_fb_cursor_move (gint x, gint y, GdkWindow *in_window)
-{
-  GdkCursor *the_cursor;
-
-  if (!cursor_gc)
-    {
-      GdkColor white, black;
-      cursor_gc = gdk_gc_new (_gdk_parent_root);
-      gdk_color_black (gdk_colormap_get_system (), &black);
-      gdk_color_white (gdk_colormap_get_system (), &white);
-      gdk_gc_set_foreground (cursor_gc, &black);
-      gdk_gc_set_background (cursor_gc, &white);
-    }
-
-  gdk_fb_cursor_hide ();
-
-  if (_gdk_fb_pointer_grab_window)
-    {
-      if (_gdk_fb_pointer_grab_cursor)
-       the_cursor = _gdk_fb_pointer_grab_cursor;
-      else
-       {
-         GdkWindow *win = _gdk_fb_pointer_grab_window;
-         while (!GDK_WINDOW_IMPL_FBDATA (win)->cursor && GDK_WINDOW_OBJECT (win)->parent)
-           win = (GdkWindow *)GDK_WINDOW_OBJECT (win)->parent;
-         the_cursor = GDK_WINDOW_IMPL_FBDATA (win)->cursor;
-       }
-    }
-  else
-    {
-      while (!GDK_WINDOW_IMPL_FBDATA (in_window)->cursor && GDK_WINDOW_P (in_window)->parent)
-       in_window = (GdkWindow *)GDK_WINDOW_P (in_window)->parent;
-      the_cursor = GDK_WINDOW_IMPL_FBDATA (in_window)->cursor;
-    }
-
-  last_location.x = x - GDK_CURSOR_FB (the_cursor)->hot_x;
-  last_location.y = y - GDK_CURSOR_FB (the_cursor)->hot_y;
-
-  if (the_cursor)
-    gdk_cursor_ref (the_cursor);
-  if (last_cursor)
-    gdk_cursor_unref (last_cursor);
-  last_cursor = the_cursor;
-
-  gdk_fb_cursor_unhide ();
-}
-
-void
-gdk_fb_cursor_reset(void)
-{
-  GdkWindow *win = gdk_window_at_pointer (NULL, NULL);
-  gint x, y;
-
-  gdk_fb_mouse_get_info (&x, &y, NULL);
-  gdk_fb_cursor_move (x, y, win);
-}
-
-GdkDisplay *
-gdk_cursor_get_display (GdkCursor *cursor)
-{
-  return gdk_display_get_default ();
-}
diff --git a/gdk/linux-fb/gdkdisplay-fb.c b/gdk/linux-fb/gdkdisplay-fb.c
deleted file mode 100644 (file)
index d9d798e..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdk.h"
-#include "gdkprivate-fb.h"
-
-GdkDisplay *
-gdk_display_open (const gchar *display_name)
-{
-  if (gdk_display == NULL || _gdk_display != NULL)
-    return NULL; /* single display only */
-
-  _gdk_display = g_object_new (GDK_TYPE_DISPLAY, NULL);
-  _gdk_screen = g_object_new (GDK_TYPE_SCREEN, NULL);
-
-  _gdk_visual_init ();
-  gdk_screen_set_default_colormap (_gdk_screen,
-                                   gdk_screen_get_system_colormap (_gdk_screen));
-  _gdk_windowing_window_init ();
-  _gdk_windowing_image_init ();
-  _gdk_events_init ();
-  _gdk_input_init ();
-  _gdk_dnd_init ();
-
-  g_signal_emit_by_name (gdk_display_manager_get (),
-                        "display_opened", _gdk_display);
-
-  return _gdk_display;
-}
-
-G_CONST_RETURN gchar *
-gdk_display_get_name (GdkDisplay *display)
-{
-  return gdk_get_display_arg_name ();
-}
-
-int
-gdk_display_get_n_screens (GdkDisplay *display)
-{
-  return 1;
-}
-
-GdkScreen *
-gdk_display_get_screen (GdkDisplay *display,
-                       gint        screen_num)
-{
-  return _gdk_screen;
-}
-
-GdkScreen *
-gdk_display_get_default_screen (GdkDisplay *display)
-{
-  return _gdk_screen;
-}
diff --git a/gdk/linux-fb/gdkdnd-fb.c b/gdk/linux-fb/gdkdnd-fb.c
deleted file mode 100644 (file)
index cc84f2e..0000000
+++ /dev/null
@@ -1,727 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1999 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdk.h"          /* For gdk_flush() */
-#include "gdkdnd.h"
-#include "gdkproperty.h"
-#include "gdkinternals.h"
-#include "gdkprivate-fb.h"
-
-typedef struct _GdkDragContextPrivate GdkDragContextPrivate;
-
-typedef enum {
-  GDK_DRAG_STATUS_DRAG,
-  GDK_DRAG_STATUS_MOTION_WAIT,
-  GDK_DRAG_STATUS_ACTION_WAIT,
-  GDK_DRAG_STATUS_DROP
-} GtkDragStatus;
-
-/* Structure that holds information about a drag in progress.
- * this is used on both source and destination sides.
- */
-struct _GdkDragContextPrivate {
-  GdkAtom local_selection;
-  
-  guint16 last_x;              /* Coordinates from last event */
-  guint16 last_y;
-  
-  guint drag_status : 4;       /* current status of drag */
-};
-
-/* Drag Contexts */
-
-static GList *contexts;
-static gpointer parent_class = NULL;
-
-#define GDK_DRAG_CONTEXT_PRIVATE_DATA(ctx) ((GdkDragContextPrivate *) GDK_DRAG_CONTEXT (ctx)->windowing_data)
-
-GdkDragContext *current_dest_drag = NULL;
-
-static void
-gdk_drag_context_init (GdkDragContext *dragcontext)
-{
-  dragcontext->windowing_data = g_new0 (GdkDragContextPrivate, 1);
-
-  contexts = g_list_prepend (contexts, dragcontext);
-}
-
-static void
-gdk_drag_context_finalize (GObject *object)
-{
-  GdkDragContext *context = GDK_DRAG_CONTEXT (object);
-  GdkDragContextPrivate *private = GDK_DRAG_CONTEXT_PRIVATE_DATA (object);
-  
-  g_list_free (context->targets);
-
-  if (context->source_window)
-    gdk_window_unref (context->source_window);
-  
-  if (context->dest_window)
-    gdk_window_unref (context->dest_window);
-
-  
-  if (private)
-    {
-      g_free (private);
-      context->windowing_data = NULL;
-    }
-  
-  contexts = g_list_remove (contexts, context);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_drag_context_class_init (GdkDragContextClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_drag_context_finalize;
-}
-
-
-GType
-gdk_drag_context_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkDragContextClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_drag_context_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkDragContext),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_drag_context_init,
-      };
-      
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkDragContext",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-GdkDragContext *
-gdk_drag_context_new        (void)
-{
-  return (GdkDragContext *)g_object_new (gdk_drag_context_get_type (), NULL);
-}
-
-void            
-gdk_drag_context_ref (GdkDragContext *context)
-{
-  g_object_ref (context);
-}
-
-void            
-gdk_drag_context_unref (GdkDragContext *context)
-{
-  g_object_unref (context);
-}
-
-static GdkDragContext *
-gdk_drag_context_find (gboolean     is_source,
-                      GdkWindow   *source,
-                      GdkWindow   *dest)
-{
-  GList *tmp_list = contexts;
-  
-  GdkDragContext *context;
-  GdkDragContextPrivate *private;
-
-  while (tmp_list)
-    {
-      context = (GdkDragContext *)tmp_list->data;
-      private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
-
-      if ((!context->is_source == !is_source) &&
-         ((source == NULL) || (context->source_window && (context->source_window == source))) &&
-         ((dest == NULL) || (context->dest_window && (context->dest_window == dest))))
-         return context;
-      
-      tmp_list = tmp_list->next;
-    }
-  
-  return NULL;
-}
-
-
-/*************************************************************
- ************************** Public API ***********************
- *************************************************************/
-
-void
-_gdk_dnd_init (void)
-{
-}
-
-/* Source side */
-
-static void
-local_send_leave (GdkDragContext  *context,
-                 guint32          time)
-{
-  GdkEvent tmp_event;
-  
-  if ((current_dest_drag != NULL) &&
-      (current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
-      (current_dest_drag->source_window == context->source_window))
-    {
-      tmp_event.dnd.type = GDK_DRAG_LEAVE;
-      tmp_event.dnd.window = context->dest_window;
-      /* Pass ownership of context to the event */
-      tmp_event.dnd.context = current_dest_drag;
-      tmp_event.dnd.send_event = FALSE;
-      tmp_event.dnd.time = GDK_CURRENT_TIME; /* FIXME? */
-
-      current_dest_drag = NULL;
-      
-      gdk_event_put (&tmp_event);
-    }
-  
-}
-
-static void
-local_send_enter (GdkDragContext  *context,
-                 guint32          time)
-{
-  GdkEvent tmp_event;
-  GdkDragContextPrivate *private;
-  GdkDragContext *new_context;
-
-  private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
-  
-  if (!private->local_selection)
-    private->local_selection = gdk_atom_intern ("LocalDndSelection", FALSE);
-
-  if (current_dest_drag != NULL)
-    {
-      gdk_drag_context_unref (current_dest_drag);
-      current_dest_drag = NULL;
-    }
-
-  new_context = gdk_drag_context_new ();
-  new_context->protocol = GDK_DRAG_PROTO_LOCAL;
-  new_context->is_source = FALSE;
-
-  new_context->source_window = context->source_window;
-  gdk_window_ref (new_context->source_window);
-  new_context->dest_window = context->dest_window;
-  gdk_window_ref (new_context->dest_window);
-
-  new_context->targets = g_list_copy (context->targets);
-
-  gdk_window_set_events (new_context->source_window,
-                        gdk_window_get_events (new_context->source_window) |
-                        GDK_PROPERTY_CHANGE_MASK);
- new_context->actions = context->actions;
-
-  tmp_event.dnd.type = GDK_DRAG_ENTER;
-  tmp_event.dnd.window = context->dest_window;
-  tmp_event.dnd.send_event = FALSE;
-  tmp_event.dnd.context = new_context;
-  gdk_drag_context_ref (new_context);
-
-  tmp_event.dnd.time = GDK_CURRENT_TIME; /* FIXME? */
-  
-  current_dest_drag = new_context;
-  
-  (GDK_DRAG_CONTEXT_PRIVATE_DATA (new_context))->local_selection = 
-    private->local_selection;
-
-  gdk_event_put (&tmp_event);
-}
-
-static void
-local_send_motion (GdkDragContext  *context,
-                   gint            x_root, 
-                   gint            y_root,
-                   GdkDragAction   action,
-                   guint32         time)
-{
-  GdkEvent tmp_event;
-  
-  if ((current_dest_drag != NULL) &&
-      (current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
-      (current_dest_drag->source_window == context->source_window))
-    {
-      tmp_event.dnd.type = GDK_DRAG_MOTION;
-      tmp_event.dnd.window = current_dest_drag->dest_window;
-      tmp_event.dnd.send_event = FALSE;
-      tmp_event.dnd.context = current_dest_drag;
-      gdk_drag_context_ref (current_dest_drag);
-
-      tmp_event.dnd.time = time;
-
-      current_dest_drag->suggested_action = action;
-      current_dest_drag->actions = current_dest_drag->suggested_action;
-
-      tmp_event.dnd.x_root = x_root;
-      tmp_event.dnd.y_root = y_root;
-
-      (GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag))->last_x = x_root;
-      (GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag))->last_y = y_root;
-
-      GDK_DRAG_CONTEXT_PRIVATE_DATA (context)->drag_status = GDK_DRAG_STATUS_MOTION_WAIT;
-      
-      gdk_event_put (&tmp_event);
-    }
-}
-
-static void
-local_send_drop (GdkDragContext *context, guint32 time)
-{
-  GdkEvent tmp_event;
-  
-  if ((current_dest_drag != NULL) &&
-      (current_dest_drag->protocol == GDK_DRAG_PROTO_LOCAL) &&
-      (current_dest_drag->source_window == context->source_window))
-    {
-      GdkDragContextPrivate *private;
-      private = GDK_DRAG_CONTEXT_PRIVATE_DATA (current_dest_drag);
-
-      tmp_event.dnd.type = GDK_DROP_START;
-      tmp_event.dnd.window = current_dest_drag->dest_window;
-      tmp_event.dnd.send_event = FALSE;
-
-      tmp_event.dnd.context = current_dest_drag;
-      gdk_drag_context_ref (current_dest_drag);
-
-      tmp_event.dnd.time = GDK_CURRENT_TIME;
-      
-      tmp_event.dnd.x_root = private->last_x;
-      tmp_event.dnd.y_root = private->last_y;
-      
-      gdk_event_put (&tmp_event);
-    }
-
-}
-
-static void
-gdk_drag_do_leave (GdkDragContext *context, guint32 time)
-{
-  if (context->dest_window)
-    {
-      switch (context->protocol)
-       {
-       case GDK_DRAG_PROTO_LOCAL:
-         local_send_leave (context, time);
-         break;
-       default:
-         break;
-       }
-
-      gdk_window_unref (context->dest_window);
-      context->dest_window = NULL;
-    }
-}
-
-GdkDragContext * 
-gdk_drag_begin (GdkWindow     *window,
-               GList         *targets)
-{
-  GList *tmp_list;
-  GdkDragContext *new_context;
-
-  g_return_val_if_fail (window != NULL, NULL);
-
-  new_context = gdk_drag_context_new ();
-  new_context->is_source = TRUE;
-  new_context->source_window = window;
-  gdk_window_ref (window);
-
-  tmp_list = g_list_last (targets);
-  new_context->targets = NULL;
-  while (tmp_list)
-    {
-      new_context->targets = g_list_prepend (new_context->targets,
-                                            tmp_list->data);
-      tmp_list = tmp_list->prev;
-    }
-
-  new_context->actions = 0;
-
-  return new_context;
-}
-
-guint32
-gdk_drag_get_protocol_for_display (GdkDisplay      *display,
-                                  guint32          xid,
-                                  GdkDragProtocol *protocol)
-{
-  GdkWindow *window;
-
-  window = gdk_window_lookup ((GdkNativeWindow) xid);
-
-  if (GPOINTER_TO_INT (gdk_drawable_get_data (window, "gdk-dnd-registered")))
-    {
-      *protocol = GDK_DRAG_PROTO_LOCAL;
-      return xid;
-    }
-  
-  *protocol = GDK_DRAG_PROTO_NONE;
-  return 0;
-}
-
-static GdkWindow *
-get_toplevel_window_at (GdkWindow *ignore,
-                       gint       x_root,
-                       gint       y_root)
-{
-
-  GdkWindowObject *private;
-  GdkWindowObject *sub;
-  GdkWindowObject *child;
-  GList *ltmp, *ltmp2;
-  
-  private = (GdkWindowObject *)_gdk_parent_root;
-
-  for (ltmp = private->children; ltmp; ltmp = ltmp->next)
-    {
-      sub = ltmp->data;
-         
-      if ((GDK_WINDOW (sub) != ignore) &&
-         (GDK_WINDOW_IS_MAPPED (sub)) &&
-         (x_root >= sub->x) &&
-         (x_root < sub->x + GDK_DRAWABLE_IMPL_FBDATA (sub)->width) &&
-         (y_root >= sub->y) &&
-         (y_root < sub->y + GDK_DRAWABLE_IMPL_FBDATA (sub)->height))
-       {
-         if (g_object_get_data (G_OBJECT (sub), "gdk-window-child-handler"))
-           {
-             /* Managed window, check children */
-             for (ltmp2 = sub->children; ltmp2; ltmp2 = ltmp2->next)
-               {
-                 child = ltmp2->data;
-                 
-                 if ((GDK_WINDOW (child) != ignore) &&
-                     (GDK_WINDOW_IS_MAPPED (child)) &&
-                     (x_root >= sub->x + child->x) &&
-                     (x_root < sub->x + child->x + GDK_DRAWABLE_IMPL_FBDATA (child)->width) &&
-                     (y_root >= sub->y + child->y) &&
-                     (y_root < sub->y + child->y + GDK_DRAWABLE_IMPL_FBDATA (child)->height))
-                   return GDK_WINDOW (child);
-               }
-           }
-         else
-           return GDK_WINDOW (sub);
-       }
-    }
-  return NULL;
-}
-
-
-void
-gdk_drag_find_window_for_screen (GdkDragContext  *context,
-                                GdkWindow       *drag_window,
-                                GdkScreen       *screen,
-                                gint             x_root,
-                                gint             y_root,
-                                GdkWindow      **dest_window,
-                                GdkDragProtocol *protocol)
-{
-  GdkWindow *dest;
-
-  g_return_if_fail (context != NULL);
-
-  dest = get_toplevel_window_at (drag_window, x_root, y_root);
-  if (dest == NULL)
-    dest = _gdk_parent_root;
-  
-  if (context->dest_window != dest)
-    {
-      guint32 recipient;
-
-      /* Check if new destination accepts drags, and which protocol */
-      if ((recipient = gdk_drag_get_protocol ((guint32)dest, protocol)))
-       {
-         *dest_window = gdk_window_lookup ((GdkNativeWindow) recipient);
-         gdk_window_ref (*dest_window);
-       }
-      else
-       *dest_window = NULL;
-    }
-  else
-    {
-      *dest_window = context->dest_window;
-      if (*dest_window)
-       gdk_window_ref (*dest_window);
-      *protocol = context->protocol;
-    }
-  
-}
-
-gboolean        
-gdk_drag_motion (GdkDragContext *context,
-                GdkWindow      *dest_window,
-                GdkDragProtocol protocol,
-                gint            x_root, 
-                gint            y_root,
-                GdkDragAction   suggested_action,
-                GdkDragAction   possible_actions,
-                guint32         time)
-{
-  GdkDragContextPrivate *private;
-
-  g_return_val_if_fail (context != NULL, FALSE);
-
-  private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
-  
-  if (context->dest_window != dest_window)
-    {
-      GdkEvent temp_event;
-
-      /* Send a leave to the last destination */
-      gdk_drag_do_leave (context, time);
-      private->drag_status = GDK_DRAG_STATUS_DRAG;
-
-      /* Check if new destination accepts drags, and which protocol */
-      if (dest_window)
-       {
-         context->dest_window = dest_window;
-         gdk_window_ref (context->dest_window);
-         context->protocol = protocol;
-
-         switch (protocol)
-           {
-           case GDK_DRAG_PROTO_LOCAL:
-             local_send_enter (context, time);
-             break;
-
-           default:
-             break;
-           }
-         context->suggested_action = suggested_action;
-       }
-      else
-       {
-         context->dest_window = NULL;
-         context->action = 0;
-       }
-
-      /* Push a status event, to let the client know that
-       * the drag changed 
-       */
-
-      temp_event.dnd.type = GDK_DRAG_STATUS;
-      temp_event.dnd.window = context->source_window;
-      /* We use this to signal a synthetic status. Perhaps
-       * we should use an extra field...
-       */
-      temp_event.dnd.send_event = TRUE;
-
-      temp_event.dnd.context = context;
-      temp_event.dnd.time = time;
-
-      gdk_event_put (&temp_event);
-    }
-  else
-    {
-      context->suggested_action = suggested_action;
-    }
-
-  /* Send a drag-motion event */
-
-  private->last_x = x_root;
-  private->last_y = y_root;
-      
-  if (context->dest_window)
-    {
-      if (private->drag_status == GDK_DRAG_STATUS_DRAG)
-       {
-         switch (context->protocol)
-           {
-           case GDK_DRAG_PROTO_LOCAL:
-             local_send_motion (context, x_root, y_root, suggested_action, time);
-             break;
-             
-           case GDK_DRAG_PROTO_NONE:
-             g_warning ("GDK_DRAG_PROTO_NONE is not valid in gdk_drag_motion()");
-             break;
-           default:
-             break;
-           }
-       }
-      else
-       return TRUE;
-    }
-
-  return FALSE;
-}
-
-void
-gdk_drag_drop (GdkDragContext *context,
-              guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  if (context->dest_window)
-    {
-      switch (context->protocol)
-       {
-       case GDK_DRAG_PROTO_LOCAL:
-         local_send_drop (context, time);
-         break;
-
-       case GDK_DRAG_PROTO_NONE:
-         g_warning ("GDK_DRAG_PROTO_NONE is not valid in gdk_drag_drop()");
-         break;
-       default:
-         break;
-       }
-    }
-}
-
-void
-gdk_drag_abort (GdkDragContext *context,
-               guint32         time)
-{
-  g_return_if_fail (context != NULL);
-
-  gdk_drag_do_leave (context, time);
-}
-
-/* Destination side */
-
-void             
-gdk_drag_status (GdkDragContext   *context,
-                GdkDragAction     action,
-                guint32           time)
-{
-  GdkDragContextPrivate *private;
-  GdkDragContext *src_context;
-  GdkEvent tmp_event;
-
-  g_return_if_fail (context != NULL);
-
-  private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
-
-  src_context = gdk_drag_context_find (TRUE,
-                                      context->source_window,
-                                      context->dest_window);
-
-  if (src_context)
-    {
-      GdkDragContextPrivate *private = GDK_DRAG_CONTEXT_PRIVATE_DATA (src_context);
-      
-      if (private->drag_status == GDK_DRAG_STATUS_MOTION_WAIT)
-       private->drag_status = GDK_DRAG_STATUS_DRAG;
-
-      tmp_event.dnd.type = GDK_DRAG_STATUS;
-      tmp_event.dnd.window = context->source_window;
-      tmp_event.dnd.send_event = FALSE;
-      tmp_event.dnd.context = src_context;
-      gdk_drag_context_ref (src_context);
-
-      tmp_event.dnd.time = GDK_CURRENT_TIME; /* FIXME? */
-
-      if (action == GDK_ACTION_DEFAULT)
-       action = 0;
-      
-      src_context->action = action;
-      
-      gdk_event_put (&tmp_event);
-    }
-}
-
-void 
-gdk_drop_reply (GdkDragContext   *context,
-               gboolean          ok,
-               guint32           time)
-{
-  g_return_if_fail (context != NULL);
-}
-
-void             
-gdk_drop_finish (GdkDragContext   *context,
-                gboolean          success,
-                guint32           time)
-{
-  GdkDragContextPrivate *private;
-  GdkDragContext *src_context;
-  GdkEvent tmp_event;
-       
-  g_return_if_fail (context != NULL);
-
-  private = GDK_DRAG_CONTEXT_PRIVATE_DATA (context);
-
-  src_context = gdk_drag_context_find (TRUE,
-                                      context->source_window,
-                                      context->dest_window);
-  if (src_context)
-    {
-      tmp_event.dnd.type = GDK_DROP_FINISHED;
-      tmp_event.dnd.window = src_context->source_window;
-      tmp_event.dnd.send_event = FALSE;
-      tmp_event.dnd.context = src_context;
-      gdk_drag_context_ref (src_context);
-
-      gdk_event_put (&tmp_event);
-    }
-}
-
-
-void            
-gdk_window_register_dnd (GdkWindow      *window)
-{
-  g_return_if_fail (window != NULL);
-
-  if (GPOINTER_TO_INT (gdk_drawable_get_data (window, "gdk-dnd-registered")))
-    return;
-  else
-    gdk_drawable_set_data (window, "gdk-dnd-registered", GINT_TO_POINTER(TRUE), NULL);
-}
-
-/*************************************************************
- * gdk_drag_get_selection:
- *     Returns the selection atom for the current source window
- *   arguments:
- *     
- *   results:
- *************************************************************/
-
-GdkAtom       
-gdk_drag_get_selection (GdkDragContext *context)
-{
-  g_return_val_if_fail (context != NULL, GDK_NONE);
-
-  if (context->protocol == GDK_DRAG_PROTO_LOCAL)
-    return (GDK_DRAG_CONTEXT_PRIVATE_DATA (context))->local_selection;
-  else 
-    return GDK_NONE;
-}
-
diff --git a/gdk/linux-fb/gdkdrawable-fb2.c b/gdk/linux-fb/gdkdrawable-fb2.c
deleted file mode 100644 (file)
index a868a6e..0000000
+++ /dev/null
@@ -1,1575 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2000 Elliot Lee
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdkprivate-fb.h"
-#include "mi.h"
-#include <string.h>
-#include <gdkregion-generic.h>
-
-#include <pango/pangoft2.h>
-#include <freetype/ftglyph.h>
-
-#ifndef g_alloca
-#define g_alloca alloca
-#endif
-
-void                gdk_fb_draw_rectangle     (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              gboolean          filled,
-                                              gint              x,
-                                              gint              y,
-                                              gint              width,
-                                              gint              height);
-static void         gdk_fb_draw_arc           (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              gboolean          filled,
-                                              gint              x,
-                                              gint              y,
-                                              gint              width,
-                                              gint              height,
-                                              gint              angle1,
-                                              gint              angle2);
-static void         gdk_fb_draw_polygon       (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              gboolean          filled,
-                                              GdkPoint         *points,
-                                              gint              npoints);
-static void         gdk_fb_draw_text          (GdkDrawable      *drawable,
-                                              GdkFont          *font,
-                                              GdkGC            *gc,
-                                              gint              x,
-                                              gint              y,
-                                              const gchar      *text,
-                                              gint              text_length);
-static void         gdk_fb_draw_text_wc       (GdkDrawable      *drawable,
-                                              GdkFont          *font,
-                                              GdkGC            *gc,
-                                              gint              x,
-                                              gint              y,
-                                              const GdkWChar   *text,
-                                              gint              text_length);
-static void         gdk_fb_draw_glyphs        (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              PangoFont        *font,
-                                              gint              x,
-                                              gint              y,
-                                              PangoGlyphString *glyphs);
-void                gdk_fb_draw_drawable      (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              GdkPixmap        *src,
-                                              gint              xsrc,
-                                              gint              ysrc,
-                                              gint              xdest,
-                                              gint              ydest,
-                                              gint              width,
-                                              gint              height);
-static void         gdk_fb_draw_image         (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              GdkImage         *image,
-                                              gint              xsrc,
-                                              gint              ysrc,
-                                              gint              xdest,
-                                              gint              ydest,
-                                              gint              width,
-                                              gint              height);
-static void         gdk_fb_draw_points        (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              GdkPoint         *points,
-                                              gint              npoints);
-static void         gdk_fb_draw_segments      (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              GdkSegment       *segs,
-                                              gint              nsegs);
-static void         gdk_fb_draw_lines         (GdkDrawable      *drawable,
-                                              GdkGC            *gc,
-                                              GdkPoint         *points,
-                                              gint              npoints);
-static GdkColormap* gdk_fb_get_colormap       (GdkDrawable      *drawable);
-static void         gdk_fb_set_colormap       (GdkDrawable      *drawable,
-                                              GdkColormap      *colormap);
-static gint         gdk_fb_get_depth          (GdkDrawable      *drawable);
-static GdkScreen*   gdk_fb_get_screen         (GdkDrawable      *drawable);
-static GdkVisual*   gdk_fb_get_visual         (GdkDrawable      *drawable);
-static void         gdk_fb_drawable_finalize  (GObject *object);
-
-#ifdef ENABLE_SHADOW_FB
-static void         gdk_shadow_fb_draw_rectangle     (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     gboolean          filled,
-                                                     gint              x,
-                                                     gint              y,
-                                                     gint              width,
-                                                     gint              height);
-static void         gdk_shadow_fb_draw_arc           (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     gboolean          filled,
-                                                     gint              x,
-                                                     gint              y,
-                                                     gint              width,
-                                                     gint              height,
-                                                     gint              angle1,
-                                                     gint              angle2);
-static void         gdk_shadow_fb_draw_polygon       (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     gboolean          filled,
-                                                     GdkPoint         *points,
-                                                     gint              npoints);
-static void         gdk_shadow_fb_draw_text          (GdkDrawable      *drawable,
-                                                     GdkFont          *font,
-                                                     GdkGC            *gc,
-                                                     gint              x,
-                                                     gint              y,
-                                                     const gchar      *text,
-                                                     gint              text_length);
-static void         gdk_shadow_fb_draw_text_wc       (GdkDrawable      *drawable,
-                                                     GdkFont          *font,
-                                                     GdkGC            *gc,
-                                                     gint              x,
-                                                     gint              y,
-                                                     const GdkWChar   *text,
-                                                     gint              text_length);
-static void         gdk_shadow_fb_draw_drawable      (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     GdkPixmap        *src,
-                                                     gint              xsrc,
-                                                     gint              ysrc,
-                                                     gint              xdest,
-                                                     gint              ydest,
-                                                     gint              width,
-                                                     gint              height);
-static void         gdk_shadow_fb_draw_image         (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     GdkImage         *image,
-                                                     gint              xsrc,
-                                                     gint              ysrc,
-                                                     gint              xdest,
-                                                     gint              ydest,
-                                                     gint              width,
-                                                     gint              height);
-static void         gdk_shadow_fb_draw_points        (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     GdkPoint         *points,
-                                                     gint              npoints);
-static void         gdk_shadow_fb_draw_segments      (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     GdkSegment       *segs,
-                                                     gint              nsegs);
-static void         gdk_shadow_fb_draw_lines         (GdkDrawable      *drawable,
-                                                     GdkGC            *gc,
-                                                     GdkPoint         *points,
-                                                     gint              npoints);
-#endif
-
-
-static gpointer parent_class = NULL;
-
-static void
-gdk_fb_get_size (GdkDrawable *d, gint *width, gint *height)
-{
-  if (width)
-    *width = GDK_DRAWABLE_FBDATA (d)->width;
-  if (height)
-    *height = GDK_DRAWABLE_FBDATA (d)->height;
-}
-
-static void
-gdk_drawable_impl_fb_class_init (GdkDrawableFBClass *klass)
-{
-  GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_fb_drawable_finalize;
-  
-  drawable_class->create_gc = _gdk_fb_gc_new;
-  
-#ifdef ENABLE_SHADOW_FB
-  drawable_class->draw_rectangle = gdk_shadow_fb_draw_rectangle;
-  drawable_class->draw_arc = gdk_shadow_fb_draw_arc;
-  drawable_class->draw_polygon = gdk_shadow_fb_draw_polygon;
-  drawable_class->draw_text = gdk_shadow_fb_draw_text;
-  drawable_class->draw_text_wc = gdk_shadow_fb_draw_text_wc;
-  drawable_class->draw_drawable = gdk_shadow_fb_draw_drawable;
-  drawable_class->draw_points = gdk_shadow_fb_draw_points;
-  drawable_class->draw_segments = gdk_shadow_fb_draw_segments;
-  drawable_class->draw_lines = gdk_shadow_fb_draw_lines;
-  drawable_class->draw_image = gdk_shadow_fb_draw_image;
-#else
-  drawable_class->draw_rectangle = gdk_fb_draw_rectangle;
-  drawable_class->draw_arc = gdk_fb_draw_arc;
-  drawable_class->draw_polygon = gdk_fb_draw_polygon;
-  drawable_class->draw_text = gdk_fb_draw_text;
-  drawable_class->draw_text_wc = gdk_fb_draw_text_wc;
-  drawable_class->draw_drawable = gdk_fb_draw_drawable;
-  drawable_class->draw_points = gdk_fb_draw_points;
-  drawable_class->draw_segments = gdk_fb_draw_segments;
-  drawable_class->draw_lines = gdk_fb_draw_lines;
-  drawable_class->draw_image = gdk_fb_draw_image;
-#endif
-  
-  drawable_class->set_colormap = gdk_fb_set_colormap;
-  drawable_class->get_colormap = gdk_fb_get_colormap;
-  
-  drawable_class->get_size = gdk_fb_get_size;
-  drawable_class->get_depth = gdk_fb_get_depth;
-  drawable_class->get_screen = gdk_fb_get_screen;
-  drawable_class->get_visual = gdk_fb_get_visual;
-  
-  drawable_class->_copy_to_image = _gdk_fb_copy_to_image;
-}
-
-static void
-gdk_fb_drawable_finalize (GObject *object)
-{
-  gdk_drawable_set_colormap (GDK_DRAWABLE (object), NULL);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-
-GType
-gdk_drawable_impl_fb_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkDrawableFBClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_drawable_impl_fb_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkDrawableFBData),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) NULL,
-      };
-      
-      object_type = g_type_register_static (GDK_TYPE_DRAWABLE,
-                                            "GdkDrawableFB",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-/*****************************************************
- * FB specific implementations of generic functions *
- *****************************************************/
-
-static GdkColormap*
-gdk_fb_get_colormap (GdkDrawable *drawable)
-{
-  GdkColormap *retval = GDK_DRAWABLE_FBDATA (drawable)->colormap;
-
-  if (!retval)
-    retval = gdk_colormap_get_system ();
-
-  return retval;
-}
-
-static void
-gdk_fb_set_colormap (GdkDrawable *drawable,
-                    GdkColormap *colormap)
-{
-  GdkDrawableFBData *private;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-
-  if (private->colormap == colormap)
-    return;
-
-  if (private->colormap)
-    gdk_colormap_unref (private->colormap);
-  private->colormap = colormap;
-  if (private->colormap)
-    gdk_colormap_ref (private->colormap);
-}
-
-/* Calculates the real clipping region for a drawable, taking into account
- * other windows, gc clip region and gc clip mask.
- */
-GdkRegion *
-gdk_fb_clip_region (GdkDrawable *drawable,
-                   GdkGC *gc,
-                   gboolean do_clipping,
-                   gboolean do_children,
-                   gboolean full_shapes)
-{
-  GdkRectangle draw_rect;
-  GdkRegion *real_clip_region, *tmpreg, *shape;
-  gboolean skipit = FALSE;
-  GdkDrawableFBData *private;
-  GdkWindowObject *parent;
-
-  GDK_CHECK_IMPL (drawable);
-  
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  
-  g_assert(!GDK_IS_WINDOW (private->wrapper) ||
-          !GDK_WINDOW_P (private->wrapper)->input_only);
-  
-  draw_rect.x = private->llim_x;
-  draw_rect.y = private->llim_y;
-  if (!GDK_IS_WINDOW (private) ||
-      GDK_WINDOW_IS_MAPPED (private->wrapper))
-    {
-      draw_rect.width = private->lim_x - draw_rect.x;
-      draw_rect.height = private->lim_y - draw_rect.y;
-    }
-  else
-    {
-      draw_rect.width = draw_rect.height = 0;
-      skipit = TRUE;
-    }
-  real_clip_region = gdk_region_rectangle (&draw_rect);
-  if (skipit)
-    return real_clip_region;
-
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      parent = GDK_WINDOW_P (private->wrapper);
-      while (parent != (GdkWindowObject *)_gdk_parent_root)
-       {
-         if (full_shapes)
-           {
-             shape = gdk_fb_window_get_abs_shape (GDK_DRAWABLE (parent));
-             if (shape)
-               {
-                 gdk_region_intersect (real_clip_region, shape);
-                 gdk_region_destroy (shape);
-               }
-           }
-         else
-           {
-             gint dx, dy;
-             shape = gdk_fb_window_peek_shape (GDK_DRAWABLE (parent), &dx, &dy);
-             if (shape)
-               {
-                 GdkRectangle rect;
-                 GdkRegion *reg;
-                 
-                 gdk_region_get_clipbox (shape, &rect);
-                 
-                 rect.x += GDK_DRAWABLE_IMPL_FBDATA (parent)->abs_x + dx;
-                 rect.y += GDK_DRAWABLE_IMPL_FBDATA (parent)->abs_y + dy;
-                 
-                 reg = gdk_region_rectangle(&rect);
-                 gdk_region_intersect (real_clip_region, reg);
-                 gdk_region_destroy (reg);
-               }
-             
-           }
-         parent = parent->parent;
-       }
-    }
-
-  if (gc && GDK_GC_FBDATA(gc)->values.subwindow_mode == GDK_INCLUDE_INFERIORS)
-    do_children = FALSE;
-
-  if (do_clipping &&
-      GDK_IS_WINDOW (private->wrapper) &&
-      GDK_WINDOW_IS_MAPPED (private->wrapper) &&
-      !GDK_WINDOW_P (private->wrapper)->input_only)
-    {
-      GdkWindow *parentwin, *lastwin;
-      GdkDrawableFBData *impl_private;
-
-      lastwin = private->wrapper;
-      if (do_children)
-       parentwin = lastwin;
-      else
-       parentwin = (GdkWindow *)GDK_WINDOW_P (lastwin)->parent;
-
-      /* Remove the areas of all overlapping windows above parentwin in the hiearachy */
-      for (; parentwin; lastwin = parentwin, parentwin = (GdkWindow *)GDK_WINDOW_P (parentwin)->parent)
-       {
-         GList *cur;
-
-         for (cur = GDK_WINDOW_P (parentwin)->children; cur && cur->data != lastwin; cur = cur->next)
-           {
-             if (!GDK_WINDOW_IS_MAPPED (cur->data) || GDK_WINDOW_P (cur->data)->input_only)
-               continue;
-
-             impl_private = GDK_DRAWABLE_IMPL_FBDATA(cur->data);
-
-             /* This shortcut is really necessary for performance when there are a lot of windows */
-             if (impl_private->llim_x >= real_clip_region->extents.x2 ||
-                 impl_private->lim_x <= real_clip_region->extents.x1 ||
-                 impl_private->llim_y >= real_clip_region->extents.y2 ||
-                 impl_private->lim_y <= real_clip_region->extents.y1)
-               continue;
-             
-             draw_rect.x = impl_private->llim_x;
-             draw_rect.y = impl_private->llim_y;
-             draw_rect.width = impl_private->lim_x - draw_rect.x;
-             draw_rect.height = impl_private->lim_y - draw_rect.y;
-
-             tmpreg = gdk_region_rectangle (&draw_rect);
-
-             shape = gdk_fb_window_get_abs_shape (impl_private->wrapper);
-             if (shape)
-               {
-                 gdk_region_intersect (tmpreg, shape);
-                 gdk_region_destroy (shape);
-               }
-             
-             gdk_region_subtract (real_clip_region, tmpreg);
-             gdk_region_destroy (tmpreg);
-           }
-       }
-    }
-
-  if (gc)
-    {
-      GdkRegion *gc = _gdk_gc_get_clip_region (gc);
-      
-      if (clip_region)
-       {
-         tmpreg = gdk_region_copy (clip_region);
-         gdk_region_offset (tmpreg, private->abs_x + GDK_GC_P (gc)->clip_x_origin,
-                            private->abs_y + GDK_GC_P (gc)->clip_y_origin);
-         gdk_region_intersect (real_clip_region, tmpreg);
-         gdk_region_destroy (tmpreg);
-       }
-
-      if (GDK_GC_FBDATA (gc)->values.clip_mask)
-       {
-         GdkDrawable *cmask = GDK_GC_FBDATA (gc)->values.clip_mask;
-         GdkDrawableFBData *cmask_private;
-
-         cmask_private = GDK_DRAWABLE_IMPL_FBDATA (cmask);
-
-         g_assert (cmask_private->depth == 1);
-         g_assert (cmask_private->abs_x == 0 &&
-                   cmask_private->abs_y == 0);
-
-         draw_rect.x = private->abs_x +
-                       cmask_private->llim_x +
-                       GDK_GC_FBDATA (gc)->values.clip_x_origin;
-         
-         draw_rect.y = private->abs_y +
-                       cmask_private->llim_y +
-                       GDK_GC_FBDATA (gc)->values.clip_y_origin;
-         
-         draw_rect.width = cmask_private->width;
-         draw_rect.height = cmask_private->height;
-
-         tmpreg = gdk_region_rectangle (&draw_rect);
-         gdk_region_intersect (real_clip_region, tmpreg);
-         gdk_region_destroy (tmpreg);
-         /*
-         if (!real_clip_region->numRects)
-           g_warning ("Empty clip region");
-         */
-       }
-    }
-
-  return real_clip_region;
-}
-
-
-struct GdkSpanHelper
-{
-  GdkDrawable *drawable;
-  GdkGC *gc;
-  GdkColor color;
-};
-
-static void
-gdk_fb_fill_span_helper(GdkSpan *span,
-                       gpointer data)
-{
-  struct GdkSpanHelper *info = (struct GdkSpanHelper *)data;
-  GdkGC * gc = info->gc;
-  
-  (GDK_GC_FBDATA (gc)->fill_span) (info->drawable, gc, span, &info->color);
-}
-
-void
-gdk_fb_fill_spans (GdkDrawable *real_drawable,
-                  GdkGC *gc,
-                  GdkSpan *spans,
-                  int nspans,
-                  gboolean sorted)
-{
-  int i;
-  struct GdkSpanHelper info;
-  GdkRegion *real_clip_region;
-  gboolean handle_cursor = FALSE;
-  GdkDrawable *drawable;
-  GdkDrawableFBData *private;
-  
-  drawable = real_drawable;
-  private = GDK_DRAWABLE_FBDATA (drawable);
-
-  g_assert (gc);
-
-  if (GDK_IS_WINDOW (private->wrapper) && !GDK_WINDOW_IS_MAPPED (private->wrapper))
-    return;
-  if (GDK_IS_WINDOW (private->wrapper) && GDK_WINDOW_P (private->wrapper)->input_only)
-    g_error ("Drawing on the evil input-only!");
-
-  info.drawable = drawable;
-  info.gc = gc;
-  
-  if (GDK_GC_FBDATA (gc)->values_mask & GDK_GC_FOREGROUND)
-    info.color = GDK_GC_FBDATA (gc)->values.foreground;
-  else if (GDK_IS_WINDOW (private->wrapper))
-    info.color = GDK_WINDOW_P (private->wrapper)->bg_color;
-  else
-    gdk_color_black (private->colormap, &info.color);
-
-  real_clip_region = gdk_fb_clip_region (drawable, gc, TRUE, GDK_GC_FBDATA (gc)->values.function != GDK_INVERT, TRUE);
-
-  if (private->mem == GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->mem &&
-      gdk_fb_cursor_region_need_hide (real_clip_region))
-    {
-      handle_cursor = TRUE;
-      gdk_fb_cursor_hide ();
-    }
-
-  for (i = 0; i < nspans; i++)
-    {
-      GdkSpan *cur;
-      
-      cur = &spans[i];
-      
-      cur->x += private->abs_x;
-      cur->y += private->abs_y;
-
-      if ( (cur->y < private->llim_y) || (cur->y >= private->lim_y))
-       cur->width = 0;
-      
-      if (cur->x < private->llim_x)
-       {
-         cur->width -= private->llim_x - cur->x;
-         cur->x = private->llim_x;
-       }
-      
-      if (cur->x + cur->width > private->lim_x)
-       {
-         cur->width = private->lim_x - cur->x;
-       }
-
-      if (cur->width <= 0)
-       cur->width = 0;
-    }
-
-  gdk_region_spans_intersect_foreach (real_clip_region,
-                                     spans,
-                                     nspans,
-                                     sorted,
-                                     gdk_fb_fill_span_helper,
-                                     &info);
-
-  gdk_region_destroy (real_clip_region);
-  if (handle_cursor)
-    gdk_fb_cursor_unhide ();
-}
-
-void
-gdk_fb_drawing_context_init (GdkFBDrawingContext *dc,
-                            GdkDrawable *drawable,
-                            GdkGC *gc,
-                            gboolean draw_bg,
-                            gboolean do_clipping)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  dc->mem = private->mem;
-  dc->rowstride = private->rowstride;
-  dc->handle_cursor = FALSE;
-  dc->bgpm = NULL;
-  dc->bg_relto = private->wrapper;
-  dc->draw_bg = draw_bg;
-
-  GDK_CHECK_IMPL (drawable);
-
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      dc->bgpm = GDK_WINDOW_P (private->wrapper)->bg_pixmap;
-      if (dc->bgpm == GDK_PARENT_RELATIVE_BG)
-       {
-         for (; dc->bgpm == GDK_PARENT_RELATIVE_BG && dc->bg_relto; dc->bg_relto = (GdkWindow *)GDK_WINDOW_P (dc->bg_relto)->parent)
-           dc->bgpm = GDK_WINDOW_P (dc->bg_relto)->bg_pixmap;
-       }
-
-      if (dc->bgpm == GDK_NO_BG)
-       dc->bgpm = NULL;
-    }
-  dc->clipxoff = - private->abs_x;
-  dc->clipyoff = - private->abs_y;
-
-  dc->real_clip_region = gdk_fb_clip_region (drawable, gc, do_clipping, TRUE, TRUE);
-
-  if (gc)
-    {
-      dc->clipxoff -= GDK_GC_FBDATA (gc)->values.clip_x_origin;
-      dc->clipyoff -= GDK_GC_FBDATA (gc)->values.clip_y_origin;
-
-      if (GDK_GC_FBDATA (gc)->values.clip_mask)
-       {
-         dc->clipmem = GDK_DRAWABLE_IMPL_FBDATA (GDK_GC_FBDATA (gc)->values.clip_mask)->mem;
-         dc->clip_rowstride = GDK_DRAWABLE_IMPL_FBDATA (GDK_GC_FBDATA (gc)->values.clip_mask)->rowstride;
-       }
-    }
-
-  if (do_clipping &&
-      private->mem == GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->mem &&
-      gdk_fb_cursor_region_need_hide (dc->real_clip_region))
-    {
-      dc->handle_cursor = TRUE;
-      gdk_fb_cursor_hide ();
-    }
-}
-
-void
-gdk_fb_drawing_context_finalize (GdkFBDrawingContext *dc)
-{
-  gdk_region_destroy (dc->real_clip_region);
-
-  if (dc->handle_cursor)
-    gdk_fb_cursor_unhide ();
-}
-
-void
-gdk_fb_draw_drawable_2 (GdkDrawable *drawable,
-                       GdkGC       *gc,
-                       GdkPixmap   *src,
-                       gint         xsrc,
-                       gint         ysrc,
-                       gint         xdest,
-                       gint         ydest,
-                       gint         width,
-                       gint         height,
-                       gboolean     draw_bg,
-                       gboolean     do_clipping)
-{
-  GdkFBDrawingContext *dc, dc_data;
-  dc = &dc_data;
-
-  GDK_CHECK_IMPL (src);
-  GDK_CHECK_IMPL (drawable);
-  
-  gdk_fb_drawing_context_init (dc, drawable, gc, draw_bg, do_clipping);
-  gdk_fb_draw_drawable_3 (drawable, gc, src, dc, xsrc, ysrc, xdest, ydest, width, height);
-  gdk_fb_drawing_context_finalize (dc);
-}
-
-void
-gdk_fb_draw_drawable_3 (GdkDrawable *drawable,
-                       GdkGC       *gc,
-                       GdkPixmap   *src,
-                       GdkFBDrawingContext *dc,
-                       gint         xsrc,
-                       gint         ysrc,
-                       gint         xdest,
-                       gint         ydest,
-                       gint         width,
-                       gint         height)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  GdkDrawableFBData *src_private = GDK_DRAWABLE_FBDATA (src);
-  GdkRectangle rect;
-  int src_x_off, src_y_off;
-  GdkRegion *tmpreg, *real_clip_region;
-  int i;
-  int draw_direction = 1;
-  gdk_fb_draw_drawable_func *draw_func = NULL;
-  GdkGCFBData *gc_private;
-
-  g_assert (gc);
-
-  GDK_CHECK_IMPL (src);
-  GDK_CHECK_IMPL (drawable);
-
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      if (!GDK_WINDOW_IS_MAPPED (private->wrapper))
-       return;
-      if (GDK_WINDOW_P (private->wrapper)->input_only)
-       g_error ("Drawing on the evil input-only!");
-    }
-
-  gc_private = GDK_GC_FBDATA (gc);
-  
-  if (drawable == src)
-    {
-      GdkRegionBox srcb, destb;
-      srcb.x1 = xsrc;
-      srcb.y1 = ysrc;
-      srcb.x2 = xsrc + width;
-      srcb.y2 = ysrc + height;
-      destb.x1 = xdest;
-      destb.y1 = ydest;
-      destb.x2 = xdest + width;
-      destb.y2 = ydest + height;
-
-      if (EXTENTCHECK (&srcb, &destb) && ((ydest > ysrc) || ((ydest == ysrc) && (xdest > xsrc))))
-       draw_direction = -1;
-    }
-
-  switch (src_private->depth)
-    {
-    case 1:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_1];
-      break;
-    case 8:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_8];
-      break;
-    case 16:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_16];
-      break;
-    case 24:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_24];
-      break;
-    case 32:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_32];
-      break;
-    case 77:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_7_AA_GRAYVAL];
-      break;
-    case 78:
-      draw_func = gc_private->draw_drawable[GDK_FB_SRC_BPP_8_AA_GRAYVAL];
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-    }
-  
-  /* Do some magic to avoid creating extra regions unnecessarily */
-  tmpreg = dc->real_clip_region;
-
-  rect.x = xdest + private->abs_x;
-  rect.y = ydest + private->abs_y;
-  rect.width = width;
-  rect.height = height;
-  real_clip_region = gdk_region_rectangle (&rect);
-  gdk_region_intersect (real_clip_region, tmpreg);
-
-  rect.x = xdest + private->abs_x;
-  rect.y = ydest + private->abs_y;
-  rect.width = MAX (src_private->width - xsrc, 0);
-  rect.height = MAX (src_private->height - ysrc, 0);
-  if (!rect.width || !rect.height)
-    goto out;
-  tmpreg = gdk_region_rectangle (&rect);
-  gdk_region_intersect (real_clip_region, tmpreg);
-  gdk_region_destroy (tmpreg);
-
-  src_x_off = (src_private->abs_x + xsrc) - (private->abs_x + xdest);
-  src_y_off = (src_private->abs_y + ysrc) - (private->abs_y + ydest);
-
-  for (i = (draw_direction>0)?0:real_clip_region->numRects-1; i >= 0 && i < real_clip_region->numRects; i+=draw_direction)
-    {
-      GdkRegionBox *cur = &real_clip_region->rects[i];
-
-      (*draw_func) (drawable,
-                   gc,
-                   src,
-                   dc,
-                   cur->y1,
-                   cur->y2,
-                   cur->x1,
-                   cur->x2,
-                   src_x_off,
-                   src_y_off,
-                   draw_direction);
-    }
-
- out:
-  gdk_region_destroy (real_clip_region);
-}
-
-
-void
-gdk_fb_draw_drawable (GdkDrawable *drawable,
-                     GdkGC       *gc,
-                     GdkPixmap   *src,
-                     gint         xsrc,
-                     gint         ysrc,
-                     gint         xdest,
-                     gint         ydest,
-                     gint         width,
-                     gint         height)
-{
-  GdkPixmap   *src_impl;
-
-  if (GDK_IS_DRAWABLE_IMPL_FBDATA (src))
-    src_impl = src;
-  else
-    src_impl = GDK_DRAWABLE_IMPL (src);
-
-  GDK_CHECK_IMPL (drawable);
-  
-  gdk_fb_draw_drawable_2 (drawable, gc, src_impl , xsrc, ysrc, xdest, ydest, width, height, TRUE, TRUE);
-}
-
-#ifdef EMULATE_GDKFONT
-static void
-gdk_fb_draw_text(GdkDrawable    *drawable,
-                GdkFont        *font,
-                GdkGC          *gc,
-                gint            x,
-                gint            y,
-                const gchar    *text,
-                gint            text_length)
-{
-  GdkFontPrivateFB *private;
-  GdkDrawableFBData *drawable_private;
-  guchar *utf8, *utf8_end;
-  PangoGlyphString *glyphs = pango_glyph_string_new ();
-  PangoEngineShape *shaper, *last_shaper;
-  PangoAnalysis analysis;
-  guchar *p, *start;
-  gint x_offset;
-  int i;
-  
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  private = (GdkFontPrivateFB*) font;
-  drawable_private = GDK_DRAWABLE_FBDATA (drawable);
-
-  utf8 = alloca (text_length*2);
-
-  /* Convert latin-1 to utf8 */
-  p = utf8;
-  for (i = 0; i < text_length; i++)
-    {
-      if (text[i]==0)
-       *p++ = 1; /* Hack to handle embedded nulls */
-      else
-       {
-         if(((guchar)text[i])<128)
-           *p++ = text[i];
-         else
-           {
-             *p++ = ((((guchar)text[i])>>6) & 0x3f) | 0xC0;
-             *p++ = (((guchar)text[i]) & 0x3f) | 0x80;
-           }
-       }
-    }
-  utf8_end = p;
-
-  last_shaper = NULL;
-  shaper = NULL;
-
-  x_offset = 0;
-  p = start = utf8;
-  while (p < utf8_end)
-    {
-      gunichar wc = g_utf8_get_char (p);
-      p = g_utf8_next_char (p);
-      shaper = pango_font_find_shaper (private->pango_font, pango_language_from_string ("fr"), wc);
-      if (shaper != last_shaper)
-       {
-         analysis.shape_engine = shaper;
-         analysis.lang_engine = NULL;
-         analysis.font = private->pango_font;
-         analysis.level = 0;
-         
-         pango_shape (start, p - start, &analysis, glyphs);
-
-         gdk_draw_glyphs (drawable_private->wrapper,
-                          gc, private->pango_font,
-                          x + PANGO_PIXELS (x_offset), y,
-                          glyphs);
-         
-         for (i = 0; i < glyphs->num_glyphs; i++)
-           x_offset += glyphs->glyphs[i].geometry.width;
-         
-         start = p;
-       }
-
-      last_shaper = shaper;
-    }
-
-  if (p > start)
-    {
-      analysis.shape_engine = shaper;
-      analysis.lang_engine = NULL;
-      analysis.font = private->pango_font;
-      analysis.level = 0;
-      
-      pango_shape (start, p - start, &analysis, glyphs);
-      
-      gdk_draw_glyphs (drawable_private->wrapper,
-                      gc, private->pango_font,
-                      x + PANGO_PIXELS (x_offset), y,
-                      glyphs);
-    }
-  
-  pango_glyph_string_free (glyphs);
-      
-  return;
-}
-
-#else
-static void
-gdk_fb_draw_text(GdkDrawable    *drawable,
-                GdkFont        *font,
-                GdkGC          *gc,
-                gint            x,
-                gint            y,
-                const gchar    *text,
-                gint            text_length)
-{
-  g_warning ("gdk_fb_draw_text NYI");
-}
-#endif
-
-static void
-gdk_fb_draw_text_wc (GdkDrawable    *drawable,
-                    GdkFont         *font,
-                    GdkGC           *gc,
-                    gint             x,
-                    gint             y,
-                    const GdkWChar *text,
-                    gint             text_length)
-{
-  g_warning ("gdk_fb_draw_text_wc NYI");
-}
-
-void
-gdk_fb_draw_rectangle (GdkDrawable    *drawable,
-                      GdkGC          *gc,
-                      gboolean        filled,
-                      gint            x,
-                      gint            y,
-                      gint            width,
-                      gint            height)
-{
-  GdkDrawableFBData *private;
-  
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  
-  if (filled)
-    {
-      gboolean handle_cursor = FALSE;
-      GdkRectangle tmprect;
-      GdkRegion *tmpreg;
-      GdkRegion *real_clip_region;
-      GdkColor color;
-      int i;
-      
-      if (GDK_GC_FBDATA (gc)->values_mask & GDK_GC_FOREGROUND)
-       color = GDK_GC_FBDATA (gc)->values.foreground;
-      else if (GDK_IS_WINDOW (private->wrapper))
-       color = GDK_WINDOW_P (private->wrapper)->bg_color;
-      else
-       gdk_color_black (private->colormap, &color);
-      
-      real_clip_region = gdk_fb_clip_region (drawable, gc, TRUE, GDK_GC_FBDATA (gc)->values.function != GDK_INVERT, TRUE);
-      
-      if (private->mem == GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->mem &&
-         gdk_fb_cursor_region_need_hide (real_clip_region))
-       {
-         handle_cursor = TRUE;
-         gdk_fb_cursor_hide ();
-       }
-      
-      x += private->abs_x;
-      y += private->abs_y;
-  
-      if (x <  private->llim_x)
-       {
-         width -= private->llim_x - x;
-         x = private->llim_x;
-       }
-      if (x + width >  private->lim_x)
-       width =  private->lim_x - x;
-      
-      if (y <  private->llim_y)
-       {
-         height -= private->llim_y - y;
-         y = private->llim_y;
-       }
-      if (y + height >  private->lim_y)
-       height =  private->lim_y - y;
-
-      tmprect.x = x;
-      tmprect.y = y;
-      tmprect.width = width;
-      tmprect.height = height;
-      tmpreg = gdk_region_rectangle (&tmprect);
-      
-      gdk_region_intersect (tmpreg, real_clip_region);
-      
-      for (i = 0; i < tmpreg->numRects; i++)
-       {
-         GdkRectangle r;
-         r.x = tmpreg->rects[i].x1;
-         r.y = tmpreg->rects[i].y1;
-         r.width = tmpreg->rects[i].x2 - tmpreg->rects[i].x1;
-         r.height = tmpreg->rects[i].y2 - tmpreg->rects[i].y1;
-
-         if ((r.width > 0) && (r.height > 0))
-           (GDK_GC_FBDATA (gc)->fill_rectangle) (drawable, gc, &r, &color);
-       }
-      
-      gdk_region_destroy (tmpreg);
-      
-      gdk_region_destroy (real_clip_region);
-      if (handle_cursor)
-       gdk_fb_cursor_unhide ();
-    }
-  else
-    {
-      GdkPoint pts[5];
-      
-      pts[0].x = pts[4].x = x;
-      pts[0].y = pts[4].y = y;
-      pts[1].x = x + width;
-      pts[1].y = y;
-      pts[2].x = x + width;
-      pts[2].y = y + height;
-      pts[3].x = x;
-      pts[3].y = y + height;
-      gdk_fb_draw_lines (drawable, gc, pts, 5);
-    }
-
-}
-
-static void
-gdk_fb_draw_points (GdkDrawable    *drawable,
-                   GdkGC          *gc,
-                   GdkPoint       *points,
-                   gint            npoints)
-{
-  GdkSpan *spans = g_alloca (npoints * sizeof(GdkSpan));
-  int i;
-
-  for (i = 0; i < npoints; i++)
-    {
-      spans[i].x = points[i].x;
-      spans[i].y = points[i].y;
-      spans[i].width = 1;
-    }
-
-  gdk_fb_fill_spans (drawable, gc, spans, npoints, FALSE);
-}
-
-static void
-gdk_fb_draw_arc (GdkDrawable    *drawable,
-                GdkGC          *gc,
-                gboolean        filled,
-                gint            x,
-                gint            y,
-                gint            width,
-                gint            height,
-                gint            angle1,
-                gint            angle2)
-{
-  miArc arc;
-
-  arc.x = x;
-  arc.y = y;
-  arc.width = width;
-  arc.height = height;
-  arc.angle1 = angle1;
-  arc.angle2 = angle2;
-
-  if (filled)
-    miPolyFillArc (drawable, gc, 1, &arc);
-  else
-    miPolyArc (drawable, gc, 1, &arc);
-}
-
-static void
-gdk_fb_draw_polygon (GdkDrawable    *drawable,
-                    GdkGC          *gc,
-                    gboolean        filled,
-                    GdkPoint       *points,
-                    gint            npoints)
-{
-  if (filled)
-    miFillPolygon (drawable, gc, 0, 0, npoints, points);
-  else
-    {
-      gint tmp_npoints;
-      gboolean free_points = FALSE;
-      GdkPoint *tmp_points;
-
-      if (points[0].x != points[npoints-1].x || points[0].y != points[npoints-1].y)
-       {
-         tmp_npoints = npoints + 1;
-         tmp_points = g_new (GdkPoint, tmp_npoints);
-         free_points = TRUE;
-         memcpy (tmp_points, points, sizeof(GdkPoint) * npoints);
-         tmp_points[npoints].x = points[0].x;
-         tmp_points[npoints].y = points[0].y;
-       }
-      else
-       {
-         tmp_npoints = npoints;
-         tmp_points = points;
-       }
-
-      gdk_fb_draw_lines (drawable, gc, tmp_points, tmp_npoints);
-      
-      if (free_points)
-       g_free (tmp_points);
-    }
-}
-
-static void
-gdk_fb_draw_lines (GdkDrawable    *drawable,
-                  GdkGC          *gc,
-                  GdkPoint       *points,
-                  gint            npoints)
-{
-  GdkGCFBData *private;
-
-  private = GDK_GC_FBDATA (gc);
-  if (private->values.line_width > 0)
-    {
-      if ((private->values.line_style != GDK_LINE_SOLID) && private->dash_list)
-       miWideDash (drawable, gc, 0, npoints, points);
-      else 
-       miWideLine (drawable, gc, 0, npoints, points);
-    }
-  else
-    {
-      if ((private->values.line_style != GDK_LINE_SOLID) && private->dash_list)
-       miZeroDashLine (drawable, gc, 0, npoints, points);
-      else 
-       miZeroLine (drawable, gc, 0, npoints, points);
-    }
-}
-
-static void
-gdk_fb_draw_segments (GdkDrawable    *drawable,
-                     GdkGC          *gc,
-                     GdkSegment     *segs,
-                     gint            nsegs)
-{
-  GdkPoint pts[2];
-  int i;
-
-  for(i = 0; i < nsegs; i++)
-    {
-      pts[0].x = segs[i].x1;
-      pts[0].y = segs[i].y1;
-      pts[1].x = segs[i].x2;
-      pts[1].y = segs[i].y2;
-
-      gdk_fb_draw_lines (drawable, gc, pts, 2);
-    }
-}
-
-void
-gdk_fb_drawable_clear (GdkDrawable *d)
-{
-  extern void
-    _gdk_windowing_window_clear_area (GdkWindow *window,
-                                     gint       x,
-                                     gint       y,
-                                     gint       width,
-                                     gint       height);
-
-  _gdk_windowing_window_clear_area (d, 0, 0, GDK_DRAWABLE_IMPL_FBDATA (d)->width, GDK_DRAWABLE_IMPL_FBDATA (d)->height);
-}
-
-static void
-gdk_fb_draw_image (GdkDrawable *drawable,
-                  GdkGC       *gc,
-                  GdkImage    *image,
-                  gint         xsrc,
-                  gint         ysrc,
-                  gint         xdest,
-                  gint         ydest,
-                  gint         width,
-                  gint         height)
-{
-  GdkImagePrivateFB *image_private;
-  GdkPixmapFBData fbd;
-
-  g_return_if_fail (drawable != NULL);
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (gc != NULL);
-
-  image_private = (GdkImagePrivateFB*) image;
-
-  g_return_if_fail (image->type == GDK_IMAGE_NORMAL);
-
-  /* Fake its existence as a pixmap */
-  memset (&fbd, 0, sizeof(fbd));
-
-  ((GTypeInstance *)&fbd)->g_class = g_type_class_peek (_gdk_pixmap_impl_get_type ());
-  
-  fbd.drawable_data.mem = image->mem;
-  fbd.drawable_data.rowstride = image->bpl;
-  fbd.drawable_data.width = fbd.drawable_data.lim_x = image->width;
-  fbd.drawable_data.height = fbd.drawable_data.lim_y = image->height;
-  fbd.drawable_data.depth = image->depth;
-  fbd.drawable_data.window_type = GDK_DRAWABLE_PIXMAP;
-  fbd.drawable_data.colormap = gdk_colormap_get_system ();
-  
-  gdk_fb_draw_drawable_2 (drawable, gc, (GdkPixmap *)&fbd, xsrc, ysrc, xdest, ydest, width, height, TRUE, TRUE);
-}
-
-static gint
-gdk_fb_get_depth (GdkDrawable *drawable)
-{
-  return GDK_DRAWABLE_FBDATA (drawable)->depth;
-}
-
-static GdkScreen*
-gdk_fb_get_screen (GdkDrawable *drawable)
-{
-  return gdk_screen_get_default();
-}
-
-static GdkVisual*
-gdk_fb_get_visual (GdkDrawable    *drawable)
-{
-  return gdk_visual_get_system();
-}
-
-#ifdef ENABLE_SHADOW_FB
-static void
-gdk_shadow_fb_draw_rectangle (GdkDrawable      *drawable,
-                             GdkGC            *gc,
-                             gboolean          filled,
-                             gint              x,
-                             gint              y,
-                             gint              width,
-                             gint              height)
-{
-  GdkDrawableFBData *private;
-
-  gdk_fb_draw_rectangle (drawable, gc, filled, x, y, width, height);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      gint extra_width;
-  
-      minx = x + private->abs_x;
-      miny = y + private->abs_y;
-      maxx = x + width + private->abs_x;
-      maxy = y + height + private->abs_y;
-      
-      if (!filled)
-       {
-         extra_width = (GDK_GC_FBDATA (gc)->values.line_width + 1) / 2;
-         
-         minx -= extra_width;
-         miny -= extra_width;
-         maxx += extra_width;
-         maxy += extra_width;
-       }
-      gdk_shadow_fb_update (minx, miny, maxx, maxy);
-    }
-}
-
-static void
-gdk_shadow_fb_draw_arc (GdkDrawable      *drawable,
-                       GdkGC            *gc,
-                       gboolean          filled,
-                       gint              x,
-                       gint              y,
-                       gint              width,
-                       gint              height,
-                       gint              angle1,
-                       gint              angle2)
-{
-  GdkDrawableFBData *private;
-  
-  gdk_fb_draw_arc (drawable, gc, filled, x, y, width, height, angle1, angle2);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      gint extra_width;
-  
-      minx = x + private->abs_x;
-      miny = y + private->abs_y;
-      maxx = x + width + private->abs_x;
-      maxy = y + height + private->abs_y;
-      
-      if (!filled)
-       {
-         extra_width = (GDK_GC_FBDATA (gc)->values.line_width + 1) / 2;
-         
-         minx -= extra_width;
-         miny -= extra_width;
-         maxx += extra_width;
-         maxy += extra_width;
-       }
-      gdk_shadow_fb_update (minx, miny, maxx, maxy);
-    }
-}
-
-static void
-gdk_shadow_fb_draw_polygon (GdkDrawable      *drawable,
-                           GdkGC            *gc,
-                           gboolean          filled,
-                           GdkPoint         *points,
-                           gint              npoints)
-{
-  GdkDrawableFBData *private;
-
-  gdk_fb_draw_polygon (drawable, gc, filled, points, npoints);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      gint extra_width;
-      int i;
-  
-      minx = maxx = points[0].x;
-      miny = maxy = points[0].y;
-
-      for (i = 1; i < npoints; i++)
-       {
-         minx = MIN(minx, points[i].x);
-         maxx = MAX(maxx, points[i].x);
-         miny = MIN(miny, points[i].y);
-         maxy = MAX(maxy, points[i].y);
-       }
-      
-      if (!filled)
-       {
-         extra_width = (GDK_GC_FBDATA (gc)->values.line_width + 1) / 2;
-         
-         minx -= extra_width;
-         miny -= extra_width;
-         maxx += extra_width;
-         maxy += extra_width;
-       }
-      gdk_shadow_fb_update (minx + private->abs_x, miny + private->abs_y,
-                           maxx + private->abs_x, maxy + private->abs_y);
-    }
-}
-
-static void
-gdk_shadow_fb_draw_text (GdkDrawable      *drawable,
-                        GdkFont          *font,
-                        GdkGC            *gc,
-                        gint              x,
-                        gint              y,
-                        const gchar      *text,
-                        gint              text_length)
-{
-  gdk_fb_draw_text (drawable, font, gc, x, y, text, text_length);
-}
-
-static void
-gdk_shadow_fb_draw_text_wc (GdkDrawable      *drawable,
-                           GdkFont          *font,
-                           GdkGC            *gc,
-                           gint              x,
-                           gint              y,
-                           const GdkWChar   *text,
-                           gint              text_length)
-{
-  gdk_fb_draw_text_wc (drawable, font, gc, x, y, text, text_length);
-}
-
-static void
-gdk_shadow_fb_draw_drawable (GdkDrawable      *drawable,
-                            GdkGC            *gc,
-                            GdkPixmap        *src,
-                            gint              xsrc,
-                            gint              ysrc,
-                            gint              xdest,
-                            gint              ydest,
-                            gint              width,
-                            gint              height)
-{
-  GdkDrawableFBData *private;
-  
-  gdk_fb_draw_drawable (drawable, gc, src, xsrc, ysrc, xdest, ydest, width, height);
-  
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    gdk_shadow_fb_update (xdest + private->abs_x, ydest + private->abs_y,
-                         xdest + private->abs_x + width, ydest + private->abs_y + height);
-}
-
-static void
-gdk_shadow_fb_draw_image (GdkDrawable      *drawable,
-                         GdkGC            *gc,
-                         GdkImage         *image,
-                         gint              xsrc,
-                         gint              ysrc,
-                         gint              xdest,
-                         gint              ydest,
-                         gint              width,
-                         gint              height)
-{
-  GdkDrawableFBData *private;
-  
-  gdk_fb_draw_image (drawable, gc, image, xsrc, ysrc, xdest, ydest, width, height);
-  
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    gdk_shadow_fb_update (xdest + private->abs_x, ydest + private->abs_y,
-                         xdest + private->abs_x + width, ydest + private->abs_y + height);
-}
-
-static void
-gdk_shadow_fb_draw_points (GdkDrawable      *drawable,
-                          GdkGC            *gc,
-                          GdkPoint         *points,
-                          gint              npoints)
-{
-  GdkDrawableFBData *private;
-
-  gdk_fb_draw_points (drawable, gc, points, npoints);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      int i;
-  
-      minx = maxx = points[0].x;
-      miny = maxy = points[0].y;
-
-      for (i = 1; i < npoints; i++)
-       {
-         minx = MIN(minx, points[i].x);
-         maxx = MAX(maxx, points[i].x);
-         miny = MIN(miny, points[i].y);
-         maxy = MAX(maxy, points[i].y);
-       }
-      
-      gdk_shadow_fb_update (minx + private->abs_x, miny + private->abs_y,
-                           maxx + private->abs_x, maxy + private->abs_y);
-    }
-}
-
-static void
-gdk_shadow_fb_draw_segments (GdkDrawable      *drawable,
-                            GdkGC            *gc,
-                            GdkSegment       *segs,
-                            gint              nsegs)
-{
-  GdkDrawableFBData *private;
-
-  gdk_fb_draw_segments (drawable, gc, segs, nsegs);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      gint extra_width;
-      int i;
-  
-      minx = maxx = segs[0].x1;
-      miny = maxy = segs[0].y1;
-
-      for (i = 0; i < nsegs; i++)
-       {
-         minx = MIN(minx, segs[i].x1);
-         maxx = MAX(maxx, segs[i].x1);
-         minx = MIN(minx, segs[i].x2);
-         maxx = MAX(maxx, segs[i].x2);
-         
-         miny = MIN(miny, segs[i].y1);
-         maxy = MAX(maxy, segs[i].y1);
-         miny = MIN(miny, segs[i].y2);
-         maxy = MAX(maxy, segs[i].y2);
-
-       }
-      
-      extra_width = (GDK_GC_FBDATA (gc)->values.line_width + 1) / 2;
-      
-      minx -= extra_width;
-      miny -= extra_width;
-      maxx += extra_width;
-      maxy += extra_width;
-      
-      gdk_shadow_fb_update (minx + private->abs_x, miny + private->abs_y,
-                           maxx + private->abs_x, maxy + private->abs_y);
-    }
-}
-
-static void
-gdk_shadow_fb_draw_lines (GdkDrawable      *drawable,
-                         GdkGC            *gc,
-                         GdkPoint         *points,
-                         gint              npoints)
-{
-  GdkDrawableFBData *private;
-
-  gdk_fb_draw_lines (drawable, gc, points, npoints);
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  if (GDK_IS_WINDOW (private->wrapper))
-    {
-      gint minx, miny, maxx, maxy;
-      gint extra_width;
-      int i;
-  
-      minx = maxx = points[0].x;
-      miny = maxy = points[0].y;
-
-      for (i = 1; i < npoints; i++)
-       {
-         minx = MIN(minx, points[i].x);
-         maxx = MAX(maxx, points[i].x);
-         miny = MIN(miny, points[i].y);
-         maxy = MAX(maxy, points[i].y);
-       }
-      
-      extra_width = (GDK_GC_FBDATA (gc)->values.line_width + 1) / 2;
-         
-      minx -= extra_width;
-      miny -= extra_width;
-      maxx += extra_width;
-      maxy += extra_width;
-      
-      gdk_shadow_fb_update (minx + private->abs_x, miny + private->abs_y,
-                           maxx + private->abs_x, maxy + private->abs_y);
-    }
-}
-
-#endif
-
-gboolean
-gdk_draw_rectangle_alpha_libgtk_only (GdkDrawable *drawable,
-                                     gint         x,
-                                     gint         y,
-                                     gint         width,
-                                     gint         height,
-                                     GdkColor    *color,
-                                     guint16      alpha)
-{
-  return FALSE;
-}
diff --git a/gdk/linux-fb/gdkevents-fb.c b/gdk/linux-fb/gdkevents-fb.c
deleted file mode 100644 (file)
index 64cf1e9..0000000
+++ /dev/null
@@ -1,233 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdk.h"
-#include "gdkprivate-fb.h"
-#include "gdkinternals.h"
-#include "gdkfb.h"
-
-/*********************************************
- * Functions for maintaining the event queue *
- *********************************************/
-
-static gboolean fb_events_prepare  (GSource    *source,
-                                   gint       *timeout);
-static gboolean fb_events_check    (GSource    *source);
-static gboolean fb_events_dispatch (GSource    *source,
-                                   GSourceFunc callback,
-                                   gpointer    user_data);
-
-static GSourceFuncs fb_events_funcs = {
-  fb_events_prepare,
-  fb_events_check,
-  fb_events_dispatch,
-  NULL
-};
-
-guint32
-gdk_fb_get_time(void)
-{
-  GTimeVal tv;
-
-  g_get_current_time (&tv);
-  return (guint32) tv.tv_sec * 1000 + tv.tv_usec / 1000;
-}
-
-void 
-_gdk_events_init (void)
-{
-  GSource *source;
-
-  source = g_source_new (&fb_events_funcs, sizeof (GSource));
-  g_source_set_priority (source, GDK_PRIORITY_EVENTS);
-  
-  g_source_set_can_recurse (source, TRUE);
-  g_source_attach (source, NULL);
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_events_pending
- *
- *   Returns if events are pending on the queue.
- *
- * Arguments:
- *
- * Results:
- *   Returns TRUE if events are pending
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gboolean
-gdk_events_pending (void)
-{
-  return fb_events_check (NULL);
-}
-
-GdkEvent*
-gdk_event_get_graphics_expose (GdkWindow *window)
-{
-  GdkDisplay *display = gdk_display_get_default ();
-  GList *ltmp;
-  g_return_val_if_fail (window != NULL, NULL);
-  
-  for (ltmp = display->queued_events; ltmp; ltmp = ltmp->next)
-    {
-      GdkEvent *event = ltmp->data;
-      if (event->type == GDK_EXPOSE &&
-         event->expose.window == window)
-       break;
-    }
-
-  if (ltmp)
-    {
-      GdkEvent *retval = ltmp->data;
-
-      _gdk_event_queue_remove_link (display, ltmp);
-      g_list_free_1 (ltmp);
-
-      return retval;
-    }
-
-  return NULL;
-}
-
-void
-_gdk_events_queue (GdkDisplay *display)
-{  
-}
-
-static gboolean
-fb_events_prepare (GSource    *source,
-                  gint       *timeout)
-{
-  *timeout = -1;
-
-  return fb_events_check (source);
-}
-
-static gboolean
-fb_events_check (GSource    *source)
-{
-  gboolean retval;
-
-  GDK_THREADS_ENTER ();
-
-  retval = (_gdk_event_queue_find_first (gdk_display_get_default ()) != NULL);
-
-  GDK_THREADS_LEAVE ();
-
-  return retval;
-}
-
-static gboolean
-fb_events_dispatch (GSource  *source,
-                   GSourceFunc callback,
-                   gpointer  user_data)
-{
-  GdkEvent *event;
-
-  GDK_THREADS_ENTER ();
-
-  while ((event = _gdk_event_unqueue (gdk_display_get_default ())))
-    {
-      if (event->type == GDK_EXPOSE &&
-         event->expose.window == _gdk_parent_root)
-       gdk_window_clear_area (event->expose.window,
-                              event->expose.area.x,
-                              event->expose.area.y,
-                              event->expose.area.width,
-                              event->expose.area.height);
-
-      else if (_gdk_event_func)
-       (*_gdk_event_func) (event, _gdk_event_data);
-
-      gdk_event_free (event);
-    }
-
-  GDK_THREADS_LEAVE ();
-
-  return TRUE;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_flush
- *
- *   Flushes the Xlib output buffer and then waits
- *   until all requests have been received and processed
- *   by the X server. The only real use for this function
- *   is in dealing with XShm.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_flush (void)
-{
-}
-
-gboolean
-gdk_event_send_client_message_for_display (GdkDisplay      *display,
-                                          GdkEvent        *event,
-                                          GdkNativeWindow  winid)
-{
-  return FALSE;
-}
-
-void
-gdk_screen_broadcast_client_message (GdkScreen *screen,
-                                    GdkEvent  *sev)
-{
-}
-
-gboolean
-gdk_screen_get_setting (GdkScreen   *screen,
-                       const gchar *name,
-                       GValue      *value)
-{
-  return FALSE;
-}
-
-void
-gdk_display_sync (GdkDisplay *display)
-{
-}
-
-void
-gdk_display_flush (GdkDisplay * display)
-{
-}
diff --git a/gdk/linux-fb/gdkfb.h b/gdk/linux-fb/gdkfb.h
deleted file mode 100644 (file)
index fb433b8..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#ifndef GDKFB_H
-#define GDKFB_H 1
-
-#include "gdk/gdkprivate.h"
-
-typedef struct _GdkFBDisplay GdkFBDisplay;
-typedef struct _GdkFBWindow GdkFBWindow;
-
-extern GdkFBWindow *gdk_root_window;
-extern GdkFBDisplay *gdk_display;
-
-#define GDK_ROOT_WINDOW()             gdk_root_window
-#define GDK_DISPLAY()                 gdk_display
-
-#define gdk_font_lookup(xid)       ((GdkFont*) (xid))
-
-typedef enum {
-  GDK_FB_0_DEGREES,
-  GDK_FB_90_DEGREES,
-  GDK_FB_180_DEGREES,
-  GDK_FB_270_DEGREES
-} GdkFBAngle;
-
-#define GDK_FB_USE_CHILD_SHAPE ((void *)1)
-
-/* FB specific functions: */
-
-typedef gboolean (*GdkWindowChildChanged) (GdkWindow *window,
-                                          gint x, gint y,
-                                          gint width, gint height,
-                                          gpointer user_data);
-typedef void     (*GdkWindowChildGetPos)  (GdkWindow *window,
-                                          gint *x, gint *y,
-                                          gpointer user_data);
-
-void      gdk_fb_window_set_child_handler (GdkWindow              *window,
-                                          GdkWindowChildChanged  changed,
-                                          GdkWindowChildGetPos   get_pos,
-                                          gpointer               user_data);
-
-void      gdk_fb_set_rotation             (GdkFBAngle angle);
-
-#endif /* GDKFB_H */
diff --git a/gdk/linux-fb/gdkfbmanager.c b/gdk/linux-fb/gdkfbmanager.c
deleted file mode 100644 (file)
index 845a5b5..0000000
+++ /dev/null
@@ -1,407 +0,0 @@
-#include <config.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <sys/time.h>
-#include <sys/types.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <fcntl.h>
-
-#include "gdkfbmanager.h"
-
-typedef struct {
-  int socket;
-  int pid; /* -1 if not initialized */
-} Client;
-
-GHashTable *clients = NULL;
-GHashTable *new_clients = NULL;
-Client *current_owner = NULL;
-
-int master_socket;
-
-int create_master_socket (void)
-{
-  int fd;
-  struct sockaddr_un addr;
-
-  fd = socket (PF_UNIX, SOCK_STREAM, 0);
-
-  if (fd < 0) 
-    {
-      g_fprintf (stderr, "Error creating socket: %s\n", strerror(errno));
-      return -1;
-    }
-
-  unlink ("/tmp/.fb.manager");
-
-  addr.sun_family = AF_UNIX;
-  strcpy (addr.sun_path, "/tmp/.fb.manager");
-
-  if (bind(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0)
-    {
-      g_fprintf (stderr, "Unable to bind socket: %s\n", strerror (errno));
-      close (fd);
-      return -1;
-    }
-  
-
-  if (listen (fd, 10) < 0)
-    {
-      g_fprintf (stderr, "Unable to listen on socket: %s\n", strerror (errno));
-      close (fd);
-      return -1;
-    }
-
-  master_socket = fd;
-  return 0;
-}
-
-void
-handle_new_client (void)
-{
-  int fd;
-  Client *client;
-  int true_val;
-
-  fd = accept (master_socket, NULL, NULL);
-  
-  client = g_new (Client, 1);
-  client->socket = fd;
-  client->pid = -1;
-
-  true_val = 1;
-  setsockopt (fd, SOL_SOCKET, SO_PASSCRED, 
-             &true_val, sizeof (true_val));
-
-  g_print ("Handling new client %p conntecting, fd = %d\n", client, fd);
-
-  g_hash_table_insert (new_clients, client, client);
-}
-
-struct fd_data
-{
-  fd_set *read_fds;
-  fd_set *exception_fds;
-  int max_fd;
-};
-
-void 
-send_message (Client *client, enum FBManagerMessageType type, int data)
-{
-  struct FBManagerMessage msg;
-
-  msg.msg_type = type;
-  msg.data = data;
-
-  send (client->socket, &msg, sizeof (msg), 0);
-}
-
-gboolean
-wait_for_ack (Client *client, int timeout_secs)
-{
-  struct FBManagerMessage msg;
-  int res;
-  fd_set rfds;
-  struct timeval tv;
-
-  while (1)
-    {
-      FD_ZERO(&rfds);
-      FD_SET(client->socket, &rfds);
-      
-      tv.tv_sec = timeout_secs;
-      tv.tv_usec = 0;
-      
-      res = select (client->socket+1, &rfds, NULL, NULL, &tv);
-      
-      if (res == 0)
-       return FALSE;
-      
-      res = recv (client->socket, &msg, sizeof (msg), 0);
-      if (res != sizeof (msg))
-       return FALSE;
-      
-      if (msg.msg_type == FB_MANAGER_ACK)
-       return TRUE;
-    }
-}
-
-void
-find_another_client (gpointer key,
-                    gpointer value,
-                    gpointer user_data)
-{
-  Client **res;
-  Client *client;
-
-  res = user_data;
-  
-  if (*res)
-    return;
-
-  client = value;
-  if (client != current_owner)
-    *res = client;
-}
-
-void
-switch_to_client (Client *client)
-{
-  g_print ("Switch_to_client, client=%p, current_owner=%p\n", client, current_owner);
-
-  if ((current_owner == client) && (client != NULL))
-    return;
-
-  if (current_owner)
-    {
-      g_print ("switching from client fd=%d\n", current_owner->socket);
-      send_message (current_owner, FB_MANAGER_SWITCH_FROM, 0);
-      wait_for_ack (current_owner, 3);
-    }
-
-  current_owner = client;
-
-  if (current_owner)
-    {
-      g_print ("switching to client fd=%d\n", current_owner->socket);
-      send_message (current_owner, FB_MANAGER_SWITCH_TO, 0);
-    }
-}
-
-void
-close_client (Client *client)
-{
-  Client *other_client;
-  g_print ("Closing client %p (fd=%d)\n", 
-          client, client->socket);
-
-  if (current_owner == client)
-    {
-      other_client = NULL;
-      g_hash_table_foreach (clients,
-                           find_another_client,
-                           &other_client);
-      current_owner = NULL;
-      /* FIXME: This is a hack around the fact that the serial 
-        mouse driver had problems with opening and closing
-        the device almost at the same time. 
-      */
-      sleep (1);
-      switch_to_client (other_client);
-    }
-   
-  close (client->socket);
-  g_free (client);
-}
-
-
-/* Returns TRUE if the client was closed */
-gboolean 
-read_client_data (Client *client)
-{
-  struct FBManagerMessage fb_message;
-  struct msghdr msg;
-  struct iovec iov;
-  char control_buffer[256];
-  struct cmsghdr *cmsg;
-  int res;
-  struct ucred *creds;
-  Client *new_client;
-
-  iov.iov_base = &fb_message;
-  iov.iov_len = sizeof (fb_message);
-
-  cmsg = (struct cmsghdr *)control_buffer;
-  msg.msg_name = NULL;
-  msg.msg_namelen = 0;
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-  msg.msg_control = cmsg;
-  msg.msg_controllen = 256;
-  msg.msg_flags = 0;
-  
-  g_print ("Reading client data:");
-  res = recvmsg (client->socket, &msg, 0);
-  g_print ("%d bytes, (error: %s)\n", res, 
-          strerror (errno));
-  
-  if (res < 0)
-    return FALSE;
-
-  if (res == 0) 
-    {
-      close_client (client);
-      return TRUE;
-    }
-
-  if (res != sizeof (fb_message))
-    {
-      g_warning ("Packet with wrong size %d received", res);
-      return FALSE;
-    }
-
-  switch (fb_message.msg_type) {
-  case FB_MANAGER_NEW_CLIENT:
-    if (client->pid != -1)
-      {
-       g_warning ("Got a NEW_CLIENT message from an old client");
-       return FALSE;
-      }
-    creds = NULL;
-    for (cmsg = CMSG_FIRSTHDR(&msg);
-        cmsg != NULL;
-        cmsg = CMSG_NXTHDR(&msg,cmsg))
-      {
-       if (cmsg->cmsg_level == SOL_SOCKET && 
-           cmsg->cmsg_type ==  SCM_CREDENTIALS) 
-         {
-           creds = (struct ucred *) CMSG_DATA(cmsg);
-           break;
-         }
-      }
-    if (creds == NULL) 
-      {
-       g_warning ("Got no credentials in NEW_CLIENT message");
-       close_client (client);
-       return TRUE;
-      }
-    client->pid = creds->pid;
-
-    g_hash_table_insert (clients, GINT_TO_POINTER (client->pid), client);
-
-    g_print ("New client connected. Pid=%d\n", (int)creds->pid);
-    return TRUE;
-    break;
-  case FB_MANAGER_REQUEST_SWITCH_TO_PID:
-    if (client->pid == -1)
-      {
-       g_warning ("Got a message from an uninitialized client");
-       return FALSE;
-      }
-
-    new_client = g_hash_table_lookup (clients, GINT_TO_POINTER (fb_message.data));
-    if (new_client)
-      switch_to_client (new_client);
-    else
-      g_warning ("Switchto unknown PID");
-    break;
-  case FB_MANAGER_ACK:
-    if (client->pid == -1)
-      {
-       g_warning ("Got a message from an uninitialized client");
-       return FALSE;
-      }
-    g_warning ("Got an unexpected ACK");
-    break;
-  default:
-    g_warning ("Got unknown package type %d", fb_message.msg_type);
-    break;
-  }
-  return FALSE;
-}
-
-/* Returns TRUE if the client was closed */
-gboolean
-handle_client_data (gpointer key,
-                   gpointer value,
-                   gpointer user_data)
-{
-  Client *client;
-  struct fd_data *data;
-
-  client = value;
-  data = user_data;
-
-  if (FD_ISSET (client->socket, data->exception_fds))
-    {
-      close_client (client);
-      return TRUE;
-    }
-  else if (FD_ISSET (client->socket, data->read_fds))
-    {
-      return read_client_data (client);
-    }
-  
-  return FALSE;
-}
-
-void
-set_fds (gpointer key,
-        gpointer value,
-        gpointer user_data)
-{
-  struct fd_data *data;
-  Client *client;
-
-  client = value;
-  data = user_data;
-
-  FD_SET (client->socket, data->read_fds);
-  FD_SET (client->socket, data->exception_fds);
-  data->max_fd = MAX (data->max_fd, 
-                     client->socket);
-}
-
-void
-main_loop (void)
-{
-  fd_set read_fds;
-  fd_set exception_fds;
-  struct fd_data data;
-  int res;
-  
-  while (1)
-    {
-      FD_ZERO (&read_fds);
-      FD_ZERO (&exception_fds);
-      FD_SET (master_socket, &read_fds);
-
-      data.read_fds = &read_fds;
-      data.exception_fds = &exception_fds;
-      data.max_fd = master_socket;
-      
-      g_hash_table_foreach (clients,
-                           set_fds,
-                           &data);
-      g_hash_table_foreach (new_clients,
-                           set_fds,
-                           &data);
-      
-
-      res = select (data.max_fd+1, 
-                   &read_fds, NULL, &exception_fds, 
-                   NULL);
-
-      if (FD_ISSET (master_socket, &read_fds)) 
-       handle_new_client ();
-
-      g_hash_table_foreach_remove (clients,
-                                  handle_client_data,
-                                  &data);
-      g_hash_table_foreach_remove (new_clients,
-                                  handle_client_data,
-                                  &data);
-    }
-}
-
-
-int
-main (int argc, char *argv[])
-{
-  clients = g_hash_table_new (g_direct_hash,
-                             g_direct_equal);
-  new_clients = g_hash_table_new (g_direct_hash,
-                                 g_direct_equal);
-
-  create_master_socket ();
-
-  main_loop ();
-
-  return 0;
-}
diff --git a/gdk/linux-fb/gdkfbmanager.h b/gdk/linux-fb/gdkfbmanager.h
deleted file mode 100644 (file)
index 653a1c6..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-#ifndef __GDK_FB_MANAGER_H__
-#define __GDK_FB_MANAGER_H__
-
-enum FBManagerMessageType {
-  /* manager -> client */
-  FB_MANAGER_SWITCH_TO,
-  FB_MANAGER_SWITCH_FROM, /* requires ack */
-
-  /* client -> manager */
-  FB_MANAGER_NEW_CLIENT,
-  FB_MANAGER_REQUEST_SWITCH_TO_PID,
-  FB_MANAGER_ACK,
-};
-
-struct FBManagerMessage {
-  enum FBManagerMessageType msg_type;
-  int data;
-};
-#endif /* __GDK_FB_MANAGER_H__ */
diff --git a/gdk/linux-fb/gdkfbswitch.c b/gdk/linux-fb/gdkfbswitch.c
deleted file mode 100644 (file)
index 31179f4..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2001 Alexander Larsson
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <glib.h>
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-#include <unistd.h>
-
-#include "gdkfbmanager.h"
-
-int
-main (int argc, char *argv[])
-{
-  int fd;
-  struct sockaddr_un addr;
-  struct msghdr msg = {0};
-  struct cmsghdr *cmsg;
-  struct ucred credentials;
-  struct FBManagerMessage init_msg;
-  struct iovec iov;
-  char buf[CMSG_SPACE (sizeof (credentials))];  /* ancillary data buffer */
-  int *fdptr;
-  int res;
-
-  if (argc != 2)
-    {
-      g_print ("usage: fbswitch <pid>\n");
-      return 1;
-    }
-
-  fd = socket (PF_UNIX, SOCK_STREAM, 0);
-  
-  if (fd < 0)
-    return 1;
-
-  addr.sun_family = AF_UNIX;
-  strcpy (addr.sun_path, "/tmp/.fb.manager");
-
-  if (connect(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0) 
-    {
-      g_print ("connect failed\n");
-      close (fd);
-      return 1;
-    }
-  
-  credentials.pid = getpid ();
-  credentials.uid = geteuid ();
-  credentials.gid = getegid ();
-
-  init_msg.msg_type = FB_MANAGER_NEW_CLIENT;
-  iov.iov_base = &init_msg;
-  iov.iov_len = sizeof (init_msg);
-
-  msg.msg_name = NULL;
-  msg.msg_namelen = 0;
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-  msg.msg_control = buf;
-  msg.msg_controllen = sizeof buf;
-  cmsg = CMSG_FIRSTHDR(&msg);
-  cmsg->cmsg_level = SOL_SOCKET;
-  cmsg->cmsg_type = SCM_CREDENTIALS;
-  cmsg->cmsg_len = CMSG_LEN (sizeof (credentials));
-  /* Initialize the payload: */
-  fdptr = (int *)CMSG_DATA (cmsg);
-  memcpy (fdptr, &credentials, sizeof (credentials));
-  /* Sum of the length of all control messages in the buffer: */
-  msg.msg_controllen = cmsg->cmsg_len;
-
-  res = sendmsg (fd, &msg, 0);
-
-  init_msg.msg_type = FB_MANAGER_REQUEST_SWITCH_TO_PID;
-  init_msg.data = atoi (argv[1]);
-  /* Request a switch-to */
-  send (fd, &init_msg, sizeof (init_msg), 0);
-  g_print ("requested a switch to pid %d\n", init_msg.data);
-
-  return 0;
-}
diff --git a/gdk/linux-fb/gdkfont-fb.c b/gdk/linux-fb/gdkfont-fb.c
deleted file mode 100644 (file)
index b0bed69..0000000
+++ /dev/null
@@ -1,584 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <math.h>
-#include <stdlib.h>
-#include <string.h>
-#include "gdkfont.h"
-#include "gdkprivate-fb.h"
-#include "gdkpango.h"
-
-#include <pango/pango.h>
-
-#include <freetype/freetype.h>
-#if !defined(FREETYPE_MAJOR) || FREETYPE_MAJOR != 2
-#error "We need Freetype 2.0"
-#endif
-
-#ifdef EMULATE_GDKFONT
-static GHashTable *font_name_hash = NULL;
-static GHashTable *fontset_name_hash = NULL;
-
-static void
-gdk_font_hash_insert (GdkFontType type, GdkFont *font)
-{
-  GdkFontPrivateFB *private = (GdkFontPrivateFB *)font;
-  
-  GHashTable **hashp = (type == GDK_FONT_FONT) ?
-    &font_name_hash : &fontset_name_hash;
-
-  if (!*hashp)
-    *hashp = g_hash_table_new (g_str_hash, g_str_equal);
-
-  g_hash_table_insert (*hashp, private->name, font);
-}
-
-static void
-gdk_font_hash_remove (GdkFontType type, GdkFont *font)
-{
-  GdkFontPrivateFB *private = (GdkFontPrivateFB *)font;
-  
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  g_hash_table_remove (hash, private->name);
-}
-
-static GdkFont *
-gdk_font_hash_lookup (GdkFontType type, const gchar *font_name)
-{
-  GdkFont *result;
-  GHashTable *hash = (type == GDK_FONT_FONT) ?
-    font_name_hash : fontset_name_hash;
-
-  if (!hash)
-    return NULL;
-  else
-    {
-      result = g_hash_table_lookup (hash, font_name);
-      if (result)
-       gdk_font_ref (result);
-      
-      return result;
-    }
-}
-
-GdkFont*
-gdk_font_from_description_for_display (GdkDisplay           *display,
-                                      PangoFontDescription *desc)
-{
-  GdkFont *font;
-  GdkFontPrivateFB *private;
-  PangoFont *pango_font;
-  PangoContext *context;
-  PangoFontMetrics *metrics;
-  PangoLanguage *lang;
-  
-  g_return_val_if_fail (desc, NULL);
-
-  private = g_new0 (GdkFontPrivateFB, 1);
-  private->base.ref_count = 1;
-  private->name = NULL;
-  
-  font = (GdkFont*) private;
-  font->type = GDK_FONT_FONT;
-
-  context = gdk_pango_context_get ();
-  pango_context_set_base_dir (context, PANGO_DIRECTION_LTR);
-  pango_context_set_language (context, pango_language_from_string ("UNKNOWN"));
-
-  pango_font = pango_context_load_font (context, desc);
-  if (!pango_font)
-    {
-      desc = pango_font_description_copy (desc);
-      pango_font_description_set_family (desc, "sans");
-      pango_font = pango_context_load_font (context, desc);
-      if (!pango_font)
-       {
-         pango_font_description_set_style (desc, PANGO_STYLE_NORMAL);
-         pango_font_description_set_weight (desc, PANGO_WEIGHT_NORMAL);
-         pango_font_description_set_variant (desc, PANGO_VARIANT_NORMAL);
-         pango_font_description_set_stretch (desc, PANGO_STRETCH_NORMAL);
-         pango_font = pango_context_load_font (context, desc);
-       }
-      pango_font_description_free (desc);
-    }
-  
-  g_assert (pango_font != NULL);
-
-  if (pango_font == NULL)
-    {
-      g_free (private);
-      return NULL;
-    }
-  
-  lang = pango_context_get_language (context);
-  metrics = pango_font_get_metrics (pango_font, lang);
-
-  private->pango_font = pango_font;
-  
-  g_free (lang);
-  g_object_unref (context);
-
-  font->ascent = PANGO_PIXELS (pango_font_metrics_get_ascent (metrics));
-  font->descent = PANGO_PIXELS (pango_font_metrics_get_descent (metrics));
-
-  g_assert ((font->ascent > 0) || (font->descent > 0));
-
-  pango_font_metrics_unref (metrics);
-  
-  return font;
-}
-
-
-GdkFont*
-gdk_font_load_for_display (GdkDisplay  *display,
-                          const gchar *font_name)
-{
-  GdkFont *font;
-  GdkFontPrivateFB *private;
-  PangoFontDescription *desc;
-  gchar **pieces;
-
-  g_return_val_if_fail (font_name != NULL, NULL);
-
-  font = gdk_font_hash_lookup (GDK_FONT_FONT, font_name);
-  if (font)
-    return font;
-
-  desc = pango_font_description_new ();
-  
-  pieces = g_strsplit (font_name, "-", 8);
-
-  do {
-    if (!pieces[0])
-      break;
-    
-    if (!pieces[1])
-      break;
-    
-    if (!pieces[2])
-      break;
-
-    if (strcmp (pieces[2], "*")!=0)
-      pango_font_description_set_family (desc, pieces[2]);
-    
-    if (!pieces[3])
-      break;
-    
-    if (strcmp (pieces[3], "light")==0)
-      pango_font_description_set_weight (desc, PANGO_WEIGHT_LIGHT);
-    if (strcmp (pieces[3], "medium")==0)
-      pango_font_description_set_weight (desc, PANGO_WEIGHT_NORMAL);
-    if (strcmp (pieces[3], "bold")==0)
-      pango_font_description_set_weight (desc, PANGO_WEIGHT_BOLD);
-    
-    if (!pieces[4])
-      break;
-    
-    if (strcmp (pieces[4], "r")==0)
-      pango_font_description_set_style (desc, PANGO_STYLE_NORMAL);
-    if (strcmp (pieces[4], "i")==0)
-      pango_font_description_set_style (desc, PANGO_STYLE_ITALIC);
-    if (strcmp (pieces[4], "o")==0)
-      pango_font_description_set_style (desc, PANGO_STYLE_OBLIQUE);
-    
-    if (!pieces[5])
-      break;
-    if (!pieces[6])
-      break;
-    if (!pieces[7])
-      break;
-
-    if (strcmp (pieces[7], "*")!=0)
-      pango_font_description_set_size (desc, atoi (pieces[7]) * PANGO_SCALE);
-    if (pango_font_description_get_size (desc) == 0)
-      pango_font_description_set_size (desc, 12 * PANGO_SCALE);
-    
-  } while (0);
-  
-  font = gdk_font_from_description (desc);
-  private = (GdkFontPrivateFB*) font;
-  private->name = g_strdup (font_name);
-
-  gdk_font_hash_insert (GDK_FONT_FONT, font);
-
-  g_strfreev (pieces);
-
-  pango_font_description_free (desc);
-  
-  return font;
-}
-
-GdkFont*
-gdk_fontset_load (const gchar *fontset_name)
-{
-  return gdk_font_load(fontset_name);
-}
-
-void
-_gdk_font_destroy (GdkFont *font)
-{
-  GdkFontPrivateFB *private = (GdkFontPrivateFB *)font;
-  gdk_font_hash_remove (font->type, font);
-
-  g_object_unref (private->pango_font);
-  g_free (private->name);
-  g_free (font);
-}
-
-gint
-_gdk_font_strlen (GdkFont     *font,
-                 const gchar *str)
-{
-  GdkFontPrivateFB *font_private;
-
-  g_return_val_if_fail (font != NULL, -1);
-  g_return_val_if_fail (str != NULL, -1);
-
-  font_private = (GdkFontPrivateFB*) font;
-  
-  return strlen (str);
-}
-
-gint
-gdk_text_width (GdkFont      *font,
-               const gchar  *text,
-               gint          text_length)
-{
-  gint width = -1;
-  gdk_text_extents (font, text, text_length, NULL, NULL, &width, NULL, NULL);
-  return width;
-}
-
-/* Assumes text is in Latin-1 for performance reasons.
-   If you need another encoding, use pangofont */
-void
-gdk_text_extents (GdkFont     *font,
-                  const gchar *text,
-                  gint         text_length,
-                 gint        *lbearing,
-                 gint        *rbearing,
-                 gint        *width,
-                 gint        *ascent,
-                 gint        *descent)
-{
-  GdkFontPrivateFB *private;
-  guchar *utf8, *utf8_end;
-  PangoGlyphString *glyphs = pango_glyph_string_new ();
-  PangoEngineShape *shaper, *last_shaper;
-  PangoAnalysis analysis;
-  guchar *p, *start;
-  int i;
-  
-  g_return_if_fail (font != NULL);
-  g_return_if_fail (text != NULL);
-
-  private = (GdkFontPrivateFB*) font;
-
-  if(ascent)
-    *ascent = 0;
-  if(descent)
-    *descent = 0;
-  if(width)
-    *width = 0;
-  if(lbearing)
-    *lbearing = 0;
-  if(rbearing)
-    *rbearing = 0;
-
-  utf8 = alloca (text_length*2);
-
-  /* Convert latin-1 to utf8 */
-  p = utf8;
-  for (i = 0; i < text_length; i++)
-    {
-      if (text[i]==0)
-       *p++ = 1; /* Hack to handle embedded nulls */
-      else
-       {
-         if(((guchar)text[i])<128)
-           *p++ = text[i];
-         else
-           {
-             *p++ = ((((guchar)text[i])>>6) & 0x3f) | 0xC0;
-             *p++ = (((guchar)text[i]) & 0x3f) | 0x80;
-           }
-       }
-    }
-  utf8_end = p;
-
-  last_shaper = NULL;
-  shaper = NULL;
-
-  p = start = utf8;
-  while (p < utf8_end)
-    {
-      gunichar wc = g_utf8_get_char (p);
-      p = g_utf8_next_char (p);
-      shaper = pango_font_find_shaper (private->pango_font, pango_language_from_string ("fr"), wc);
-      if (shaper != last_shaper)
-       {
-         analysis.shape_engine = shaper;
-         analysis.lang_engine = NULL;
-         analysis.font = private->pango_font;
-         analysis.level = 0;
-
-         pango_shape (start, p - start, &analysis, glyphs);
-
-         for (i = 0; i < glyphs->num_glyphs; i++)
-           {
-             PangoRectangle ink_rect;
-             PangoGlyphGeometry *geometry = &glyphs->glyphs[i].geometry;
-             
-             pango_font_get_glyph_extents (private->pango_font, glyphs->glyphs[i].glyph,
-                                           &ink_rect, NULL);
-             
-             if(ascent)
-               *ascent = MAX (*ascent, ink_rect.y);
-             if(descent)
-               *descent = MAX (*descent, ink_rect.height - ink_rect.y);
-             if(width)
-               *width += geometry->width;
-             if(lbearing)
-               *lbearing = 0;
-             if(rbearing)
-               *rbearing = 0;
-             
-           }
-         
-         start = p;
-       }
-
-      last_shaper = shaper;
-    }
-
-  if (p > start)
-    {
-      analysis.shape_engine = shaper;
-      analysis.lang_engine = NULL;
-      analysis.font = private->pango_font;
-      analysis.level = 0;
-      
-      pango_shape (start, p - start, &analysis, glyphs);
-      
-      for (i = 0; i < glyphs->num_glyphs; i++)
-       {
-         PangoRectangle ink_rect;
-         PangoGlyphGeometry *geometry = &glyphs->glyphs[i].geometry;
-         
-         pango_font_get_glyph_extents (private->pango_font, glyphs->glyphs[i].glyph,
-                                       &ink_rect, NULL);
-         
-         if(ascent)
-           *ascent = MAX (*ascent, ink_rect.y);
-         if(descent)
-           *descent = MAX (*descent, ink_rect.height - ink_rect.y);
-         if(width)
-           *width += geometry->width;
-         if(lbearing)
-           *lbearing = 0;
-         if(rbearing)
-           *rbearing = 0;
-       }
-    }
-
-
-  
-  pango_glyph_string_free (glyphs);
-
-  if(ascent)
-    *ascent = PANGO_PIXELS (*ascent);
-  if(descent)
-    *descent = PANGO_PIXELS(*descent);
-  if(width)
-    *width = PANGO_PIXELS (*width);
-  if(lbearing)
-    *lbearing = PANGO_PIXELS (*lbearing);
-  if(rbearing)
-    *rbearing = PANGO_PIXELS (*rbearing);
-}
-
-#else
-
-/* Don't emulate GdkFont */
-static GdkFont *
-gdk_fb_bogus_font (gint height)
-{
-  GdkFont *font;
-  GdkFontPrivateFB *private;
-
-  private = g_new0 (GdkFontPrivateFB, 1);
-  font = (GdkFont *)private;
-  
-  font->type = GDK_FONT_FONT;
-  font->ascent = height*3/4;
-  font->descent = height/4;
-  private->size = height;
-  private->base.ref_count = 1;
-  return font;
-}
-
-GdkFont*
-gdk_font_from_description (PangoFontDescription *font_desc)
-{
-  g_return_val_if_fail (font_desc, NULL);
-
-  return gdk_fb_bogus_font (PANGO_PIXELS (pango_font_description_get_size (font_desc)));
-}
-
-GdkFont*
-gdk_fontset_load (const gchar *fontset_name)
-{
-  return gdk_fb_bogus_font (10);
-}
-
-GdkFont *
-gdk_font_load (const gchar *font_name)
-{
-  return gdk_fb_bogus_font (10);
-}
-
-void
-_gdk_font_destroy (GdkFont *font)
-{
-  g_free (font);
-}
-
-gint
-_gdk_font_strlen (GdkFont     *font,
-                 const gchar *str)
-{
-  GdkFontPrivateFB *font_private;
-  gint length = 0;
-
-  g_return_val_if_fail (font != NULL, -1);
-  g_return_val_if_fail (str != NULL, -1);
-
-  font_private = (GdkFontPrivateFB*) font;
-  
-  return strlen (str);
-}
-
-gint
-gdk_text_width (GdkFont      *font,
-               const gchar  *text,
-               gint          text_length)
-{
-  GdkFontPrivateFB *private;
-
-  private = (GdkFontPrivateFB*) font;
-
-  return (text_length * private->size) / 2;
-}
-
-void
-gdk_text_extents (GdkFont     *font,
-                  const gchar *text,
-                  gint         text_length,
-                 gint        *lbearing,
-                 gint        *rbearing,
-                 gint        *width,
-                 gint        *ascent,
-                 gint        *descent)
-{
-  if(ascent)
-    *ascent = font->ascent;
-  if(descent)
-    *descent = font->descent;
-  if(width)
-    *width = gdk_text_width(font, text, text_length);
-  if(lbearing)
-    *lbearing = 0;
-  if(rbearing)
-    *rbearing = 0;
-}
-
-
-#endif
-
-gint
-gdk_font_id (const GdkFont *font)
-{
-  const GdkFontPrivateFB *font_private;
-
-  g_return_val_if_fail (font != NULL, 0);
-
-  font_private = (const GdkFontPrivateFB*) font;
-
-  if (font->type == GDK_FONT_FONT)
-    {
-      return -1;
-    }
-  else
-    {
-      return 0;
-    }
-}
-
-gint
-gdk_font_equal (const GdkFont *fonta,
-                const GdkFont *fontb)
-{
-  const GdkFontPrivateFB *privatea;
-  const GdkFontPrivateFB *privateb;
-
-  g_return_val_if_fail (fonta != NULL, FALSE);
-  g_return_val_if_fail (fontb != NULL, FALSE);
-
-  privatea = (const GdkFontPrivateFB*) fonta;
-  privateb = (const GdkFontPrivateFB*) fontb;
-
-  if(fonta == fontb)
-    return TRUE;
-
-  return FALSE;
-}
-
-
-gint
-gdk_text_width_wc (GdkFont       *font,
-                  const GdkWChar *text,
-                  gint            text_length)
-{
-  return 0;
-}
-
-
-void
-gdk_text_extents_wc (GdkFont        *font,
-                    const GdkWChar *text,
-                    gint            text_length,
-                    gint           *lbearing,
-                    gint           *rbearing,
-                    gint           *width,
-                    gint           *ascent,
-                    gint           *descent)
-{
-  g_warning ("gdk_text_extents_wc() is not implemented\n");
-  return;
-}
diff --git a/gdk/linux-fb/gdkgc-fb.c b/gdk/linux-fb/gdkgc-fb.c
deleted file mode 100644 (file)
index 526be87..0000000
+++ /dev/null
@@ -1,380 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2000 Elliot Lee
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "gdkprivate-fb.h"
-#include "gdkgc.h"
-#include "gdkfb.h"
-#include "gdkregion-generic.h"
-
-typedef enum {
-  GDK_GC_DIRTY_CLIP = 1 << 0,
-  GDK_GC_DIRTY_TS = 1 << 1
-} GdkGCDirtyValues;
-
-static void gdk_fb_gc_finalize   (GObject         *obj);
-static void gdk_fb_gc_get_values (GdkGC           *gc,
-                                 GdkGCValues     *values);
-static void gdk_fb_gc_set_values (GdkGC           *gc,
-                                 GdkGCValues     *values,
-                                 GdkGCValuesMask  values_mask);
-static void gdk_fb_gc_set_dashes (GdkGC           *gc,
-                                 gint             dash_offset,
-                                 gint8            dash_list[],
-                                 gint             n);
-
-static gpointer parent_class = NULL;
-
-static void
-gdk_gc_fb_class_init (GdkGCFBClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GdkGCClass *gc_class = GDK_GC_CLASS (klass);
-  
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_fb_gc_finalize;
-
-  gc_class->get_values = gdk_fb_gc_get_values;
-  gc_class->set_values = gdk_fb_gc_set_values;
-  gc_class->set_dashes = gdk_fb_gc_set_dashes;
-}
-
-GType
-gdk_gc_fb_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkGCFBClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_gc_fb_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkGCFBData),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) NULL,
-      };
-      
-      object_type = g_type_register_static (GDK_TYPE_GC,
-                                            "GdkGCFB",
-                                            &object_info,
-                                           0);
-    }
-
-  return object_type;
-}
-
-GdkGC *
-_gdk_fb_gc_new (GdkDrawable      *drawable,
-               GdkGCValues      *values,
-               GdkGCValuesMask   values_mask)
-{
-  GdkGC *gc;
-  GdkGCFBData *private;
-
-  gc = g_object_new (gdk_gc_fb_get_type (), NULL);
-
-  _gdk_gc_init (gc, drawable, values, values_mask);
-
-  private = (GdkGCFBData *)gc;
-  
-  private->depth = GDK_DRAWABLE_FBDATA (drawable)->depth;
-  private->values.foreground.pixel = 255;
-  private->values.foreground.red =
-    private->values.foreground.green =
-    private->values.foreground.blue = 65535;
-
-  private->values.cap_style = GDK_CAP_BUTT;
-
-  _gdk_fb_gc_calc_state (gc, _GDK_FB_GC_DEPTH);
-
-  gdk_fb_gc_set_values (gc, values, values_mask);
-  return gc;
-}
-
-static void
-gdk_fb_gc_finalize (GObject *obj)
-{
-  GdkGC *gc = GDK_GC_P (obj);
-  GdkGCFBData *private;
-
-  private = GDK_GC_FBDATA (gc);
-
-  if (private->values.clip_mask)
-    gdk_pixmap_unref (private->values.clip_mask);
-
-  g_free (private->dash_list);
-
-  G_OBJECT_CLASS (parent_class)->finalize (obj);
-}
-
-static void
-gdk_fb_gc_get_values (GdkGC       *gc,
-                     GdkGCValues *values)
-{
-  *values = GDK_GC_FBDATA (gc)->values;
-}
-
-
-static void
-gdk_fb_gc_set_values (GdkGC           *gc,
-                     GdkGCValues     *values,
-                     GdkGCValuesMask  values_mask)
-{
-  GdkPixmap *oldpm;
-  GdkFont *oldf;
-  GdkGCFBData *private;
-
-  private = GDK_GC_FBDATA (gc);
-  
-  if (values_mask & GDK_GC_FOREGROUND)
-    {
-      private->values.foreground = values->foreground;
-      private->values_mask |= GDK_GC_FOREGROUND;
-    }
-
-  if (values_mask & GDK_GC_BACKGROUND)
-    {
-      private->values.background = values->background;
-      private->values_mask |= GDK_GC_BACKGROUND;
-    }
-
-  if (values_mask & GDK_GC_FONT)
-    {
-      oldf = private->values.font;
-      private->values.font = gdk_font_ref (values->font);
-      private->values_mask |= GDK_GC_FONT;
-      if (oldf)
-       gdk_font_unref(oldf);
-    }
-
-  if (values_mask & GDK_GC_FUNCTION)
-    {
-      private->values.function = values->function;
-      private->values_mask |= GDK_GC_FUNCTION;
-    }
-
-  if (values_mask & GDK_GC_FILL)
-    {
-      private->values.fill = values->fill;
-      private->values_mask |= GDK_GC_FILL;
-    }
-
-  if (values_mask & GDK_GC_TILE)
-    {
-      oldpm = private->values.tile;
-      if (values->tile)
-       g_assert (GDK_DRAWABLE_IMPL_FBDATA (values->tile)->depth >= 8);
-
-      private->values.tile = values->tile;
-      private->values_mask |= GDK_GC_TILE;
-      if (oldpm)
-       gdk_pixmap_unref (oldpm);
-    }
-
-  if (values_mask & GDK_GC_STIPPLE)
-    {
-      oldpm = private->values.stipple;
-      if (values->stipple)
-       g_assert (GDK_DRAWABLE_IMPL_FBDATA (values->stipple)->depth == 1);
-      private->values.stipple = values->stipple;
-      private->values_mask |= GDK_GC_STIPPLE;
-      if (oldpm)
-       gdk_pixmap_unref (oldpm);
-    }
-
-  if (values_mask & GDK_GC_CLIP_MASK)
-    {
-      oldpm = private->values.clip_mask;
-
-      private->values.clip_mask = values->clip_mask ? gdk_pixmap_ref (values->clip_mask) : NULL;
-      private->values_mask |= GDK_GC_CLIP_MASK;
-      if (oldpm)
-       gdk_pixmap_unref (oldpm);
-    }
-
-  if (values_mask & GDK_GC_SUBWINDOW)
-    {
-      private->values.subwindow_mode = values->subwindow_mode;
-      private->values_mask |= GDK_GC_SUBWINDOW;
-    }
-
-  if (values_mask & GDK_GC_TS_X_ORIGIN)
-    {
-      private->values.ts_x_origin = values->ts_x_origin;
-      private->values_mask |= GDK_GC_TS_X_ORIGIN;
-    }
-
-  if (values_mask & GDK_GC_TS_Y_ORIGIN)
-    {
-      private->values.ts_y_origin = values->ts_y_origin;
-      private->values_mask |= GDK_GC_TS_Y_ORIGIN;
-    }
-
-  if (values_mask & GDK_GC_CLIP_X_ORIGIN)
-    {
-      private->values.clip_x_origin = GDK_GC_P (gc)->clip_x_origin = values->clip_x_origin;
-      private->values_mask |= GDK_GC_CLIP_X_ORIGIN;
-    }
-
-  if (values_mask & GDK_GC_CLIP_Y_ORIGIN)
-    {
-      private->values.clip_y_origin = GDK_GC_P(gc)->clip_y_origin = values->clip_y_origin;
-      private->values_mask |= GDK_GC_CLIP_Y_ORIGIN;
-    }
-
-  if (values_mask & GDK_GC_EXPOSURES)
-    {
-      private->values.graphics_exposures = values->graphics_exposures;
-      private->values_mask |= GDK_GC_EXPOSURES;
-    }
-
-  if (values_mask & GDK_GC_LINE_WIDTH)
-    {
-      private->values.line_width = values->line_width;
-      private->values_mask |= GDK_GC_LINE_WIDTH;
-    }
-
-  if (values_mask & GDK_GC_LINE_STYLE)
-    {
-      private->values.line_style = values->line_style;
-      private->values_mask |= GDK_GC_LINE_STYLE;
-    }
-
-  if (values_mask & GDK_GC_CAP_STYLE)
-    {
-      private->values.cap_style = values->cap_style;
-      private->values_mask |= GDK_GC_CAP_STYLE;
-    }
-
-  if (values_mask & GDK_GC_JOIN_STYLE)
-    {
-      private->values.join_style = values->join_style;
-      private->values_mask |= GDK_GC_JOIN_STYLE;
-    }
-
-  _gdk_fb_gc_calc_state (gc, values_mask);
-}
-
-static void
-gdk_fb_gc_set_dashes (GdkGC *gc,
-                     gint dash_offset,
-                     gint8 dash_list[],
-                     gint n)
-{
-  GdkGCFBData *private;
-
-  private = GDK_GC_FBDATA (gc);
-
-  private->dash_offset = dash_offset;
-  private->dash_list_len = n;
-  
-  if (n)
-    {
-      private->dash_list = g_realloc (private->dash_list, n);
-      memcpy (private->dash_list, dash_list, n);
-    }
-  else
-    {
-      g_free (private->dash_list);
-      private->dash_list = NULL;
-    }
-}
-
-static void
-gc_unset_cmask(GdkGC *gc)
-{
-  GdkGCFBData *data;
-  data = GDK_GC_FBDATA (gc);
-  
-  if (data->values.clip_mask)
-    {
-      gdk_pixmap_unref (data->values.clip_mask);
-      data->values.clip_mask = NULL;
-      data->values_mask &= ~ GDK_GC_CLIP_MASK;
-    }
-
-  _gdk_fb_gc_calc_state (gc, GDK_GC_CLIP_MASK);
-}
-
-void
-_gdk_windowing_gc_set_clip_region (GdkGC     *gc,
-                                  GdkRegion *region)
-{
-  GdkGCFBData *data = GDK_GC_FBDATA (gc);
-
-  gc->clip_x_origin = 0;
-  gc->clip_y_origin = 0;
-  data->values.clip_x_origin = 0;
-  data->values.clip_y_origin = 0;
-
-  gc_unset_cmask (gc);
-  
-  _gdk_fb_gc_calc_state (gc, GDK_GC_CLIP_X_ORIGIN|GDK_GC_CLIP_Y_ORIGIN);
-}
-
-
-void
-_gdk_windowing_gc_copy (GdkGC *dst_gc,
-                       GdkGC *src_gc)
-{
-  GdkGCFBData *dst_private = GDK_GC_FBDATA (dst_gc);
-  GdkGCFBData *src_private = GDK_GC_FBDATA (src_gc);
-  GdkGCValuesMask old_mask = dst_private->values_mask;
-
-  if (dst_private->values_mask & GDK_GC_FONT)
-    gdk_font_unref (dst_private->values.font);
-  if (dst_private->values_mask & GDK_GC_CLIP_MASK)
-    g_object_unref (dst_private->values.clip_mask);
-
-  g_free (dst_private->dash_list);
-
-  if (src_private->dash_list)
-    dst_private->dash_list = g_memdup (src_private->dash_list,
-                                      src_private->dash_list_len);
-  
-  dst_private->values_mask = src_private->values_mask;
-  dst_private->values = src_private->values;
-  if (dst_private->values_mask & GDK_GC_FONT)
-    gdk_font_ref (dst_private->values.font);
-  if (dst_private->values_mask & GDK_GC_CLIP_MASK)
-    g_object_ref (dst_private->values.clip_mask);
-
-  dst_private->dash_offset = src_private->dash_offset;
-  dst_private->alu = src_private->alu;
-
-  dst_private->set_pixel = src_private->set_pixel;
-
-  _gdk_fb_gc_calc_state (gc, old_mask | dst_private->values_mask);
-}
diff --git a/gdk/linux-fb/gdkgeometry-fb.c b/gdk/linux-fb/gdkgeometry-fb.c
deleted file mode 100644 (file)
index 53fcd7c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-#include <config.h>
-#include "gdkprivate-fb.h"
-
-void
-gdk_window_scroll (GdkWindow *window,
-                   gint       dx,
-                   gint       dy)
-{
-  GdkWindowObject *private = GDK_WINDOW_P (window);
-  GdkRegion *invalidate_region;
-  GdkRectangle dest_rect;
-  GdkRectangle clip_rect;
-  GList *tmp_list;
-  gboolean handle_cursor;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  clip_rect.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-  clip_rect.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-  clip_rect.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-  clip_rect.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-  handle_cursor = gdk_fb_cursor_need_hide (&clip_rect);
-  clip_rect.x -= GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x;
-  clip_rect.y -= GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y;
-  invalidate_region = gdk_region_rectangle (&clip_rect);
-      
-  dest_rect = clip_rect;
-  dest_rect.x += dx;
-  dest_rect.y += dy;
-  gdk_rectangle_intersect (&dest_rect, &clip_rect, &dest_rect);
-
-  if (handle_cursor)
-    gdk_fb_cursor_hide ();
-
-  if (dest_rect.width > 0 && dest_rect.height > 0)
-    {
-      GdkRegion *tmp_region;
-
-      tmp_region = gdk_region_rectangle (&dest_rect);
-      gdk_region_subtract (invalidate_region, tmp_region);
-      gdk_region_destroy (tmp_region);
-
-      gdk_fb_draw_drawable_2 (GDK_DRAWABLE_IMPL(window),
-                             _gdk_fb_screen_gc,
-                             GDK_DRAWABLE_IMPL(window),
-                             dest_rect.x - dx,
-                             dest_rect.y - dy,
-                             dest_rect.x, dest_rect.y,
-                             dest_rect.width, dest_rect.height,
-                             FALSE, FALSE);
-      gdk_shadow_fb_update (dest_rect.x - dx, dest_rect.y - dy,
-                           dest_rect.x - dx + dest_rect.width,
-                           dest_rect.y - dy + dest_rect.height);
-    }
-  
-  gdk_window_invalidate_region (window, invalidate_region, TRUE);
-  gdk_region_destroy (invalidate_region);
-
-  for (tmp_list = private->children; tmp_list; tmp_list = tmp_list->next)
-    gdk_fb_window_move_resize (tmp_list->data,
-                              GDK_WINDOW_OBJECT(tmp_list->data)->x + dx,
-                              GDK_WINDOW_OBJECT(tmp_list->data)->y + dy,
-                              GDK_DRAWABLE_IMPL_FBDATA(tmp_list->data)->width,
-                              GDK_DRAWABLE_IMPL_FBDATA(tmp_list->data)->height,
-                              FALSE);
-
-  if (handle_cursor)
-    gdk_fb_cursor_unhide ();
-}
diff --git a/gdk/linux-fb/gdkglobals-fb.c b/gdk/linux-fb/gdkglobals-fb.c
deleted file mode 100644 (file)
index 89672e3..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <stdio.h>
-
-#include "gdktypes.h"
-#include "gdkprivate-fb.h"
-
-GdkWindow *_gdk_fb_pointer_grab_window, *_gdk_fb_keyboard_grab_window, *_gdk_fb_pointer_grab_confine = NULL;
-gboolean _gdk_fb_pointer_grab_owner_events;
-gboolean _gdk_fb_keyboard_grab_owner_events;
-GdkEventMask _gdk_fb_pointer_grab_events, _gdk_fb_keyboard_grab_events;
-
-GdkDisplay *_gdk_display = NULL;
-GdkScreen *_gdk_screen = NULL;
-GdkWindow *_gdk_parent_root = NULL;
-
-GdkFBWindow *gdk_root_window = NULL;
-GdkFBDisplay *gdk_display = NULL;
-GdkCursor *_gdk_fb_pointer_grab_cursor;
-GdkGC *_gdk_fb_screen_gc = NULL;
-GdkAtom _gdk_selection_property;
-GdkFBAngle _gdk_fb_screen_angle = GDK_FB_0_DEGREES;
-volatile gboolean _gdk_fb_is_active_vt = FALSE;
diff --git a/gdk/linux-fb/gdkim-fb.c b/gdk/linux-fb/gdkim-fb.c
deleted file mode 100644 (file)
index d6e6537..0000000
+++ /dev/null
@@ -1,105 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include "gdki18n.h"
-#include "gdkinternals.h"
-#include "gdkprivate-fb.h"
-
-#if HAVE_CONFIG_H
-#  include <config.h>
-#  if STDC_HEADERS
-#    include <string.h>
-#  endif
-#endif
-
-#include <locale.h>
-
-/*
- *--------------------------------------------------------------
- * gdk_set_locale
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gchar*
-gdk_set_locale (void)
-{
-  if (!setlocale (LC_ALL,""))
-    g_warning ("locale not supported by C library");
-  
-  return setlocale (LC_ALL, NULL);
-}
-
-/*
- * gdk_wcstombs 
- *
- * Returns a multi-byte string converted from the specified array
- * of wide characters. The string is newly allocated. The array of
- * wide characters must be null-terminated. If the conversion is
- * failed, it returns NULL.
- */
-gchar *
-gdk_wcstombs (const GdkWChar *src)
-{
-  gchar *mbstr;
-
-  gint length = 0;
-  gint i;
-
-  while (src[length] != 0)
-    length++;
-  
-  mbstr = g_new (gchar, length + 1);
-  
-  for (i = 0; i < length + 1; i++)
-    mbstr[i] = src[i];
-
-  return mbstr;
-}
-  
-/*
- * gdk_mbstowcs
- *
- * Converts the specified string into wide characters, and, returns the
- * number of wide characters written. The string 'src' must be
- * null-terminated. If the conversion is failed, it returns -1.
- */
-gint
-gdk_mbstowcs (GdkWChar *dest, const gchar *src, gint dest_max)
-{
-  gint i;
-  
-  for (i = 0; i < dest_max && src[i]; i++)
-    dest[i] = src[i];
-
-  return i;
-}
diff --git a/gdk/linux-fb/gdkimage-fb.c b/gdk/linux-fb/gdkimage-fb.c
deleted file mode 100644 (file)
index 265be62..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-
-#include <stdlib.h>
-#include <sys/types.h>
-#include <string.h>
-
-#include "gdk.h"
-#include "gdkimage.h"
-#include "gdkprivate.h"
-#include "gdkprivate-fb.h"
-
-static gpointer parent_class = NULL;
-
-#define GDK_IMAGE_PRIVATE_DATA(image) ((GdkImagePrivateFB *) GDK_IMAGE (image)->windowing_data)
-
-void
-_gdk_windowing_image_init (void)
-{
-}
-
-static void
-gdk_image_init (GdkImage *image)
-{
-  image->windowing_data = g_new0 (GdkImagePrivateFB, 1);
-}
-
-static void
-gdk_image_finalize (GObject *object)
-{
-  GdkImage *image = GDK_IMAGE (object);
-
-  g_free (image->windowing_data);
-  image->windowing_data = NULL;
-  
-  g_free (image->mem);
-  image->mem = NULL;
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_image_class_init (GdkImageClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_image_finalize;
-}
-
-GType
-gdk_image_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkImageClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_image_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkImage),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_image_init,
-      };
-      
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkImage",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-
-GdkImage*
-_gdk_image_new_for_depth (GdkScreen    *screen,
-                         GdkImageType  type,
-                         GdkVisual    *visual,
-                         gint          width,
-                         gint          height,
-                         gint          depth)
-{
-  GdkImage *image;
-  GdkImagePrivateFB *private;
-
-  g_return_val_if_fail (!visual || GDK_IS_VISUAL (visual), NULL);
-  g_return_val_if_fail (visual || depth != -1, NULL);
-
-  if (visual)
-    depth = visual->depth;
-
-  image = g_object_new (gdk_image_get_type (), NULL);
-  private = GDK_IMAGE_PRIVATE_DATA (image);
-
-  image->type = 0;
-  image->visual = visual;
-  image->width = width;
-  image->height = height;
-  image->depth = depth;
-  
-  image->byte_order = 0;
-  image->bits_per_pixel = image->depth;
-  image->bpp = image->depth/8;
-  image->bpl = (width * image->depth + 7) / 8;
-  image->mem = g_malloc (image->bpl * height);
-
-  return image;
-}
-
-GdkImage *
-gdk_image_new_bitmap(GdkVisual *visual,
-                    gpointer data,
-                    gint w,
-                    gint h)
-{
-  GdkImage *image;
-  GdkImagePrivateFB *private;
-  
-  image = g_object_new (gdk_image_get_type (), NULL);
-  private = GDK_IMAGE_PRIVATE_DATA (image);
-  
-  image->type = GDK_IMAGE_NORMAL;
-  image->visual = visual;
-  image->width = w;
-  image->height = h;
-  image->depth = 1;
-
-  image->byte_order = 1 /* MSBFirst */;
-  image->bits_per_pixel = 1;
-  image->bpp = 1;
-  image->bpl = (w+7)/8;
-  image->mem = g_malloc (image->bpl * h / 8);
-  memcpy (image->mem, data, image->bpl * h / 8);
-
-  /* This must be freed using free, not g_free, since in the X version
-     this is freed by xlib. */
-  free (data); 
-  
-  return image;
-}
-
-GdkImage*
-_gdk_fb_copy_to_image (GdkDrawable    *drawable,
-                      GdkImage       *image,
-                      gint            src_x,
-                      gint            src_y,
-                      gint            dest_x,
-                      gint            dest_y,
-                      gint            width,
-                      gint            height)
-{
-  GdkImagePrivateFB *private;
-  GdkPixmapFBData fbd;
-  GdkRegion *region = NULL;
-  gboolean handle_cursor = FALSE;
-
-  g_return_val_if_fail (drawable != NULL, NULL);
-
-  if (image == NULL)
-    {
-      image = g_object_new (gdk_image_get_type (), NULL);
-
-      image->type = GDK_IMAGE_NORMAL;
-      image->visual = gdk_drawable_get_visual (drawable);
-      image->width = width;
-      image->height = height;
-      image->bits_per_pixel = GDK_DRAWABLE_FBDATA (drawable)->depth;
-      image->depth = image->bits_per_pixel;
-      
-      if (image->bits_per_pixel <= 8)
-       image->bpp = 1;
-      else if (image->bits_per_pixel <= 16)
-       image->bpp = 2;
-      else if (image->bits_per_pixel <= 24)
-       image->bpp = 3;
-      else
-       image->bpp = 4;
-      image->byte_order = 1;
-
-      image->bpl = (image->width * image->depth + 7) / 8; /* Packed pixels */
-      image->mem = g_malloc (image->bpl * image->height);
-
-      dest_x = 0;
-      dest_y = 0;
-    }
-  
-  private = GDK_IMAGE_PRIVATE_DATA (image);
-  
-  /* Fake its existence as a pixmap */
-  memset (&fbd, 0, sizeof(fbd));
-  ((GTypeInstance *)&fbd)->g_class = g_type_class_peek (_gdk_pixmap_impl_get_type ());
-  fbd.drawable_data.mem = image->mem;
-  fbd.drawable_data.rowstride = image->bpl;
-  fbd.drawable_data.width = fbd.drawable_data.lim_x = image->width;
-  fbd.drawable_data.height = fbd.drawable_data.lim_y = image->height;
-  fbd.drawable_data.depth = image->depth;
-  fbd.drawable_data.window_type = GDK_DRAWABLE_PIXMAP;
-
-  if (GDK_DRAWABLE_FBDATA (drawable)->mem == GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->mem)
-    {
-      region = gdk_fb_clip_region (drawable, _gdk_fb_screen_gc, TRUE, FALSE, FALSE);
-
-      if (gdk_fb_cursor_region_need_hide (region))
-       {
-         handle_cursor = TRUE;
-         gdk_fb_cursor_hide ();
-       }
-    }
-
-  gdk_fb_draw_drawable_2 ((GdkPixmap *)&fbd,
-                         _gdk_fb_screen_gc,
-                         drawable,
-                         src_x, src_y,
-                         dest_x, dest_y,
-                         width, height,
-                         TRUE, TRUE);
-
-  if (region)
-    gdk_region_destroy (region);
-  
-  if (handle_cursor)
-    gdk_fb_cursor_unhide ();
-
-  return image;
-}
-
-guint32
-gdk_image_get_pixel (GdkImage *image,
-                    gint x,
-                    gint y)
-{
-  GdkImagePrivateFB *private;
-
-  g_return_val_if_fail (image != NULL, 0);
-  g_return_val_if_fail (x >= 0 && x < image->width, 0);
-  g_return_val_if_fail (y >= 0 && y < image->height, 0);
-
-  private = GDK_IMAGE_PRIVATE_DATA (image);
-
-  switch (image->depth)
-    {
-    case 8:
-      return ((guchar *)image->mem)[x + y * image->bpl];
-      break;
-    case 16:
-      return *((guint16 *)&((guchar *)image->mem)[x*2 + y*image->bpl]);
-      break;
-    case 24:
-    case 32:
-      {
-       guchar *smem = &(((guchar *)image->mem)[x*image->bpp + y*image->bpl]);
-       return smem[0]|(smem[1]<<8)|(smem[2]<<16);
-      }
-      break;
-    }
-
-  return 0;
-}
-
-void
-gdk_image_put_pixel (GdkImage *image,
-                    gint x,
-                    gint y,
-                    guint32 pixel)
-{
-  guchar *ptr = image->mem;
-
-  g_return_if_fail (image != NULL);
-  g_return_if_fail (x >= 0 && x < image->width);
-  g_return_if_fail (y >= 0 && y < image->height);
-
-  switch (image->depth)
-    {
-    case 8:
-      ptr[x + y * image->bpl] = pixel;
-      break;
-    case 16:
-      {
-       guint16 *p16 = (guint16 *)&ptr[x*2 + y*image->bpl];
-       *p16 = pixel;
-      }
-      break;
-    case 24:
-      {
-       guchar *smem = &ptr[x*3 + y*image->bpl];
-       smem[0] = (pixel & 0xFF);
-       smem[1] = (pixel & 0xFF00) >> 8;
-       smem[2] = (pixel & 0xFF0000) >> 16;
-      }
-      break;
-    case 32:
-      {
-       guint32 *smem = (guint32 *)&ptr[x*4 + y*image->bpl];
-       *smem = pixel;
-      }
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-    }
-}
-
-void
-_gdk_image_exit(void)
-{
-}
-
-/* copy/pasted from gdkimage-win32.c */
-gint
-_gdk_windowing_get_bits_for_depth (GdkDisplay *display,
-                                  gint        depth)
-{
-  if ((1 == depth) || (8 == depth) || (16 == depth) || 
-      (24 == depth) || (32 == depth))
-    return depth;
-  else if (15 == depth)
-    return 16;
-  else
-    g_assert_not_reached ();
-
-  return 0;    
-}
-
diff --git a/gdk/linux-fb/gdkinput-none.c b/gdk/linux-fb/gdkinput-none.c
deleted file mode 100644 (file)
index 0512fd7..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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 "gdkinputprivate.h"
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-static void gdk_input_none_get_pointer (GdkWindow       *window,
-                                       guint32   deviceid,
-                                       gdouble         *x,
-                                       gdouble         *y,
-                                       gdouble         *pressure,
-                                       gdouble         *xtilt,
-                                       gdouble         *ytilt,
-                                       GdkModifierType *mask);
-
-void
-_gdk_input_init (void)
-{
-  _gdk_init_input_core ();
-  gdk_input_vtable.set_mode           = NULL;
-  gdk_input_vtable.set_axes           = NULL;
-  gdk_input_vtable.set_key            = NULL;
-  gdk_input_vtable.motion_events      = NULL;
-  gdk_input_vtable.get_pointer        = gdk_input_none_get_pointer;
-  gdk_input_vtable.grab_pointer       = NULL;
-  gdk_input_vtable.ungrab_pointer     = NULL;
-  gdk_input_vtable.configure_event    = NULL;
-  gdk_input_vtable.enter_event        = NULL;
-  gdk_input_vtable.other_event        = NULL;
-  gdk_input_vtable.window_none_event  = NULL;
-  gdk_input_vtable.enable_window      = NULL;
-  gdk_input_vtable.disable_window     = NULL;
-
-  _gdk_input_devices = g_list_append (NULL, (GdkDeviceInfo *) &gdk_input_core_info);
-
-  _gdk_input_ignore_core = FALSE;
-}
-
-static void
-gdk_input_none_get_pointer (GdkWindow       *window,
-                           guint32          deviceid,
-                           gdouble         *x,
-                           gdouble         *y,
-                           gdouble         *pressure,
-                           gdouble         *xtilt,
-                           gdouble         *ytilt,
-                           GdkModifierType *mask)
-{
-  gint x_int, y_int;
-
-  gdk_window_get_pointer (window, &x_int, &y_int, mask);
-
-  if (x) *x = x_int;
-  if (y) *y = y_int;
-  if (pressure) *pressure = 0.5;
-  if (xtilt) *xtilt = 0;
-  if (ytilt) *ytilt = 0;
-}
diff --git a/gdk/linux-fb/gdkinput.c b/gdk/linux-fb/gdkinput.c
deleted file mode 100644 (file)
index 2806309..0000000
+++ /dev/null
@@ -1,387 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <stdlib.h>
-
-#include "gdkprivate-fb.h"
-#include "gdkinput.h"
-#include "gdkprivate.h"
-#include "gdkinputprivate.h"
-
-static GdkDeviceAxis gdk_input_core_axes[] = {
-  { GDK_AXIS_X, 0, 0 },
-  { GDK_AXIS_Y, 0, 0 }
-};
-
-GdkDevice *_gdk_core_pointer = NULL;
-
-/* Global variables  */
-
-gchar            *_gdk_input_gxid_host;
-gint              _gdk_input_gxid_port;
-gint              _gdk_input_ignore_core;
-GList            *_gdk_input_windows;
-GList            *_gdk_input_devices;
-
-void
-_gdk_init_input_core (void)
-{
-  _gdk_core_pointer = g_object_new (GDK_TYPE_DEVICE, NULL);
-  
-  _gdk_core_pointer->name = "Core Pointer";
-  _gdk_core_pointer->source = GDK_SOURCE_MOUSE;
-  _gdk_core_pointer->mode = GDK_MODE_SCREEN;
-  _gdk_core_pointer->has_cursor = TRUE;
-  _gdk_core_pointer->num_axes = 2;
-  _gdk_core_pointer->axes = gdk_input_core_axes;
-  _gdk_core_pointer->num_keys = 0;
-  _gdk_core_pointer->keys = NULL;
-
-  _gdk_display->core_pointer = _gdk_core_pointer;
-}
-
-static void
-gdk_device_finalize (GObject *object)
-{
-  g_error ("A GdkDevice object was finalized. This should not happen");
-}
-
-static void
-gdk_device_class_init (GObjectClass *class)
-{
-  class->finalize = gdk_device_finalize;
-}
-
-GType
-gdk_device_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkDeviceClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_device_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkDevicePrivate),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) NULL,
-      };
-      
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkDevice",
-                                            &object_info, 0);
-    }
-  
-  return object_type;
-}
-
-GList *
-gdk_devices_list (void)
-{
-  return _gdk_input_devices;
-}
-
-GList *
-gdk_display_list_devices (GdkDisplay *dpy)
-{
-  return _gdk_input_devices;
-}
-
-void
-gdk_device_set_source (GdkDevice *device,
-                      GdkInputSource source)
-{
-  device->source = source;
-}
-
-
-void
-gdk_device_set_key (GdkDevice      *device,
-                   guint           index,
-                   guint           keyval,
-                   GdkModifierType modifiers)
-{
-  g_return_if_fail (device != NULL);
-  g_return_if_fail (index < device->num_keys);
-
-  device->keys[index].keyval = keyval;
-  device->keys[index].modifiers = modifiers;
-}
-
-void
-gdk_device_set_axis_use (GdkDevice   *device,
-                        guint        index,
-                        GdkAxisUse   use)
-{
-  g_return_if_fail (device != NULL);
-  g_return_if_fail (index < device->num_axes);
-
-  device->axes[index].use = use;
-
-  switch (use)
-    {
-    case GDK_AXIS_X:
-    case GDK_AXIS_Y:
-      device->axes[index].min = 0.;
-      device->axes[index].max = 0.;
-      break;
-    case GDK_AXIS_XTILT:
-    case GDK_AXIS_YTILT:
-      device->axes[index].min = -1.;
-      device->axes[index].max = 1;
-      break;
-    default:
-      device->axes[index].min = 0.;
-      device->axes[index].max = 1;
-      break;
-    }
-}
-
-void 
-gdk_device_get_state (GdkDevice       *device,
-                      GdkWindow       *window,
-                      gdouble         *axes,
-                      GdkModifierType *mask)
-{
-  gint x_int, y_int;
-
-  g_assert (device == _gdk_core_pointer);
-      
-  gdk_window_get_pointer (window, &x_int, &y_int, mask);
-
-  if (axes)
-    {
-      axes[0] = x_int;
-      axes[1] = y_int;
-    }
-}
-
-void 
-gdk_device_free_history (GdkTimeCoord **events,
-                        gint           n_events)
-{
-  gint i;
-  
-  for (i = 0; i < n_events; i++)
-    g_free (events[i]);
-
-  g_free (events);
-}
-
-gboolean
-gdk_device_get_history  (GdkDevice         *device,
-                        GdkWindow         *window,
-                        guint32            start,
-                        guint32            stop,
-                        GdkTimeCoord    ***events,
-                        gint              *n_events)
-{
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-  g_return_val_if_fail (events != NULL, FALSE);
-  g_return_val_if_fail (n_events != NULL, FALSE);
-
-  *n_events = 0;
-  *events = NULL;
-  return FALSE;
-}
-
-gboolean
-gdk_device_set_mode (GdkDevice   *device,
-                     GdkInputMode mode)
-{
-  return FALSE;
-}
-
-gint
-_gdk_input_enable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  return TRUE;
-}
-
-gint
-_gdk_input_disable_window (GdkWindow *window, GdkDevicePrivate *gdkdev)
-{
-  return TRUE;
-}
-
-
-GdkInputWindow *
-_gdk_input_window_find(GdkWindow *window)
-{
-  GList *tmp_list;
-
-  for (tmp_list=_gdk_input_windows; tmp_list; tmp_list=tmp_list->next)
-    if (((GdkInputWindow *)(tmp_list->data))->window == window)
-      return (GdkInputWindow *)(tmp_list->data);
-
-  return NULL;      /* Not found */
-}
-
-/* FIXME: this routine currently needs to be called between creation
-   and the corresponding configure event (because it doesn't get the
-   root_relative_geometry).  This should work with
-   gtk_window_set_extension_events, but will likely fail in other
-   cases */
-
-void
-gdk_input_set_extension_events (GdkWindow *window, gint mask,
-                               GdkExtensionMode mode)
-{
-  GdkWindowObject *window_private;
-  GList *tmp_list;
-  GdkInputWindow *iw;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  window_private = (GdkWindowObject*) window;
-
-  if (mode == GDK_EXTENSION_EVENTS_NONE)
-    mask = 0;
-
-  if (mask != 0)
-    {
-      iw = g_new(GdkInputWindow,1);
-
-      iw->window = window;
-      iw->mode = mode;
-
-      iw->obscuring = NULL;
-      iw->num_obscuring = 0;
-      iw->grabbed = FALSE;
-
-      _gdk_input_windows = g_list_append (_gdk_input_windows,iw);
-      window_private->extension_events = mask;
-
-      /* Add enter window events to the event mask */
-      /* FIXME, this is not needed for XINPUT_NONE */
-      gdk_window_set_events (window,
-                            gdk_window_get_events (window) | 
-                            GDK_ENTER_NOTIFY_MASK);
-    }
-  else
-    {
-      iw = _gdk_input_window_find (window);
-      if (iw)
-       {
-         _gdk_input_windows = g_list_remove (_gdk_input_windows,iw);
-         g_free (iw);
-       }
-
-      window_private->extension_events = 0;
-    }
-
-  for (tmp_list = _gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      GdkDevicePrivate *gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-
-      if (gdkdev != (GdkDevicePrivate *)_gdk_core_pointer)
-       {
-         if (mask != 0 && gdkdev->info.mode != GDK_MODE_DISABLED
-             && (gdkdev->info.has_cursor || mode == GDK_EXTENSION_EVENTS_ALL))
-           _gdk_input_enable_window (window,gdkdev);
-         else
-           _gdk_input_disable_window (window,gdkdev);
-       }
-    }
-}
-
-void
-_gdk_input_window_destroy (GdkWindow *window)
-{
-  GdkInputWindow *input_window;
-
-  input_window = _gdk_input_window_find (window);
-  g_return_if_fail (input_window != NULL);
-
-  _gdk_input_windows = g_list_remove (_gdk_input_windows,input_window);
-  g_free (input_window);
-}
-
-void
-_gdk_input_init (void)
-{
-  _gdk_init_input_core ();
-  _gdk_input_devices = g_list_append (NULL, _gdk_core_pointer);
-  _gdk_input_ignore_core = FALSE;
-}
-
-void
-_gdk_input_exit (void)
-{
-  GList *tmp_list;
-  GdkDevicePrivate *gdkdev;
-
-  for (tmp_list = _gdk_input_devices; tmp_list; tmp_list = tmp_list->next)
-    {
-      gdkdev = (GdkDevicePrivate *)(tmp_list->data);
-      if (gdkdev != (GdkDevicePrivate *)_gdk_core_pointer)
-       {
-         gdk_device_set_mode ((GdkDevice *)gdkdev, GDK_MODE_DISABLED);
-
-         g_free (gdkdev->info.name);
-         g_free (gdkdev->info.axes);
-         g_free (gdkdev->info.keys);
-         g_free (gdkdev);
-       }
-    }
-
-  g_list_free (_gdk_input_devices);
-
-  for (tmp_list = _gdk_input_windows; tmp_list; tmp_list = tmp_list->next)
-    {
-      g_free (tmp_list->data);
-    }
-  g_list_free (_gdk_input_windows);
-}
-
-gboolean
-gdk_device_get_axis (GdkDevice *device, gdouble *axes, GdkAxisUse use, gdouble *value)
-{
-  gint i;
-  
-  g_return_val_if_fail (device != NULL, FALSE);
-
-  if (axes == NULL)
-    return FALSE;
-  
-  for (i = 0; i < device->num_axes; i++)
-    if (device->axes[i].use == use)
-      {
-       if (value)
-         *value = axes[i];
-       return TRUE;
-      }
-  
-  return FALSE;
-}
diff --git a/gdk/linux-fb/gdkinputprivate.h b/gdk/linux-fb/gdkinputprivate.h
deleted file mode 100644 (file)
index fab65da..0000000
+++ /dev/null
@@ -1,153 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#ifndef __GDK_INPUTPRIVATE_H__
-#define __GDK_INPUTPRIVATE_H__
-
-#include "config.h"
-#include "gdkinput.h"
-#include "gdkevents.h"
-#include "gdkfb.h"
-
-typedef struct _GdkAxisInfo    GdkAxisInfo;
-typedef struct _GdkInputVTable GdkInputVTable;
-typedef struct _GdkDevicePrivate GdkDevicePrivate;
-typedef struct _GdkInputWindow GdkInputWindow;
-
-struct _GdkInputVTable {
-  gint (*set_mode) (guint32 deviceid, GdkInputMode mode);
-  void (*set_axes) (guint32 deviceid, GdkAxisUse *axes);
-  void (*set_key)  (guint32 deviceid,
-                   guint   index,
-                   guint   keyval,
-                   GdkModifierType modifiers);
-       
-  GdkTimeCoord* (*motion_events) (GdkWindow *window,
-                                 guint32 deviceid,
-                                 guint32 start,
-                                 guint32 stop,
-                                 gint *nevents_return);
-  void (*get_pointer)   (GdkWindow       *window,
-                        guint32          deviceid,
-                        gdouble         *x,
-                        gdouble         *y,
-                        gdouble         *pressure,
-                        gdouble         *xtilt,
-                        gdouble         *ytilt,
-                        GdkModifierType *mask);
-  gint (*grab_pointer) (GdkWindow *     window,
-                       gint            owner_events,
-                       GdkEventMask    event_mask,
-                       GdkWindow *     confine_to,
-                       guint32         time);
-  void (*ungrab_pointer) (guint32 time);
-
-  void (*configure_event) (GdkEventConfigure *event, GdkWindow *window);
-  void (*enter_event) (GdkEventCrossing *event, GdkWindow *window);
-  gint (*other_event) (GdkEvent *event, GdkWindow *window);
-  /* Handle an unidentified event. Returns TRUE if handled, FALSE
-     otherwise */
-  gint (*window_none_event) (GdkEvent *event);
-  gint (*enable_window) (GdkWindow *window, GdkDevicePrivate *gdkdev);
-  gint (*disable_window) (GdkWindow *window, GdkDevicePrivate *gdkdev);
-};
-
-/* information about a device axis */
-struct _GdkAxisInfo
-{
-  /* reported x resolution */
-  gint xresolution;
-
-  /* reported x minimum/maximum values */
-  gint xmin_value, xmax_value;
-
-  /* calibrated resolution (for aspect ration) - only relative values
-     between axes used */
-  gint resolution;
-  
-  /* calibrated minimum/maximum values */
-  gint min_value, max_value;
-};
-
-#define GDK_INPUT_NUM_EVENTC 6
-
-struct _GdkDevicePrivate {
-  GdkDevice  info;
-};
-
-struct _GdkDeviceClass
-{
-  GObjectClass parent_class;
-};
-
-struct _GdkInputWindow
-{
-  /* gdk window */
-  GdkWindow *window;
-
-  /* Extension mode (GDK_EXTENSION_EVENTS_ALL/CURSOR) */
-  GdkExtensionMode mode;
-
-  /* position relative to root window */
-  gint root_x;
-  gint root_y;
-
-  /* rectangles relative to window of windows obscuring this one */
-  GdkRectangle *obscuring;
-  gint num_obscuring;
-
-  /* Is there a pointer grab for this window ? */
-  gint grabbed;
-};
-
-/* Global data */
-
-extern const GdkDevice gdk_input_core_info;
-extern GdkDevice *_gdk_core_pointer;
-extern GList *_gdk_input_devices;
-extern GList *_gdk_input_windows;
-
-extern GdkInputVTable gdk_input_vtable;
-/* information about network port and host for gxid daemon */
-extern gchar           *_gdk_input_gxid_host;
-extern gint             _gdk_input_gxid_port;
-extern gint             _gdk_input_ignore_core;
-
-/* Function declarations */
-
-GdkInputWindow *   _gdk_input_window_find    (GdkWindow        *window);
-void               _gdk_input_window_destroy (GdkWindow        *window);
-void               _gdk_input_init           (void);
-void               _gdk_input_exit           (void);
-gint               _gdk_input_enable_window  (GdkWindow        *window,
-                                             GdkDevicePrivate *gdkdev);
-gint               _gdk_input_disable_window (GdkWindow        *window,
-                                             GdkDevicePrivate *gdkdev);
-void               _gdk_init_input_core      (void);
-
-void _gdk_input_exit           (void);
-
-#endif /* __GDK_INPUTPRIVATE_H__ */
diff --git a/gdk/linux-fb/gdkkeyboard-fb.c b/gdk/linux-fb/gdkkeyboard-fb.c
deleted file mode 100644 (file)
index f067940..0000000
+++ /dev/null
@@ -1,1603 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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/gdk.h>
-#include <gdk/gdkinternals.h>
-#include "gdkkeysyms.h"
-#include "gdkprivate-fb.h"
-#include <errno.h>
-#include <stdlib.h>
-#include <unistd.h>
-#include <string.h>
-#include <ctype.h>
-#include <termios.h>
-#include <sys/ioctl.h>
-#include <sys/kd.h>
-#include <sys/vt.h>
-
-typedef struct _GdkFBKeyboard GdkFBKeyboard;
-typedef struct _GdkFBKeyboardDevice GdkFBKeyboardDevice;
-
-struct _GdkFBKeyboard {
-  gint fd;
-  GIOChannel *io;
-  gint io_tag;
-
-  guint modifier_state;
-  guint caps_lock : 1;
-
-  gint group;
-  gint level;
-  
-  GdkFBKeyboardDevice *dev;
-};
-
-struct _GdkFBKeyboardDevice {
-  char *name;
-  gboolean (*open)(GdkFBKeyboard *kb);
-  void (*close)(GdkFBKeyboard *kb);
-
-  guint    (*lookup_key)               (GdkFBKeyboard       *kb,
-                                       const GdkKeymapKey  *key);
-  gboolean (*translate_keyboard_state) (GdkFBKeyboard       *kb,
-                                       guint                hardware_keycode,
-                                       GdkModifierType      state,
-                                       gint                 group,
-                                       guint               *keyval,
-                                       gint                *effective_group,
-                                       gint                *level,
-                                       GdkModifierType     *consumed_modifiers);
-  gboolean (*get_entries_for_keyval)   (GdkFBKeyboard       *kb,
-                                       guint                keyval,
-                                       GdkKeymapKey       **keys,
-                                       gint                *n_keys);
-  gboolean (*get_entries_for_keycode)  (GdkFBKeyboard       *kb,
-                                       guint                hardware_keycode,
-                                       GdkKeymapKey       **keys,
-                                       guint              **keyvals,
-                                       gint                *n_entries);
-
-  gpointer driver_data;
-};
-
-static GdkFBKeyboard *gdk_fb_keyboard = NULL;
-static GdkKeymap *default_keymap = NULL;
-
-static gboolean xlate_open            (GdkFBKeyboard       *kb);
-static void     xlate_close           (GdkFBKeyboard       *kb);
-static guint    xlate_lookup          (GdkFBKeyboard       *kb,
-                                      const GdkKeymapKey  *key);
-static gboolean xlate_translate       (GdkFBKeyboard       *kb,
-                                      guint                hardware_keycode,
-                                      GdkModifierType      state,
-                                      gint                 group,
-                                      guint               *keyval,
-                                      gint                *effective_group,
-                                      gint                *level,
-                                      GdkModifierType     *consumed_modifiers);
-static gboolean xlate_get_for_keyval  (GdkFBKeyboard       *kb,
-                                      guint                keyval,
-                                      GdkKeymapKey       **keys,
-                                      gint                *n_keys);
-static gboolean xlate_get_for_keycode (GdkFBKeyboard       *kb,
-                                      guint                hardware_keycode,
-                                      GdkKeymapKey       **keys,
-                                      guint              **keyvals,
-                                      gint                *n_entries);
-
-static gboolean raw_open            (GdkFBKeyboard       *kb);
-static void     raw_close           (GdkFBKeyboard       *kb);
-static guint    raw_lookup          (GdkFBKeyboard       *kb,
-                                    const GdkKeymapKey  *key);
-static gboolean raw_translate       (GdkFBKeyboard       *kb,
-                                    guint                hardware_keycode,
-                                    GdkModifierType      state,
-                                    gint                 group,
-                                    guint               *keyval,
-                                    gint                *effective_group,
-                                    gint                *level,
-                                    GdkModifierType     *consumed_modifiers);
-static gboolean raw_get_for_keyval  (GdkFBKeyboard       *kb,
-                                    guint                keyval,
-                                    GdkKeymapKey       **keys,
-                                    gint                *n_keys);
-static gboolean raw_get_for_keycode (GdkFBKeyboard       *kb,
-                                    guint                hardware_keycode,
-                                    GdkKeymapKey       **keys,
-                                    guint              **keyvals,
-                                    gint                *n_entries);
-
-
-static GdkFBKeyboardDevice keyb_devs[] =
-{
-  {
-    "xlate",
-    xlate_open,
-    xlate_close,
-    xlate_lookup,
-    xlate_translate,
-    xlate_get_for_keyval,
-    xlate_get_for_keycode
-  },
-  {
-    "raw",
-    raw_open,
-    raw_close,
-    raw_lookup,
-    raw_translate,
-    raw_get_for_keyval,
-    raw_get_for_keycode
-  },
-};
-
-GdkKeymap*
-gdk_keymap_get_default_for_display (GdkDisplay *display)
-{
-  if (default_keymap == NULL)
-    default_keymap = g_object_new (gdk_keymap_get_type (), NULL);
-
-  return default_keymap;
-}
-
-GdkKeymap*
-gdk_keymap_get_for_display (GdkDisplay *display)
-{
-  return gdk_keymap_get_default_for_display (display);
-}
-
-PangoDirection
-gdk_keymap_get_direction (GdkKeymap *keymap)
-{
-  /* FIXME: Only supports LTR keymaps at the moment */
-  return PANGO_DIRECTION_LTR;
-}
-
-guint
-gdk_fb_keyboard_modifiers (void)
-{
-  return gdk_fb_keyboard->modifier_state;
-}
-
-gboolean
-gdk_fb_keyboard_init (gboolean open_dev)
-{
-  GdkFBKeyboard *keyb;
-  char *keyb_type;
-  int i;
-
-  gdk_fb_keyboard = g_new0 (GdkFBKeyboard, 1);
-  keyb = gdk_fb_keyboard;
-  keyb->fd = -1;
-  
-  keyb_type = getenv ("GDK_KEYBOARD_TYPE");
-  
-  if (!keyb_type)
-    keyb_type = "xlate";
-
-  for (i = 0; i < G_N_ELEMENTS(keyb_devs); i++)
-    {
-      if (g_ascii_strcasecmp(keyb_type, keyb_devs[i].name)==0)
-       break;
-    }
-  
-  if (i == G_N_ELEMENTS(keyb_devs))
-    {
-      g_warning ("No keyboard driver of type %s found", keyb_type);
-      return FALSE;
-    }
-
-  keyb->dev = &keyb_devs[i];
-
-  if (open_dev)
-    return gdk_fb_keyboard_open ();
-  else
-    return TRUE;
-}
-
-gboolean
-gdk_fb_keyboard_open (void)
-{
-  GdkFBKeyboard *keyb;
-  GdkFBKeyboardDevice *device;
-
-  keyb = gdk_fb_keyboard;
-  device = keyb->dev;
-
-  if (!device->open(keyb))
-    {
-      g_warning ("Keyboard driver open failed");
-      return FALSE;
-    }
-
-  return TRUE;
-}
-
-void 
-gdk_fb_keyboard_close (void)
-{
-  gdk_fb_keyboard->dev->close(gdk_fb_keyboard);
-}
-
-
-gboolean
-gdk_keymap_get_entries_for_keyval (GdkKeymap     *keymap,
-                                   guint          keyval,
-                                   GdkKeymapKey **keys,
-                                   gint          *n_keys)
-{
-  g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
-  g_return_val_if_fail (keys != NULL, FALSE);
-  g_return_val_if_fail (n_keys != NULL, FALSE);
-  g_return_val_if_fail (keyval != 0, FALSE);
-
-  return gdk_fb_keyboard->dev->get_entries_for_keyval (gdk_fb_keyboard,
-                                                      keyval,
-                                                      keys,
-                                                      n_keys);
-}
-
-gboolean
-gdk_keymap_get_entries_for_keycode (GdkKeymap     *keymap,
-                                    guint          hardware_keycode,
-                                    GdkKeymapKey **keys,
-                                    guint        **keyvals,
-                                    gint          *n_entries)
-{
-  g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
-  g_return_val_if_fail (n_entries != NULL, FALSE);
-  
-  return gdk_fb_keyboard->dev->get_entries_for_keycode (gdk_fb_keyboard,
-                                                       hardware_keycode,
-                                                       keys,
-                                                       keyvals,
-                                                       n_entries);
-}
-
-
-guint
-gdk_keymap_lookup_key (GdkKeymap          *keymap,
-                       const GdkKeymapKey *key)
-{
-  g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), 0);
-  g_return_val_if_fail (key != NULL, 0);
-  g_return_val_if_fail (key->group < 4, 0);
-
-  return gdk_fb_keyboard->dev->lookup_key (gdk_fb_keyboard,  key);
-}
-
-
-gboolean
-gdk_keymap_translate_keyboard_state (GdkKeymap       *keymap,
-                                     guint            hardware_keycode,
-                                     GdkModifierType  state,
-                                     gint             group,
-                                     guint           *keyval,
-                                     gint            *effective_group,
-                                     gint            *level,
-                                     GdkModifierType *consumed_modifiers)
-{
-  g_return_val_if_fail (keymap == NULL || GDK_IS_KEYMAP (keymap), FALSE);
-  g_return_val_if_fail (group < 4, FALSE);
-
-  return gdk_fb_keyboard->dev->translate_keyboard_state (gdk_fb_keyboard,
-                                                        hardware_keycode,
-                                                        state,
-                                                        group,
-                                                        keyval,
-                                                        effective_group,
-                                                        level,
-                                                        consumed_modifiers);
-}
-
-static void
-gdk_fb_handle_key (guint hw_keycode,
-                  guint keyval,
-                  guint modifier_state,
-                  guint8 group,
-                  gchar *string,
-                  gint string_length,
-                  gboolean key_up)
-{
-  GdkWindow *win;
-  GdkEvent *event;
-
-  /* handle some magic keys */
-  if (key_up &&
-      (modifier_state & GDK_CONTROL_MASK) &&
-      (modifier_state & GDK_MOD1_MASK))
-    {
-      if (keyval == GDK_BackSpace)
-       {
-         ioctl (gdk_display->tty_fd, KDSKBMODE, K_XLATE);
-         exit (1);
-       }
-         
-      if (keyval == GDK_Return)
-       gdk_fb_redraw_all ();
-    }
-
-  win = gdk_fb_keyboard_event_window (gdk_fb_window_find_focus (),
-                                     key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS);
-  if (win)
-    {
-      event = gdk_event_make (win,
-                             key_up ? GDK_KEY_RELEASE : GDK_KEY_PRESS,
-                             TRUE);
-    
-      event->key.state = modifier_state;
-      event->key.keyval = keyval;
-      event->key.string = string;
-      event->key.length = string_length;
-      event->key.hardware_keycode = hw_keycode;
-      event->key.group = group;
-    }
-  else
-    g_free (string);
-}
-
-/******************************************************
- ********* Device specific keyboard code **************
- ******************************************************/
-
-
-/* XLATE keyboard driver */
-
-struct {
-  char *str;
-  guint code;
-  guint modifier;
-} xlate_codes[] =
-{
-  {"\x5b\x41", GDK_F1},
-  {"\x5b\x42", GDK_F2},
-  {"\x5b\x43", GDK_F3},
-  {"\x5b\x44", GDK_F4},
-  {"\x5b\x45", GDK_F5},
-  {"\x31\x37\x7e", GDK_F6},
-  {"\x31\x38\x7e", GDK_F7},
-  {"\x31\x39\x7e", GDK_F8},
-  {"\x32\x30\x7e", GDK_F9},
-  {"\x32\x31\x7e", GDK_F10},
-  {"\x32\x33\x7e", GDK_F11},
-  {"\x32\x34\x7e", GDK_F12},
-  
-  {"\x32\x35\x7e", GDK_F1, GDK_SHIFT_MASK},
-  {"\x32\x36\x7e", GDK_F2, GDK_SHIFT_MASK},
-  {"\x32\x38\x7e", GDK_F3, GDK_SHIFT_MASK},
-  {"\x32\x39\x7e", GDK_F4, GDK_SHIFT_MASK},
-  {"\x33\x31\x7e", GDK_F5, GDK_SHIFT_MASK},
-  {"\x33\x32\x7e", GDK_F6, GDK_SHIFT_MASK},
-  {"\x33\x33\x7e", GDK_F7, GDK_SHIFT_MASK},
-  {"\x33\x34\x7e", GDK_F8, GDK_SHIFT_MASK},
-
-  {"\x31\x7e", GDK_Home},
-  {"\x35\x7e", GDK_Page_Up},
-  {"\x34\x7e", GDK_End},
-  {"\x36\x7e", GDK_Page_Down},
-  {"\x32\x7e", GDK_Insert},
-  {"\x33\x7e", GDK_Delete},
-
-  {"\x41", GDK_Up},
-  {"\x44", GDK_Left},
-  {"\x42", GDK_Down},
-  {"\x43", GDK_Right},
-  {"\x50", GDK_Break},
-};
-
-struct {
-  guint code;
-  guint modifier;
-} xlate_chars[] =
-{
-  /* 0x00 */
-  {'@', GDK_CONTROL_MASK},
-  {'a', GDK_CONTROL_MASK},
-  {'b', GDK_CONTROL_MASK},
-  {'c', GDK_CONTROL_MASK},
-  {'d', GDK_CONTROL_MASK},
-  {'e', GDK_CONTROL_MASK},
-  {'f', GDK_CONTROL_MASK},
-  {'g', GDK_CONTROL_MASK},
-  {'h', GDK_CONTROL_MASK},
-  {GDK_Tab, 0},
-  {'j', GDK_CONTROL_MASK},
-  {'k', GDK_CONTROL_MASK},
-  {'l', GDK_CONTROL_MASK},
-  {GDK_Return, 0},
-  {'n', GDK_CONTROL_MASK},
-  {'o', GDK_CONTROL_MASK},
-  /* 0x10 */
-  {'p', GDK_CONTROL_MASK},
-  {'q', GDK_CONTROL_MASK},
-  {'r', GDK_CONTROL_MASK},
-  {'s', GDK_CONTROL_MASK},
-  {'t', GDK_CONTROL_MASK},
-  {'u', GDK_CONTROL_MASK},
-  {'v', GDK_CONTROL_MASK},
-  {'w', GDK_CONTROL_MASK},
-  {'x', GDK_CONTROL_MASK},
-  {'y', GDK_CONTROL_MASK},
-  {'z', GDK_CONTROL_MASK},
-  {GDK_Escape, 0},
-  {'\\', GDK_CONTROL_MASK},
-  {']', GDK_CONTROL_MASK},
-  {'^', GDK_CONTROL_MASK},
-  {'_', GDK_CONTROL_MASK},
-  /* 0x20 */
-  {GDK_space, 0},
-  {'!', 0},
-  {'"', 0},
-  {'#', 0},
-  {'$', 0},
-  {'%', 0},
-  {'&', 0},
-  {'\'', 0},
-  {'(', 0},
-  {')', 0},
-  {'*', 0},
-  {'+', 0},
-  {',', 0},
-  {'-', 0},
-  {'.', 0},
-  {'/', 0},
-  /* 0x30 */
-  {'0', 0},
-  {'1', 0},
-  {'2', 0},
-  {'3', 0},
-  {'4', 0},
-  {'5', 0},
-  {'6', 0},
-  {'7', 0},
-  {'8', 0},
-  {'9', 0},
-  {':', 0},
-  {';', 0},
-  {'<', 0},
-  {'=', 0},
-  {'>', 0},
-  {'?', 0},
-  /* 0x40 */
-  {'@', 0},
-  {'A', 0},
-  {'B', 0},
-  {'C', 0},
-  {'D', 0},
-  {'E', 0},
-  {'F', 0},
-  {'G', 0},
-  {'H', 0},
-  {'I', 0},
-  {'J', 0},
-  {'K', 0},
-  {'L', 0},
-  {'M', 0},
-  {'N', 0},
-  {'O', 0},
-  /* 0x50 */
-  {'P', 0},
-  {'Q', 0},
-  {'R', 0},
-  {'S', 0},
-  {'T', 0},
-  {'U', 0},
-  {'V', 0},
-  {'W', 0},
-  {'X', 0},
-  {'Y', 0},
-  {'Z', 0},
-  {'[', 0},
-  {'\\', 0},
-  {']', 0},
-  {'^', 0},
-  {'_', 0},
-  /* 0x60 */
-  {'`', 0},
-  {'a', 0},
-  {'b', 0},
-  {'c', 0},
-  {'d', 0},
-  {'e', 0},
-  {'f', 0},
-  {'g', 0},
-  {'h', 0},
-  {'i', 0},
-  {'j', 0},
-  {'k', 0},
-  {'l', 0},
-  {'m', 0},
-  {'n', 0},
-  {'o', 0},
-  /* 0x70 */
-  {'p', 0},
-  {'q', 0},
-  {'r', 0},
-  {'s', 0},
-  {'t', 0},
-  {'u', 0},
-  {'v', 0},
-  {'w', 0},
-  {'x', 0},
-  {'y', 0},
-  {'z', 0},
-  {'{', 0},
-  {'|', 0},
-  {'}', 0},
-  {'~', 0},
-  {GDK_BackSpace, 0},
-  /* 0x80 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0x90 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xA0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xB0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xC0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xD0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xE0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  /* 0xF0 */
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-  {0, 0},
-};
-
-static gboolean
-iscode (char *code, char *str, int str_max)
-{
-  int i;
-
-  for (i = 0; code[i] && (i < str_max); i++)
-    {
-      if (code[i] != str[i])
-       return FALSE;
-    }
-  return (code[i] == 0);
-}
-
-static gboolean
-xlate_io (GIOChannel *gioc,
-         GIOCondition cond,
-         gpointer data)
-{
-  GdkFBKeyboard *keyb = (GdkFBKeyboard *)data;
-  guchar buf[128];
-  guint keycode;
-  guint modifier;
-  gboolean handled;
-  int i, n, j;
-  int left;
-  
-  n = read (keyb->fd, buf, sizeof(buf));
-  if (n <= 0)
-    g_error ("Nothing from keyboard!");
-
-  for (i = 0; i < n; )
-    {
-      handled = FALSE;
-      modifier = 0;
-      if ((buf[i] == 27) && (i+1 != n)) /* Escape */
-       {
-         /* Esc is not the last char in buffer, interpret as code sequence */
-         if (buf[i+1] == '[')
-           {
-             i += 2;
-             left = n-i;
-             if (left <= 0)
-               return TRUE;
-
-             for (j=0;j<G_N_ELEMENTS (xlate_codes);j++)
-               {
-                 if (iscode (xlate_codes[j].str, &buf[i], left))
-                   {
-                     /* Ctrl-Alt Return can't be pressed in the XLATE driver,
-                      * use Shift F1 instead */
-                     if ((xlate_codes[j].code == GDK_F1) &&
-                         (xlate_codes[j].modifier & GDK_SHIFT_MASK))
-                       gdk_fb_redraw_all ();
-
-                     if ((xlate_codes[j].code == GDK_F2) &&
-                         (xlate_codes[j].modifier & GDK_SHIFT_MASK))
-                       {
-                         static gint deg = 0;
-                         deg = (deg + 1) % 4;
-                           
-                         gdk_fb_set_rotation (deg);
-                       }
-
-                     if ((xlate_codes[j].code == GDK_F8) &&
-                         (xlate_codes[j].modifier & GDK_SHIFT_MASK))
-                       exit (1);
-
-                     
-                     gdk_fb_handle_key (xlate_codes[j].code,
-                                        xlate_codes[j].code,
-                                        xlate_codes[j].modifier,
-                                        0,
-                                        NULL,
-                                        0,
-                                        FALSE);
-                     gdk_fb_handle_key (xlate_codes[j].code,
-                                        xlate_codes[j].code,
-                                        xlate_codes[j].modifier,
-                                        0,
-                                        NULL,
-                                        0,
-                                        TRUE);
-                     i += strlen (xlate_codes[j].str);
-                     handled = TRUE;
-                     break;
-                   }
-               }
-           }
-         else
-           {
-             /* Alt-key */
-             modifier |= GDK_MOD1_MASK;
-             i++;
-           }
-       }
-      if (!handled)
-       {
-         char dummy[2];
-         gint len;
-         
-         keycode = xlate_chars[buf[i]].code;
-         if (keycode == 0)
-           keycode = buf[i];
-         modifier |= xlate_chars[buf[i]].modifier;
-         
-         dummy[0] = keycode;
-         dummy[1] = 0;
-
-         len = ((keycode < 255) && isprint (keycode)) ? 1 : 0;
-         gdk_fb_handle_key (keycode,
-                            keycode,
-                            modifier,
-                            0,
-                            (len)?g_strdup(dummy) : NULL,
-                            len,
-                            FALSE);
-         gdk_fb_handle_key (keycode,
-                            keycode,
-                            modifier,
-                            0,
-                            (len)?g_strdup(dummy) : NULL,
-                            len,
-                            TRUE);
-         i++;
-       }
-    }
-  return TRUE;
-}
-
-static gboolean
-write_string (gint         fd,
-             const gchar *str)
-{
-  gsize to_write = strlen (str);
-
-  while (to_write > 0)
-    {
-      gssize count = write (fd, str, to_write);
-      if (count < 0)
-       {
-         if (errno != EINTR)
-           return FALSE;
-       }
-      else
-       {
-         to_write -= count;
-         str += count;
-       }
-    }
-
-  return TRUE;
-}
-
-static gboolean
-xlate_open (GdkFBKeyboard *kb)
-{
-  const char cursoroff_str[] = "\033[?1;0;0c";
-  struct termios ts;
-  
-  tcgetattr (gdk_display->tty_fd, &ts);
-  ts.c_cc[VTIME] = 0;
-  ts.c_cc[VMIN] = 1;
-  ts.c_lflag &= ~(ICANON|ECHO|ISIG);
-  ts.c_iflag = 0;
-  tcsetattr (gdk_display->tty_fd, TCSAFLUSH, &ts);
-
-  tcsetpgrp (gdk_display->tty_fd, getpgrp());
-
-  write_string (gdk_display->tty_fd, cursoroff_str);
-  
-  ioctl (gdk_display->tty_fd, KDSKBMODE, K_XLATE);
-
-  kb->fd = gdk_display->tty_fd;
-  kb->io = g_io_channel_unix_new (kb->fd);
-  kb->io_tag = g_io_add_watch (kb->io,
-                              G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
-                              xlate_io,
-                              kb);
-  
-  return TRUE;
-}
-
-static void
-xlate_close (GdkFBKeyboard *kb)
-{
-  struct termios ts;
-  const char cursoron_str[] = "\033c\033[3g\033]R";
-
-  write_string (gdk_display->tty_fd, cursoron_str);
-
-  tcgetattr (gdk_display->tty_fd, &ts);
-  ts.c_lflag |= (ICANON|ECHO|ISIG);
-  tcsetattr (gdk_display->tty_fd, TCSAFLUSH, &ts);
-  
-  g_source_remove (kb->io_tag);
-  g_io_channel_unref (kb->io);
-  kb->fd = -1;
-  /* don't close kb->fd, it is the tty from gdk_display */
-}
-
-static guint
-xlate_lookup (GdkFBKeyboard       *kb,
-             const GdkKeymapKey  *key)
-{
-  if (key->group != 0)
-    return 0;
-  if (key->level != 0)
-    return 0;
-  return key->keycode;
-}
-
-static gboolean
-xlate_translate (GdkFBKeyboard       *kb,
-                guint                hardware_keycode,
-                GdkModifierType      state,
-                gint                 group,
-                guint               *keyval,
-                gint                *effective_group,
-                gint                *level,
-                GdkModifierType     *consumed_modifiers)
-{
-  if (keyval)
-    *keyval = hardware_keycode;
-  if (effective_group)
-    *effective_group = 0;
-  if (level)
-    *level = 0;
-  if (consumed_modifiers)
-    *consumed_modifiers = 0;
-  return TRUE;
-}
-
-static gboolean
-xlate_get_for_keyval (GdkFBKeyboard       *kb,
-                     guint                keyval,
-                     GdkKeymapKey       **keys,
-                     gint                *n_keys)
-{
-  *n_keys = 1;
-  *keys = g_new (GdkKeymapKey, 1);
-  (*keys)->keycode = keyval;
-  (*keys)->group = 0;
-  (*keys)->level = 0;
-  return TRUE;
-}
-
-static gboolean
-xlate_get_for_keycode (GdkFBKeyboard       *kb,
-                      guint                hardware_keycode,
-                      GdkKeymapKey       **keys,
-                      guint              **keyvals,
-                      gint                *n_entries)
-{
-  if (keys)
-    {
-      *keys = g_new (GdkKeymapKey, 1);
-      (*keys)->keycode = hardware_keycode;
-      (*keys)->level = 0;
-      (*keys)->group = 0;
-    }
-  if (keyvals)
-    {
-      *keyvals = g_new (guint, 1);
-      **keyvals = hardware_keycode;
-    }
-  if (n_entries)
-    *n_entries = 1;
-
-  return TRUE;
-}
-
-/* Raw keyboard support */
-
-static const guint trans_table[256][3] = {
-  /* 0x00 */
-  {0, 0, 0},
-  {GDK_Escape, 0, 0},
-  {'1', '!', 0},
-  {'2', '@', 0},
-  {'3', '#', 0},
-  {'4', '$', 0},
-  {'5', '%', 0},
-  {'6', '^', 0},
-  {'7', '&', 0},
-  {'8', '*', 0},
-  {'9', '(', 0},
-  {'0', ')', 0},
-  {'-', '_', 0},
-  {'=', '+', 0},
-  {GDK_BackSpace, 0, 0},
-  {GDK_Tab, 0, 0},
-
-  /* 0x10 */
-  {'q', 'Q', 0},
-  {'w', 'W', 0},
-  {'e', 'E', 0},
-  {'r', 'R', 0},
-  {'t', 'T', 0},
-  {'y', 'Y', 0},
-  {'u', 'U', 0},
-  {'i', 'I', 0},
-  {'o', 'O', 0},
-  {'p', 'P', 0},
-  {'[', '{', 0},
-  {']', '}', 0},
-  {GDK_Return, 0, 0},
-  {GDK_Control_L, 0, 0}, /* mod */
-  {'a', 'A', 0},
-  {'s', 'S', 0},
-
-       /* 0x20 */
-  {'d', 'D', 0},
-  {'f', 'F', 0},
-  {'g', 'G', 0},
-  {'h', 'H', 0},
-  {'j', 'J', 0},
-  {'k', 'K', 0},
-  {'l', 'L', 0},
-  {';', ':', 0},
-  {'\'', '"', 0},
-  {'`', '~', 0},
-  {GDK_Shift_L, 0, 0}, /* mod */
-  {'\\', 0, 0},
-  {'z', 0, 0},
-  {'x', 0, 0},
-  {'c', 0, 0},
-
-  {'v', 'V', 0},
-
-       /* 0x30 */
-  {'b', 'B', 0},
-  {'n', 'N', 0},
-  {'m', 'M', 0},
-  {',', 0, 0},
-  {'.', 0, 0},
-  {'/', 0, 0},
-  {GDK_Shift_R, 0, 0}, /* mod */
-  {GDK_KP_Multiply, 0, 0},
-  {0, 0, 0},
-  {GDK_space, 0, 0},
-  {0, 0, 0},
-  {GDK_F1, 0, 0},
-  {GDK_F2, 0, 0},
-  {GDK_F3, 0, 0},
-  {GDK_F4, 0, 0},
-  {GDK_F5, 0, 0},
-
-       /* 0x40 */
-  {GDK_F6, 0, 0},
-  {GDK_F7, 0, 0},
-  {GDK_F8, 0, 0},
-  {GDK_F9, 0, 0},
-  {GDK_F10, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {'7', 0, 0},
-  {'8', 0, 0},
-  {'9', 0, 0},
-  {'-', 0, 0},
-  {'4', 0, 0},
-  {'5', 0, 0},
-  {'6', 0, 0},
-  {'+', 0, 0},
-  {'1', 0, 0},
-
-       /* 0x50 */
-  {'2', 0, 0},
-  {'3', 0, 0},
-  {'0', 0, 0},
-  {'.', 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {GDK_F11, 0, 0},
-  {GDK_F12, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0x60 */
-  {GDK_Return, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {GDK_Home, 0, 0},
-  {GDK_Up, 0, 0},
-  {GDK_Page_Up, 0, 0},
-  {GDK_Left, 0, 0},
-  {GDK_Right, 0, 0},
-  {GDK_End, 0, 0},
-  {GDK_Down, 0, 0},
-  {GDK_Page_Down, 0, 0},
-  {GDK_Insert, 0, 0},
-  {GDK_Delete, 0, 0},
-
-       /* 0x70 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0x80 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0x90 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xA0 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xB0 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xC0 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {GDK_Up, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {GDK_Left, 0, 0},
-  {0, 0, 0},
-  {GDK_Right, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xD0 */
-  {GDK_Down, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xE0 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-
-       /* 0xF0 */
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-  {0, 0, 0},
-};
-
-static gboolean
-raw_io (GIOChannel *gioc,
-       GIOCondition cond,
-       gpointer data)
-{
-  GdkFBKeyboard *k = data;
-  guchar buf[128];
-  int i, n;
-
-  n = read (k->fd, buf, sizeof(buf));
-  if (n <= 0)
-    g_error("Nothing from keyboard!");
-
-  for (i = 0; i < n; i++)
-    {
-      guchar keycode;
-      gboolean key_up;
-      char dummy[2];
-      int len;
-      int mod;
-      guint keyval;
-
-      keycode = buf[i] & 0x7F;
-      key_up = buf[i] & 0x80;
-
-      if (keycode > G_N_ELEMENTS (trans_table))
-       {
-         g_warning ("Unknown keycode");
-         continue;
-       }
-
-      if ( (keycode == 0x1D) /* left Ctrl */
-          || (keycode == 0x9D) /* right Ctrl */
-          || (keycode == 0x38) /* left Alt */
-          || (keycode == 0xB8) /* right Alt */
-          || (keycode == 0x2A) /* left Shift */
-          || (keycode == 0x36) /* right Shift */)
-       {
-         switch (keycode)
-           {
-           case 0x1D: /* Left Ctrl */
-           case 0x9D: /* Right Ctrl */
-             if (key_up)
-               k->modifier_state &= ~GDK_CONTROL_MASK;
-             else
-               k->modifier_state |= GDK_CONTROL_MASK;
-             break;
-           case 0x38: /* Left Alt */
-           case 0xB8: /* Right Alt */
-             if (key_up)
-               k->modifier_state &= ~GDK_MOD1_MASK;
-             else
-               k->modifier_state |= GDK_MOD1_MASK;
-             break;
-           case 0x2A: /* Left Shift */
-           case 0x36: /* Right Shift */
-             if (key_up)
-               k->modifier_state &= ~GDK_SHIFT_MASK;
-             else
-               k->modifier_state |= GDK_SHIFT_MASK;
-             break;
-           }
-         continue; /* Don't generate events for modifiers */
-       }
-
-      if (keycode == 0x3A /* Caps lock */)
-       {
-         if (!key_up)
-           k->caps_lock = !k->caps_lock;
-         
-         ioctl (k->fd, KDSETLED, k->caps_lock ? LED_CAP : 0);
-         continue;
-       }
-
-      if (trans_table[keycode][0] >= GDK_F1 &&
-         trans_table[keycode][0] <= GDK_F35 &&
-         (k->modifier_state & GDK_MOD1_MASK))
-       {
-         if (key_up) /* Only switch on release */
-           {
-             gint vtnum = trans_table[keycode][0] - GDK_F1 + 1;
-
-             /* Do the whole funky VT switch thing */
-             ioctl (gdk_display->console_fd, VT_ACTIVATE, vtnum);
-           }
-
-         continue;
-       }
-
-      keyval = 0;
-      mod = 0;
-      if (k->modifier_state & GDK_CONTROL_MASK)
-       mod = 2;
-      else if (k->modifier_state & GDK_SHIFT_MASK)
-       mod = 1;
-      do {
-       keyval = trans_table[keycode][mod--];
-      } while (!keyval && (mod >= 0));
-
-      if (k->caps_lock && (keyval >= 'a') && (keyval <= 'z'))
-       keyval = toupper (keyval);
-
-      if (!keyval)
-       continue;
-
-      len = isprint (keyval) ? 1 : 0;
-      dummy[0] = keyval;
-      dummy[1] = 0;
-
-      gdk_fb_handle_key (keycode,
-                        keyval,
-                        k->modifier_state,
-                        0,
-                        (len)?g_strdup(dummy):NULL,
-                        len,
-                        key_up);
-    }
-
-  return TRUE;
-}
-
-static gboolean
-raw_open (GdkFBKeyboard *kb)
-{
-  const char cursoroff_str[] = "\033[?1;0;0c";
-  struct termios ts;
-  
-  tcgetattr (gdk_display->tty_fd, &ts);
-  ts.c_cc[VTIME] = 0;
-  ts.c_cc[VMIN] = 1;
-  ts.c_lflag &= ~(ICANON|ECHO|ISIG);
-  ts.c_iflag = 0;
-  tcsetattr (gdk_display->tty_fd, TCSAFLUSH, &ts);
-
-  tcsetpgrp (gdk_display->tty_fd, getpgrp());
-
-  write_string (gdk_display->tty_fd, cursoroff_str);
-  
-  if (ioctl (gdk_display->tty_fd, KDSKBMODE, K_MEDIUMRAW) < 0)
-    {
-      g_warning ("setting tty to K_MEDIUMRAW failed (are you root?)");
-      return FALSE;
-    }
-
-  kb->fd = gdk_display->tty_fd;
-  kb->io = g_io_channel_unix_new (kb->fd);
-  kb->io_tag = g_io_add_watch (kb->io,
-                              G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
-                              raw_io,
-                              kb);
-  
-  return TRUE;
-}
-
-static void
-raw_close (GdkFBKeyboard *kb)
-{
-  struct termios ts;
-  const char cursoron_str[] = "\033c";
-
-  write_string (gdk_display->tty_fd, cursoron_str);
-
-  tcgetattr (gdk_display->tty_fd, &ts);
-  ts.c_lflag |= (ICANON|ECHO|ISIG);
-  tcsetattr (gdk_display->tty_fd, TCSAFLUSH, &ts);
-  
-  ioctl (gdk_display->tty_fd, KDSKBMODE, K_XLATE);
-
-  g_source_remove (kb->io_tag);
-  g_io_channel_unref (kb->io);
-  /* don't close kb->fd, it is the tty from gdk_display */
-}
-
-static guint
-raw_lookup (GdkFBKeyboard       *kb,
-           const GdkKeymapKey  *key)
-{
-  if (key->group != 0)
-    return 0;
-  if ((key->keycode < 0) || (key->keycode >= 256))
-    return 0;
-  if ((key->level < 0) || (key->level >= 3))
-    return 0;
-  return trans_table[key->keycode][key->level];
-}
-
-static gboolean
-raw_translate (GdkFBKeyboard       *kb,
-              guint                hardware_keycode,
-              GdkModifierType      state,
-              gint                 group,
-              guint               *keyval,
-              gint                *effective_group,
-              gint                *level,
-              GdkModifierType     *consumed_modifiers)
-{
-  guint tmp_keyval;
-  gint tmp_level;
-
-  if (keyval)
-    *keyval = 0;
-  if (effective_group)
-    *effective_group = 0;
-  if (level)
-    *level = 0;
-  if (consumed_modifiers)
-    *consumed_modifiers = 0;
-
-  if ((hardware_keycode < 0) || (hardware_keycode >= 256))
-    return FALSE;
-
-  if (group != 0)
-    return FALSE;
-
-  if (state & GDK_CONTROL_MASK)
-    tmp_level = 2;
-  else if (state & GDK_SHIFT_MASK)
-    tmp_level = 1;
-  else
-    tmp_level = 0;
-
-  do {
-    tmp_keyval = trans_table[hardware_keycode][tmp_level --];
-  } while (!tmp_keyval && (tmp_level >= 0));
-
-  if (keyval)
-    *keyval = tmp_keyval;
-  if (level)
-    *level = tmp_level;
-
-  return TRUE;
-}
-
-static gboolean
-raw_get_for_keyval (GdkFBKeyboard       *kb,
-                   guint                keyval,
-                   GdkKeymapKey       **keys,
-                   gint                *n_keys)
-{
-  GArray *retval;
-  int i, j;
-
-  retval = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
-
-  for (i = 0; i < 256; i++)
-    for (j = 0; j < 3; j++)
-      if (trans_table[i][j] == keyval)
-       {
-         GdkKeymapKey key;
-
-         key.keycode = i;
-         key.group = 0;
-         key.level = j;
-
-         g_array_append_val (retval, key);
-       }
-
-  if (retval->len > 0)
-    {
-      *keys = (GdkKeymapKey*) retval->data;
-      *n_keys = retval->len;
-    }
-  else
-    {
-      *keys = NULL;
-      *n_keys = 0;
-    }
-
-  g_array_free (retval, retval->len > 0 ? FALSE : TRUE);
-
-  return *n_keys > 0;
-}
-
-static gboolean
-raw_get_for_keycode (GdkFBKeyboard       *kb,
-                    guint                hardware_keycode,
-                    GdkKeymapKey       **keys,
-                    guint              **keyvals,
-                    gint                *n_entries)
-{
-  GArray *key_array;
-  GArray *keyval_array;
-  int i;
-
-  if (hardware_keycode <= 0 ||
-      hardware_keycode >= 256)
-    { 
-      if (keys)
-        *keys = NULL;
-      if (keyvals)
-        *keyvals = NULL;
-
-      *n_entries = 0;
-      return FALSE;
-    }
-
-  if (keys)
-    key_array = g_array_new (FALSE, FALSE, sizeof (GdkKeymapKey));
-  else
-    key_array = NULL;
-
-  if (keyvals)
-    keyval_array = g_array_new (FALSE, FALSE, sizeof (guint));
-  else
-    keyval_array = NULL;
-
-  for (i = 0; i < 3; i++)
-    {
-      if (key_array)
-       {
-         GdkKeymapKey key;
-
-         key.keycode = hardware_keycode;
-         key.group = 0;
-         key.level = i;
-
-         g_array_append_val (key_array, key);
-       }
-
-      if (keyval_array)
-       {
-         g_array_append_val (keyval_array, trans_table[hardware_keycode][i]);
-       }
-    }
-
-  if ((key_array && key_array->len > 0) ||
-      (keyval_array && keyval_array->len > 0))
-    { 
-      if (keys)
-        *keys = (GdkKeymapKey*) key_array->data;
-
-      if (keyvals)
-        *keyvals = (guint*) keyval_array->data;
-
-      if (key_array)
-        *n_entries = key_array->len;
-      else
-        *n_entries = keyval_array->len;
-    }
-  else
-    { 
-      if (keys)
-        *keys = NULL;
-
-      if (keyvals)
-        *keyvals = NULL;
-
-      *n_entries = 0;
-    }
-
-  if (key_array)
-    g_array_free (key_array, key_array->len > 0 ? FALSE : TRUE);
-  if (keyval_array)
-    g_array_free (keyval_array, keyval_array->len > 0 ? FALSE : TRUE);
-
-  return *n_entries > 0;
-}
diff --git a/gdk/linux-fb/gdkmain-fb.c b/gdk/linux-fb/gdkmain-fb.c
deleted file mode 100644 (file)
index 0242d80..0000000
+++ /dev/null
@@ -1,1652 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <sys/types.h>
-#include <sys/mman.h>
-#include <sys/ioctl.h>
-#include <ctype.h>
-#include <stdio.h>
-#include <time.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/vt.h>
-#include <sys/kd.h>
-#include <errno.h>
-#include <signal.h>
-
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include "gdk.h"
-
-#include "gdkprivate-fb.h"
-#include "gdkinternals.h"
-#include "gdkfbmanager.h"
-
-/* Private variable declarations
- */
-static int gdk_initialized = 0;                            /* 1 if the library is initialized,
-                                                    * 0 otherwise.
-                                                    */
-
-#ifdef G_ENABLE_DEBUG
-static const GDebugKey gdk_debug_keys[] = {
-  {"misc",         GDK_DEBUG_MISC},
-  {"events",       GDK_DEBUG_EVENTS},
-};
-
-static const int gdk_ndebug_keys = sizeof(gdk_debug_keys)/sizeof(GDebugKey);
-
-#endif /* G_ENABLE_DEBUG */
-
-GOptionEntry _gdk_windowing_args[] = {
-  { NULL }
-};
-
-static const GScannerConfig     fb_modes_scanner_config =
-{
-  (
-   " \t\n"
-   )                    /* cset_skip_characters */,
-  (
-   G_CSET_a_2_z
-   G_CSET_A_2_Z
-   )                    /* cset_identifier_first */,
-  (
-   G_CSET_a_2_z
-   "_-0123456789"
-   G_CSET_A_2_Z
-   )                    /* cset_identifier_nth */,
-  ( "#\n" )             /* cpair_comment_single */,
-  
-  FALSE                  /* case_sensitive */,
-  
-  FALSE                 /* skip_comment_multi */,
-  TRUE                  /* skip_comment_single */,
-  FALSE                 /* scan_comment_multi */,
-  TRUE                  /* scan_identifier */,
-  TRUE                  /* scan_identifier_1char */,
-  FALSE                 /* scan_identifier_NULL */,
-  TRUE                  /* scan_symbols */,
-  FALSE                 /* scan_binary */,
-  FALSE                 /* scan_octal */,
-  FALSE                  /* scan_float */,
-  FALSE                  /* scan_hex */,
-  FALSE                 /* scan_hex_dollar */,
-  FALSE                 /* scan_string_sq */,
-  TRUE                  /* scan_string_dq */,
-  TRUE                  /* numbers_2_int */,
-  FALSE                 /* int_2_float */,
-  FALSE                 /* identifier_2_string */,
-  TRUE                  /* char_2_token */,
-  FALSE                 /* symbol_2_token */,
-  FALSE                 /* scope_0_fallback */,
-};
-
-enum {
-  FB_MODE,
-  FB_ENDMODE,
-  FB_GEOMETRY,
-  FB_TIMINGS,
-  FB_LACED,
-  FB_HSYNC,
-  FB_VSYNC,
-  FB_CSYNC,
-  FB_EXTSYNC,
-  FB_DOUBLE,
-  FB_ACCEL
-};
-
-char *fb_modes_keywords[] =
-{
-  "mode",
-  "endmode",
-  "geometry",
-  "timings",
-  "laced",
-  "hsync",
-  "vsync",
-  "csync",
-  "extsync",
-  "double",
-  "accel"
-};
-
-static int
-fb_modes_parse_mode (GScanner *scanner,
-                    struct fb_var_screeninfo *modeinfo,
-                    char *specified_modename)
-{
-  guint token;
-  int keyword;
-  int i;
-  char *modename;
-  int geometry[5];
-  int timings[7];
-  int vsync=0, hsync=0, csync=0, extsync=0, doublescan=0, laced=0, accel=1;
-  int found_geometry = 0;
-  int found_timings = 0;
-    
-  token = g_scanner_get_next_token (scanner);
-  if (token != G_TOKEN_SYMBOL)
-    return -1;
-  
-  keyword = GPOINTER_TO_INT (scanner->value.v_symbol);
-  if (keyword != FB_MODE)
-    return -1;
-
-  token = g_scanner_get_next_token (scanner);
-  if (token != G_TOKEN_STRING)
-    return -1;
-
-  modename = g_strdup (scanner->value.v_string);
-  
-  token = g_scanner_get_next_token (scanner);
-  if (token != G_TOKEN_SYMBOL)
-    {
-      g_free (modename);
-      return -1; /* Not a valid keyword */
-    }
-  keyword = GPOINTER_TO_INT (scanner->value.v_symbol);
-  while ( keyword != FB_ENDMODE )
-    {
-
-      switch (GPOINTER_TO_INT (scanner->value.v_symbol))
-       {
-       case FB_GEOMETRY:
-         for (i = 0; i < 5;i++) {
-           token = g_scanner_get_next_token (scanner);
-           if (token != G_TOKEN_INT)
-             {
-               g_free (modename);
-               return -1; /* need a integer */
-             }
-           geometry[i] = scanner->value.v_int;
-         }
-         found_geometry = TRUE;
-         break;
-       case FB_TIMINGS:
-         for (i = 0; i < 7; i++) {
-           token = g_scanner_get_next_token (scanner);
-           if (token != G_TOKEN_INT)
-             {
-               g_free (modename);
-               return -1; /* need a integer */
-             }
-           timings[i] = scanner->value.v_int;
-         }
-         found_timings = TRUE;
-         break;
-       case FB_LACED:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-             {
-               g_free (modename);
-               return -1;
-             }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "true")==0)
-           laced = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "false")==0)
-           laced = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_EXTSYNC:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-             {
-               g_free (modename);
-               return -1;
-             }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "true")==0)
-           extsync = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "false")==0)
-           extsync = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_DOUBLE:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-             {
-               g_free (modename);
-               return -1;
-             }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "true")==0)
-           doublescan = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "false")==0)
-           doublescan = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_VSYNC:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-             {
-               g_free (modename);
-               return -1;
-             }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "high")==0)
-           vsync = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "low")==0)
-           vsync = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_HSYNC:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-           {
-             g_free (modename);
-             return -1;
-           }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "high")==0)
-           hsync = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "low")==0)
-           hsync = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_CSYNC:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-           {
-             g_free (modename);
-             return -1;
-           }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "high")==0)
-           csync = 1;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "low")==0)
-           csync = 0;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       case FB_ACCEL:
-         token = g_scanner_get_next_token (scanner);
-         if (token != G_TOKEN_IDENTIFIER)
-           {
-             g_free (modename);
-             return -1;
-           }
-         if (g_ascii_strcasecmp (scanner->value.v_identifier, "false")==0)
-           accel = 0;
-         else if (g_ascii_strcasecmp (scanner->value.v_identifier, "true")==0)
-           accel = 1;
-         else
-           {
-             g_free (modename);
-             return -1;
-           }
-         break;
-       }
-      
-      token = g_scanner_get_next_token (scanner);
-      if (token != G_TOKEN_SYMBOL)
-       {
-         g_free (modename);
-         return -1; /* Not a valid keyword */
-       }
-      keyword = GPOINTER_TO_INT (scanner->value.v_symbol);
-    }
-
-  if (strcmp (modename, specified_modename)== 0) {
-    /* we really should be parsing for rgba. regardless, if rgba isn't found,
-     * we can't assume that the original colors are valid for the new mode */
-    memset (&modeinfo->red, 0, sizeof (modeinfo->red));
-    memset (&modeinfo->green, 0, sizeof (modeinfo->green));
-    memset (&modeinfo->blue, 0, sizeof (modeinfo->blue));
-    memset (&modeinfo->transp, 0, sizeof (modeinfo->transp));
-
-    if (!found_geometry)
-      g_warning ("Geometry not specified");
-
-    if (found_geometry)
-      {
-       modeinfo->xres = geometry[0];
-       modeinfo->yres = geometry[1];
-       modeinfo->xres_virtual = geometry[2];
-       modeinfo->yres_virtual = geometry[3];
-       modeinfo->bits_per_pixel = geometry[4];
-      }
-    
-    if (!found_timings)
-      g_warning ("Timing not specified");
-    
-    if (found_timings)
-      {
-       modeinfo->pixclock = timings[0];
-       modeinfo->left_margin = timings[1];
-       modeinfo->right_margin = timings[2];
-       modeinfo->upper_margin = timings[3];
-       modeinfo->lower_margin = timings[4];
-       modeinfo->hsync_len = timings[5];
-       modeinfo->vsync_len = timings[6];
-       
-       modeinfo->vmode = 0;
-       if (laced)
-         modeinfo->vmode |= FB_VMODE_INTERLACED;
-       if (doublescan)
-         modeinfo->vmode |= FB_VMODE_DOUBLE;
-         
-       modeinfo->sync = 0;
-       if (hsync)
-         modeinfo->sync |= FB_SYNC_HOR_HIGH_ACT;
-       if (vsync)
-         modeinfo->sync |= FB_SYNC_VERT_HIGH_ACT;
-       if (accel)
-         modeinfo->accel_flags = FB_ACCELF_TEXT;
-       else
-         modeinfo->accel_flags = 0;
-      }
-
-    g_free (modename);
-    return 1;
-  }
-  
-  g_free (modename);
-
-  return 0;
-}
-
-static int
-gdk_fb_setup_mode_from_name (struct fb_var_screeninfo *modeinfo,
-                            char *modename)
-{
-  GScanner *scanner;
-  char *filename;
-  gint result;
-  int fd, i;
-  int retval;
-
-  retval = 0;
-  
-  filename = "/etc/fb.modes";
-  
-  fd = open (filename, O_RDONLY);
-  if (fd < 0)
-    {
-      g_warning ("Cannot read %s", filename);
-      return retval;
-    }
-  
-  scanner = g_scanner_new ((GScannerConfig *) &fb_modes_scanner_config);
-  scanner->input_name = filename;
-
-  for (i = 0; i < sizeof(fb_modes_keywords)/sizeof(fb_modes_keywords[0]); i++)
-    g_scanner_scope_add_symbol (scanner, 0, fb_modes_keywords[i], GINT_TO_POINTER (i));
-
-  g_scanner_input_file (scanner, fd);
-  
-  while (1) {
-    if (g_scanner_peek_next_token (scanner) == G_TOKEN_EOF) {
-      break;
-    } 
-    result = fb_modes_parse_mode (scanner, modeinfo, modename);
-      
-    if (result < 0) {
-      g_warning ("parse error in %s at line %d", filename, scanner->line);
-      break;
-    }
-    if (result > 0)
-      {
-       retval = 1;
-       break;
-      }
-  }
-  
-  g_scanner_destroy (scanner);
-  
-  close (fd);
-  
-  return retval;
-}
-  
-
-static int
-gdk_fb_set_mode (GdkFBDisplay *display)
-{
-  char *env, *end;
-  int depth, height, width;
-  gboolean changed;
-  
-  if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)
-    return -1;
-
-  display->orig_modeinfo = display->modeinfo;
-
-  changed = FALSE;
-  
-  env = getenv ("GDK_DISPLAY_MODE");
-  if (env)
-    {
-      if (gdk_fb_setup_mode_from_name (&display->modeinfo, env))
-       changed = TRUE;
-      else
-       g_warning ("Couldn't find mode named '%s'", env);
-    }
-
-  env = getenv ("GDK_DISPLAY_DEPTH");
-  if (env)
-    {
-      depth = strtol (env, &end, 10);
-      if (env != end)
-       {
-         changed = TRUE;
-         display->modeinfo.bits_per_pixel = depth;
-       }
-    }
-  
-  env = getenv ("GDK_DISPLAY_WIDTH");
-  if (env)
-    {
-      width = strtol (env, &end, 10);
-      if (env != end)
-       {
-         changed = TRUE;
-         display->modeinfo.xres = width;
-         display->modeinfo.xres_virtual = width;
-       }
-    }
-    
-  env = getenv ("GDK_DISPLAY_HEIGHT");
-  if (env)
-    {
-      height = strtol (env, &end, 10);
-      if (env != end)
-       {
-         changed = TRUE;
-         display->modeinfo.yres = height;
-         display->modeinfo.yres_virtual = height;
-       }
-    }
-
-  if (changed &&
-      (ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->modeinfo) < 0))
-    {
-      g_warning ("Couldn't set specified mode");
-      return -1;
-    }
-  
-  /* ask for info back to make sure of what we got */
-  if (ioctl (display->fb_fd, FBIOGET_VSCREENINFO, &display->modeinfo) < 0)
-    {
-      g_warning ("Error getting var screen info");
-      return -1;
-    }
-  
-  if (ioctl (display->fb_fd, FBIOGET_FSCREENINFO, &display->sinfo) < 0)
-    {
-      g_warning ("Error getting fixed screen info");
-      return -1;
-    }
-  return 0;
-}
-
-#ifdef ENABLE_FB_MANAGER
-static void
-gdk_fb_switch_from (void)
-{
-  g_print ("Switch from\n");
-  gdk_shadow_fb_stop_updates ();
-  gdk_fb_mouse_close ();
-  gdk_fb_keyboard_close ();
-}
-
-static void
-gdk_fb_switch_to (void)
-{
-  g_print ("switch_to\n");
-  gdk_shadow_fb_update (0, 0, 
-                       gdk_display->fb_width, 
-                       gdk_display->fb_height);
-
-  if (!gdk_fb_keyboard_open ())
-    g_warning ("Failed to re-initialize keyboard");
-  
-  if (!gdk_fb_mouse_open ())
-    g_warning ("Failed to re-initialize mouse");
-
-}
-
-
-static gboolean
-gdk_fb_manager_callback (GIOChannel *gioc,
-                        GIOCondition cond,
-                        gpointer data)
-{
-  struct FBManagerMessage msg;
-  GdkFBDisplay *display;
-  int res;
-
-  display = data;
-
-  res = recv (display->manager_fd, &msg, sizeof (msg), 0);
-
-  if (res==0)
-    {
-      g_source_remove (gdk_display->manager_tag);
-      /*g_io_channel_unref (kb->io);*/
-      close (gdk_display->manager_fd);
-
-    }
-
-  if (res != sizeof (msg))
-    {
-      g_warning ("Got wrong size message");
-      return TRUE;
-    }
-  
-  switch (msg.msg_type)
-    {
-    case FB_MANAGER_SWITCH_FROM:
-      g_print ("Got switch from message\n");
-      display->manager_blocked = TRUE;
-      gdk_fb_switch_from ();
-      msg.msg_type = FB_MANAGER_ACK;
-      send (display->manager_fd, &msg, sizeof (msg), 0);
-      break;
-    case FB_MANAGER_SWITCH_TO:
-      g_print ("Got switch to message\n");
-      display->manager_blocked = FALSE;
-      gdk_fb_switch_to ();
-      break;
-    default:
-      g_warning ("Got unknown message");
-    }
-  return TRUE;
-}
-
-#endif /* ENABLE_FB_MANAGER */
-
-static void
-gdk_fb_manager_connect (GdkFBDisplay *display)
-{
-#ifdef ENABLE_FB_MANAGER
-  int fd;
-  struct sockaddr_un addr;
-  struct msghdr msg = {0};
-  struct cmsghdr *cmsg;
-  struct ucred credentials;
-  struct FBManagerMessage init_msg;
-  struct iovec iov;
-  char buf[CMSG_SPACE (sizeof (credentials))];  /* ancillary data buffer */
-  int *fdptr;
-  int res;
-
-  display->manager_blocked = FALSE;
-  display->manager_fd = -1;
-
-  fd = socket (PF_UNIX, SOCK_STREAM, 0);
-  
-  g_print ("socket: %d\n", fd);
-
-  if (fd < 0)
-    return;
-
-  addr.sun_family = AF_UNIX;
-  strcpy (addr.sun_path, "/tmp/.fb.manager");
-
-  if (connect(fd, (struct sockaddr *)&addr, sizeof (addr)) < 0) 
-    {
-      g_print ("connect failed\n");
-      close (fd);
-      return;
-    }
-  
-  credentials.pid = getpid ();
-  credentials.uid = geteuid ();
-  credentials.gid = getegid ();
-
-  init_msg.msg_type = FB_MANAGER_NEW_CLIENT;
-  iov.iov_base = &init_msg;
-  iov.iov_len = sizeof (init_msg);
-
-  msg.msg_name = NULL;
-  msg.msg_namelen = 0;
-  msg.msg_iov = &iov;
-  msg.msg_iovlen = 1;
-  msg.msg_control = buf;
-  msg.msg_controllen = sizeof buf;
-  cmsg = CMSG_FIRSTHDR(&msg);
-  cmsg->cmsg_level = SOL_SOCKET;
-  cmsg->cmsg_type = SCM_CREDENTIALS;
-  cmsg->cmsg_len = CMSG_LEN (sizeof (credentials));
-  /* Initialize the payload: */
-  fdptr = (int *)CMSG_DATA (cmsg);
-  memcpy (fdptr, &credentials, sizeof (credentials));
-  /* Sum of the length of all control messages in the buffer: */
-  msg.msg_controllen = cmsg->cmsg_len;
-
-  res = sendmsg (fd, &msg, 0);
-
-  display->manager_fd = fd;
-  display->manager_blocked = TRUE;
-
-  display->manager_tag = g_io_add_watch (g_io_channel_unix_new (fd),
-                                        G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL,
-                                        gdk_fb_manager_callback,
-                                        display);
-
-  init_msg.msg_type = FB_MANAGER_REQUEST_SWITCH_TO_PID;
-  init_msg.data = getpid ();
-
-  /* Request a switch-to */
-  send (fd, &init_msg, sizeof (init_msg), 0);
-#endif
-}
-
-static void
-gdk_fb_switch (int sig)
-{
-  if (sig == SIGUSR1)
-    {
-      ioctl (gdk_display->tty_fd, VT_RELDISP, 1);
-      _gdk_fb_is_active_vt = FALSE;
-      gdk_shadow_fb_stop_updates ();
-      gdk_fb_mouse_close ();
-      gdk_fb_keyboard_close ();
-    }
-  else
-    {
-      GdkColormap *cmap;
-      ioctl (gdk_display->tty_fd, VT_RELDISP, VT_ACKACQ);
-      _gdk_fb_is_active_vt = TRUE;
-
-      /* XXX: is it dangerous to put all this stuff in a signal handler? */
-      cmap = gdk_screen_get_default_colormap (_gdk_screen);
-      gdk_colormap_change (cmap, cmap->size);
-
-      gdk_shadow_fb_update (0, 0,
-                           gdk_display->fb_width,
-                           gdk_display->fb_height);
-
-      if (!gdk_fb_keyboard_open ())
-        g_warning ("Failed to re-initialize keyboard");
-
-      if (!gdk_fb_mouse_open ())
-        g_warning ("Failed to re-initialize mouse");
-
-      gdk_fb_redraw_all ();
-    }
-}
-
-static GdkFBDisplay *
-gdk_fb_display_new (void)
-{
-  GdkFBDisplay *display;
-  gchar *fb_filename;
-  struct vt_stat vs;
-  struct vt_mode vtm;
-  int vt, n;
-  gchar *s, *send;
-  char buf[32];
-
-  display = g_new0 (GdkFBDisplay, 1);
-
-  display->console_fd = open ("/dev/console", O_RDWR);
-  if (display->console_fd < 0)
-    {
-      g_warning ("Can't open /dev/console: %s", strerror (errno));
-      g_free (display);
-      return NULL;
-    }
-  
-  ioctl (display->console_fd, VT_GETSTATE, &vs);
-  display->start_vt = vs.v_active;
-
-  vt = display->start_vt;
-  s = getenv("GDK_VT");
-  if (s)
-    {
-      if (g_ascii_strcasecmp ("new", s)==0)
-       {
-         n = ioctl (display->console_fd, VT_OPENQRY, &vt);
-         if (n < 0 || vt == -1)
-           g_error("Cannot allocate new VT");
-       }
-      else
-       {
-         vt = strtol (s, &send, 10);
-         if (s==send)
-           {
-             g_warning ("Cannot parse GDK_VT");
-             vt = display->start_vt;
-           }
-       }
-      
-    }
-
-  display->vt = vt;
-  
-  /* Switch to the new VT */
-  if (vt != display->start_vt)
-    {
-      ioctl (display->console_fd, VT_ACTIVATE, vt);
-      ioctl (display->console_fd, VT_WAITACTIVE, vt);
-    }
-  
-  /* Open the tty */
-  g_snprintf (buf, sizeof(buf), "/dev/tty%d", vt);
-  display->tty_fd = open (buf, O_RDWR|O_NONBLOCK);
-  if (display->tty_fd < 0)
-    {
-      g_warning ("Can't open %s: %s", buf, strerror (errno));
-      close (display->console_fd);
-      g_free (display);
-      return NULL;
-    }
-
-  /* set up switch signals */
-  if (ioctl (display->tty_fd, VT_GETMODE, &vtm) >= 0)
-    {
-      signal (SIGUSR1, gdk_fb_switch);
-      signal (SIGUSR2, gdk_fb_switch);
-      vtm.mode = VT_PROCESS;
-      vtm.waitv = 0;
-      vtm.relsig = SIGUSR1;
-      vtm.acqsig = SIGUSR2;
-      ioctl (display->tty_fd, VT_SETMODE, &vtm);
-    }
-  _gdk_fb_is_active_vt = TRUE;
-  
-  fb_filename = gdk_get_display ();
-  display->fb_fd = open (fb_filename, O_RDWR);
-  if (display->fb_fd < 0)
-    {
-      g_warning ("Can't open %s: %s", fb_filename, strerror (errno));
-      g_free (fb_filename);
-      close (display->tty_fd);
-      close (display->console_fd);
-      g_free (display);
-      return NULL;
-    }
-  g_free (fb_filename);
-
-  if (gdk_fb_set_mode (display) < 0)
-    {
-      close (display->fb_fd);
-      close (display->tty_fd);
-      close (display->console_fd);
-      g_free (display);
-      return NULL;
-    }
-
-  /* Disable normal text on the console */
-  ioctl (display->fb_fd, KDSETMODE, KD_GRAPHICS);
-
-  ioctl (display->fb_fd, FBIOBLANK, 0);
-
-  /* We used to use sinfo.smem_len, but that seemed to be broken in many cases */
-  display->fb_mmap = mmap (NULL,
-                          display->modeinfo.yres * display->sinfo.line_length,
-                          PROT_READ|PROT_WRITE,
-                          MAP_SHARED,
-                          display->fb_fd,
-                          0);
-  g_assert (display->fb_mmap != MAP_FAILED);
-
-  if (display->sinfo.visual == FB_VISUAL_TRUECOLOR)
-    {
-      display->red_byte = display->modeinfo.red.offset >> 3;
-      display->green_byte = display->modeinfo.green.offset >> 3;
-      display->blue_byte = display->modeinfo.blue.offset >> 3;
-    }
-
-#ifdef ENABLE_SHADOW_FB
-  if (_gdk_fb_screen_angle % 2 == 0)
-    {
-      display->fb_width = display->modeinfo.xres;
-      display->fb_height = display->modeinfo.yres;
-    } 
-  else
-    {
-      display->fb_width = display->modeinfo.yres;
-      display->fb_height = display->modeinfo.xres;
-    }
-  display->fb_stride =
-    display->fb_width * (display->modeinfo.bits_per_pixel / 8);
-  display->fb_mem = g_malloc(display->fb_height * display->fb_stride);
-#else
-  display->fb_mem = display->fb_mmap;
-  display->fb_width = display->modeinfo.xres;
-  display->fb_height = display->modeinfo.yres;
-  display->fb_stride = display->sinfo.line_length;
-#endif
-
-  return display;
-}
-
-static void
-gdk_fb_display_destroy (GdkFBDisplay *display)
-{
-  /* Restore old framebuffer mode */
-  ioctl (display->fb_fd, FBIOPUT_VSCREENINFO, &display->orig_modeinfo);
-  
-  /* Enable normal text on the console */
-  ioctl (display->fb_fd, KDSETMODE, KD_TEXT);
-  
-  munmap (display->fb_mmap, display->modeinfo.yres * display->sinfo.line_length);
-  close (display->fb_fd);
-
-  ioctl (display->console_fd, VT_ACTIVATE, display->start_vt);
-  ioctl (display->console_fd, VT_WAITACTIVE, display->start_vt);
-  if (display->vt != display->start_vt)
-    ioctl (display->console_fd, VT_DISALLOCATE, display->vt);
-  
-  close (display->tty_fd);
-  close (display->console_fd);
-  g_free (display);
-}
-
-void
-_gdk_windowing_init (void)
-{
-  if (gdk_initialized)
-    return;
-
-  /* Create new session and become session leader */
-  setsid();
-
-  gdk_display = gdk_fb_display_new ();
-
-  if (!gdk_display)
-    return;
-
-  gdk_shadow_fb_init ();
-  
-  gdk_fb_manager_connect (gdk_display);
-
-  if (!gdk_fb_keyboard_init (!gdk_display->manager_blocked))
-    {
-      g_warning ("Failed to initialize keyboard");
-      gdk_fb_display_destroy (gdk_display);
-      gdk_display = NULL;
-      return;
-    }
-  
-  if (!gdk_fb_mouse_init (!gdk_display->manager_blocked))
-    {
-      g_warning ("Failed to initialize mouse");
-      gdk_fb_keyboard_close ();
-      gdk_fb_display_destroy (gdk_display);
-      gdk_display = NULL;
-      return;
-    }
-
-  /* Although atexit is evil, we need it here because otherwise the
-   * keyboard is left in a bad state. you can still run 'reset' but
-   * that gets annoying after running testgtk for the 20th time.
-   */
-  g_atexit(_gdk_windowing_exit);
-
-  gdk_initialized = TRUE;
-
-  _gdk_selection_property = gdk_atom_intern ("GDK_SELECTION", FALSE);
-
-}
-
-void
-_gdk_windowing_set_default_display (GdkDisplay *display)
-{
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_pointer_grab
- *
- *   Grabs the pointer to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "event_mask" masks only interesting events
- *   "confine_to" limits the cursor movement to the specified window
- *   "cursor" changes the cursor for the duration of the grab
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_pointer_ungrab
- *
- *--------------------------------------------------------------
- */
-
-GdkGrabStatus
-gdk_pointer_grab (GdkWindow *    window,
-                 gint            owner_events,
-                 GdkEventMask    event_mask,
-                 GdkWindow *     confine_to,
-                 GdkCursor *     cursor,
-                 guint32         time)
-{
-  return gdk_fb_pointer_grab (window,
-                             owner_events,
-                             event_mask,
-                             confine_to,
-                             cursor,
-                             time, FALSE);
-}
-
-static gboolean _gdk_fb_pointer_implicit_grab = FALSE;
-
-GdkGrabStatus
-gdk_fb_pointer_grab (GdkWindow *         window,
-                    gint                 owner_events,
-                    GdkEventMask         event_mask,
-                    GdkWindow *          confine_to,
-                    GdkCursor *          cursor,
-                    guint32              time,
-                    gboolean             implicit_grab)
-{
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-  g_return_val_if_fail (confine_to == NULL || GDK_IS_WINDOW (confine_to), 0);
-
-  if (_gdk_fb_pointer_grab_window)
-    {
-      if (implicit_grab && !_gdk_fb_pointer_implicit_grab)
-       return GDK_GRAB_ALREADY_GRABBED;
-
-      gdk_pointer_ungrab (time);
-    }
-
-  gdk_fb_window_send_crossing_events (NULL,
-                                     window,
-                                     GDK_CROSSING_GRAB);  
-
-  if (event_mask & GDK_BUTTON_MOTION_MASK)
-      event_mask |=
-       GDK_BUTTON1_MOTION_MASK |
-       GDK_BUTTON2_MOTION_MASK |
-       GDK_BUTTON3_MOTION_MASK;
-  
-  _gdk_fb_pointer_implicit_grab = implicit_grab;
-
-  _gdk_fb_pointer_grab_window = gdk_window_ref (window);
-  _gdk_fb_pointer_grab_owner_events = owner_events;
-
-  _gdk_fb_pointer_grab_confine = confine_to ? gdk_window_ref (confine_to) : NULL;
-  _gdk_fb_pointer_grab_events = event_mask;
-  _gdk_fb_pointer_grab_cursor = cursor ? gdk_cursor_ref (cursor) : NULL;
-
-
-  
-  if (cursor)
-    gdk_fb_cursor_reset ();
-
-  return GDK_GRAB_SUCCESS;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_display_pointer_ungrab
- *
- *   Releases any pointer grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_display_pointer_ungrab (GdkDisplay *display,
-                           guint32     time)
-{
-  gdk_fb_pointer_ungrab (time, FALSE);
-}
-
-void
-gdk_fb_pointer_ungrab (guint32 time, gboolean implicit_grab)
-{
-  gboolean have_grab_cursor = _gdk_fb_pointer_grab_cursor && 1;
-  GdkWindow *mousewin;
-  GdkWindow *old_grab_window;
-  
-  if (!_gdk_fb_pointer_grab_window)
-    return;
-
-  if (implicit_grab && !_gdk_fb_pointer_implicit_grab)
-    return;
-
-  if (_gdk_fb_pointer_grab_confine)
-    gdk_window_unref (_gdk_fb_pointer_grab_confine);
-  _gdk_fb_pointer_grab_confine = NULL;
-
-  if (_gdk_fb_pointer_grab_cursor)
-    gdk_cursor_unref (_gdk_fb_pointer_grab_cursor);
-  _gdk_fb_pointer_grab_cursor = NULL;
-
-  if (have_grab_cursor)
-    gdk_fb_cursor_reset ();
-
-  old_grab_window = _gdk_fb_pointer_grab_window;
-  
-  _gdk_fb_pointer_grab_window = NULL;
-
-  _gdk_fb_pointer_implicit_grab = FALSE;
-
-  mousewin = gdk_window_at_pointer (NULL, NULL);
-  gdk_fb_window_send_crossing_events (old_grab_window,
-                                     mousewin,
-                                     GDK_CROSSING_UNGRAB);
-  
-  if (old_grab_window)
-    gdk_window_unref (old_grab_window);
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_display_pointer_is_grabbed
- *
- *   Tell wether there is an active x pointer grab in effect
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_display_pointer_is_grabbed (GdkDisplay *display)
-{
-  return _gdk_fb_pointer_grab_window != NULL;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_keyboard_grab
- *
- *   Grabs the keyboard to a specific window
- *
- * Arguments:
- *   "window" is the window which will receive the grab
- *   "owner_events" specifies whether events will be reported as is,
- *     or relative to "window"
- *   "time" specifies the time
- *
- * Results:
- *
- * Side effects:
- *   requires a corresponding call to gdk_keyboard_ungrab
- *
- *--------------------------------------------------------------
- */
-
-GdkGrabStatus
-gdk_keyboard_grab (GdkWindow  *window,
-                  gint        owner_events,
-                  guint32     time)
-{
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-
-  if (_gdk_fb_pointer_grab_window)
-    gdk_keyboard_ungrab (time);
-
-  _gdk_fb_keyboard_grab_window = gdk_window_ref (window);
-  _gdk_fb_keyboard_grab_owner_events = owner_events;
-  
-  return GDK_GRAB_SUCCESS;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_display_keyboard_ungrab
- *
- *   Releases any keyboard grab
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-void
-gdk_display_keyboard_ungrab (GdkDisplay *display,
-                            guint32     time)
-{
-  if (_gdk_fb_keyboard_grab_window)
-    gdk_window_unref (_gdk_fb_keyboard_grab_window);
-  _gdk_fb_keyboard_grab_window = NULL;
-}
-
-gboolean
-gdk_pointer_grab_info_libgtk_only (GdkDisplay *display,
-                                  GdkWindow **grab_window,
-                                  gboolean   *owner_events)
-{
-  if (_gdk_fb_pointer_grab_window)
-    {
-      if (grab_window)
-        *grab_window = (GdkWindow *)_gdk_fb_pointer_grab_window;
-      if (owner_events)
-        *owner_events = _gdk_fb_pointer_grab_owner_events;
-      
-      return TRUE;
-    }
-  else
-    return FALSE;
-}
-
-gboolean
-gdk_keyboard_grab_info_libgtk_only (GdkDisplay *display,
-                                   GdkWindow **grab_window,
-                                   gboolean   *owner_events)
-{
-  if (_gdk_fb_keyboard_grab_window)
-    {
-      if (grab_window)
-        *grab_window = (GdkWindow *)_gdk_fb_keyboard_grab_window;
-      if (owner_events)
-        *owner_events = _gdk_fb_keyboard_grab_owner_events;
-
-      return TRUE;
-    }
-  else
-    return FALSE;
-}
-
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_get_width
- *
- *   Return the width of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_get_width (GdkScreen *screen)
-{
-  return gdk_display->fb_width;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_get_height
- *
- *   Return the height of the screen.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_get_height (GdkScreen *screen)
-{
-  return gdk_display->fb_height;
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_get_width_mm
- *
- *   Return the width of the screen in millimeters.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_get_width_mm (GdkScreen *screen)
-{
-  return 0.5 + gdk_screen_width () * (25.4 / 72.);
-}
-
-/*
- *--------------------------------------------------------------
- * gdk_screen_get_height_mm
- *
- *   Return the height of the screen in millimeters.
- *
- * Arguments:
- *
- * Results:
- *
- * Side effects:
- *
- *--------------------------------------------------------------
- */
-
-gint
-gdk_screen_get_height_mm (GdkScreen *screen)
-{
-  return 0.5 + gdk_screen_height () * (25.4 / 72.);
-}
-
-void
-_gdk_windowing_display_set_sm_client_id (GdkDisplay*  display,
-                                        const gchar* sm_client_id)
-{
-}
-
-extern void keyboard_shutdown(void);
-
-void
-_gdk_windowing_exit (void)
-{
-  struct sigaction action;
-
-  /* don't get interrupted while exiting
-   * (cf. gdkrender-fb.c:gdk_shadow_fb_init) */
-  action.sa_handler = SIG_IGN;
-  sigemptyset (&action.sa_mask);
-  action.sa_flags = 0;
-
-  gdk_fb_mouse_close ();
-  /*leak  g_free (gdk_fb_mouse);*/
-  
-  gdk_fb_keyboard_close ();
-  /*leak g_free (gdk_fb_keyboard);*/
-  
-  gdk_fb_display_destroy (gdk_display);
-  
-  gdk_display = NULL;
-}
-
-gchar *
-gdk_get_display(void)
-{
-  gchar *s;
-
-  s = getenv ("GDK_DISPLAY");
-  if (s==0)
-    s = "/dev/fb0";
-  
-  return g_strdup (s);
-}
-
-void
-gdk_display_beep (GdkDisplay *display)
-{
-  static int pitch = 600, duration = 100;
-  gulong arg;
-
-  /* Thank you XFree86 */
-  arg = ((1193190 / pitch) & 0xffff) |
-    (((unsigned long)duration) << 16);
-
-  ioctl (gdk_display->tty_fd, KDMKTONE, arg);
-}
-
-/* utils */
-static const guint type_masks[] = {
-  GDK_SUBSTRUCTURE_MASK, /* GDK_DELETE         = 0, */
-  GDK_STRUCTURE_MASK, /* GDK_DESTROY           = 1, */
-  GDK_EXPOSURE_MASK, /* GDK_EXPOSE             = 2, */
-  GDK_POINTER_MOTION_MASK, /* GDK_MOTION_NOTIFY        = 3, */
-  GDK_BUTTON_PRESS_MASK, /* GDK_BUTTON_PRESS   = 4, */
-  GDK_BUTTON_PRESS_MASK, /* GDK_2BUTTON_PRESS  = 5, */
-  GDK_BUTTON_PRESS_MASK, /* GDK_3BUTTON_PRESS  = 6, */
-  GDK_BUTTON_RELEASE_MASK, /* GDK_BUTTON_RELEASE       = 7, */
-  GDK_KEY_PRESS_MASK, /* GDK_KEY_PRESS = 8, */
-  GDK_KEY_RELEASE_MASK, /* GDK_KEY_RELEASE     = 9, */
-  GDK_ENTER_NOTIFY_MASK, /* GDK_ENTER_NOTIFY   = 10, */
-  GDK_LEAVE_NOTIFY_MASK, /* GDK_LEAVE_NOTIFY   = 11, */
-  GDK_FOCUS_CHANGE_MASK, /* GDK_FOCUS_CHANGE   = 12, */
-  GDK_STRUCTURE_MASK, /* GDK_CONFIGURE         = 13, */
-  GDK_VISIBILITY_NOTIFY_MASK, /* GDK_MAP               = 14, */
-  GDK_VISIBILITY_NOTIFY_MASK, /* GDK_UNMAP             = 15, */
-  GDK_PROPERTY_CHANGE_MASK, /* GDK_PROPERTY_NOTIFY     = 16, */
-  GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_CLEAR     = 17, */
-  GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_REQUEST = 18, */
-  GDK_PROPERTY_CHANGE_MASK, /* GDK_SELECTION_NOTIFY    = 19, */
-  GDK_PROXIMITY_IN_MASK, /* GDK_PROXIMITY_IN   = 20, */
-  GDK_PROXIMITY_OUT_MASK, /* GDK_PROXIMITY_OUT = 21, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DRAG_ENTER        = 22, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DRAG_LEAVE        = 23, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DRAG_MOTION       = 24, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DRAG_STATUS       = 25, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DROP_START        = 26, */
-  GDK_ALL_EVENTS_MASK, /* GDK_DROP_FINISHED     = 27, */
-  GDK_ALL_EVENTS_MASK, /* GDK_CLIENT_EVENT     = 28, */
-  GDK_VISIBILITY_NOTIFY_MASK, /* GDK_VISIBILITY_NOTIFY = 29, */
-  GDK_EXPOSURE_MASK, /* GDK_NO_EXPOSE          = 30, */
-  GDK_SCROLL_MASK /* GDK_SCROLL            = 31 */
-};
-
-GdkWindow *
-gdk_fb_other_event_window (GdkWindow *window,
-                          GdkEventType type)
-{
-  guint32 evmask;
-  GdkWindow *w;
-
-  w = window;
-  while (w != _gdk_parent_root)
-    {
-      /* Huge hack, so that we don't propagate events to GtkWindow->frame */
-      if ((w != window) &&
-         (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
-         (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
-         break;
-         
-      evmask = GDK_WINDOW_OBJECT(window)->event_mask;
-
-      if (evmask & type_masks[type])
-       return w;
-      
-      w = gdk_window_get_parent (w);
-    }
-  
-  return NULL;
-}
-
-GdkWindow *
-gdk_fb_pointer_event_window (GdkWindow *window,
-                            GdkEventType type)
-{
-  guint evmask;
-  GdkModifierType mask;
-  GdkWindow *w;
-         
-  gdk_fb_mouse_get_info (NULL, NULL, &mask);
-  
-  if (_gdk_fb_pointer_grab_window &&
-      !_gdk_fb_pointer_grab_owner_events)
-    {
-      evmask = _gdk_fb_pointer_grab_events;
-
-      if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
-       {
-         if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
-           evmask |= GDK_POINTER_MOTION_MASK;
-       }
-
-      if (evmask & type_masks[type])
-       return _gdk_fb_pointer_grab_window;
-      else
-       return NULL;
-    }
-
-  w = window;
-  while (w != _gdk_parent_root)
-    {
-      /* Huge hack, so that we don't propagate events to GtkWindow->frame */
-      if ((w != window) &&
-         (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
-         (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
-         break;
-      
-      evmask = GDK_WINDOW_OBJECT(window)->event_mask;
-
-      if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
-       {
-         if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
-           evmask |= GDK_POINTER_MOTION_MASK;
-       }
-
-      if (evmask & type_masks[type])
-       return w;
-      
-      w = gdk_window_get_parent (w);
-    }
-
-  if (_gdk_fb_pointer_grab_window &&
-      _gdk_fb_pointer_grab_owner_events)
-    {
-      evmask = _gdk_fb_pointer_grab_events;
-      
-      if (evmask & (GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK | GDK_BUTTON3_MOTION_MASK))
-       {
-         if (((mask & GDK_BUTTON1_MASK) && (evmask & GDK_BUTTON1_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON2_MASK) && (evmask & GDK_BUTTON2_MOTION_MASK)) ||
-             ((mask & GDK_BUTTON3_MASK) && (evmask & GDK_BUTTON3_MOTION_MASK)))
-           evmask |= GDK_POINTER_MOTION_MASK;
-       }
-      
-      if (evmask & type_masks[type])
-       return _gdk_fb_pointer_grab_window;
-    }
-  
-  return NULL;
-}
-
-GdkWindow *
-gdk_fb_keyboard_event_window (GdkWindow *window,
-                             GdkEventType type)
-{
-  guint32 evmask;
-  GdkWindow *w;
-  
-  if (_gdk_fb_keyboard_grab_window &&
-      !_gdk_fb_keyboard_grab_owner_events)
-    {
-      return _gdk_fb_keyboard_grab_window;
-    }
-  
-  w = window;
-  while (w != _gdk_parent_root)
-    {
-      /* Huge hack, so that we don't propagate events to GtkWindow->frame */
-      if ((w != window) &&
-         (GDK_WINDOW_P (w)->window_type != GDK_WINDOW_CHILD) &&
-         (g_object_get_data (G_OBJECT (w), "gdk-window-child-handler")))
-         break;
-         
-      evmask = GDK_WINDOW_OBJECT(window)->event_mask;
-
-      if (evmask & type_masks[type])
-       return w;
-      
-      w = gdk_window_get_parent (w);
-    }
-  
-  if (_gdk_fb_keyboard_grab_window &&
-      _gdk_fb_keyboard_grab_owner_events)
-    {
-      return _gdk_fb_keyboard_grab_window;
-    }
-
-  return NULL;
-}
-
-GdkEvent *
-gdk_event_make (GdkWindow *window,
-               GdkEventType type,
-               gboolean append_to_queue)
-{
-  GdkEvent *event = gdk_event_new (type);
-  guint32 the_time;
-  
-  the_time = gdk_fb_get_time ();
-  
-  event->any.window = gdk_window_ref (window);
-  event->any.send_event = FALSE;
-  switch (type)
-    {
-    case GDK_MOTION_NOTIFY:
-      event->motion.time = the_time;
-      event->motion.axes = NULL;
-      break;
-    case GDK_BUTTON_PRESS:
-    case GDK_2BUTTON_PRESS:
-    case GDK_3BUTTON_PRESS:
-    case GDK_BUTTON_RELEASE:
-      event->button.time = the_time;
-      event->button.axes = NULL;
-      break;
-    case GDK_KEY_PRESS:
-    case GDK_KEY_RELEASE:
-      event->key.time = the_time;
-      break;
-    case GDK_ENTER_NOTIFY:
-    case GDK_LEAVE_NOTIFY:
-      event->crossing.time = the_time;
-      break;
-      
-    case GDK_PROPERTY_NOTIFY:
-      event->property.time = the_time;
-      break;
-      
-    case GDK_SELECTION_CLEAR:
-    case GDK_SELECTION_REQUEST:
-    case GDK_SELECTION_NOTIFY:
-      event->selection.time = the_time;
-      break;
-    case GDK_PROXIMITY_IN:
-    case GDK_PROXIMITY_OUT:
-      event->proximity.time = the_time;
-      break;
-    case GDK_DRAG_ENTER:
-    case GDK_DRAG_LEAVE:
-    case GDK_DRAG_MOTION:
-    case GDK_DRAG_STATUS:
-    case GDK_DROP_START:
-    case GDK_DROP_FINISHED:
-      event->dnd.time = the_time;
-      break;
-      
-    case GDK_FOCUS_CHANGE:
-    case GDK_CONFIGURE:
-    case GDK_MAP:
-    case GDK_UNMAP:
-    case GDK_CLIENT_EVENT:
-    case GDK_VISIBILITY_NOTIFY:
-    case GDK_NO_EXPOSE:
-    case GDK_SCROLL:
-    case GDK_DELETE:
-    case GDK_DESTROY:
-    case GDK_EXPOSE:
-    default:
-      break;
-    }
-  
-  if (append_to_queue)
-    _gdk_event_queue_append (gdk_display_get_default (), event);
-  
-  return event;
-}
-
-void
-gdk_fb_set_rotation (GdkFBAngle angle)
-{
-  if (angle == _gdk_fb_screen_angle)
-    return;
-  
-#ifdef ENABLE_SHADOW_FB
-  if (gdk_display)
-    {
-      gdk_shadow_fb_stop_updates ();
-
-      gdk_fb_cursor_hide ();
-      
-      _gdk_fb_screen_angle = angle;
-
-      if (angle % 2 == 0)
-       {
-         gdk_display->fb_width = gdk_display->modeinfo.xres;
-         gdk_display->fb_height = gdk_display->modeinfo.yres;
-       } 
-      else
-       {
-         gdk_display->fb_width = gdk_display->modeinfo.yres;
-         gdk_display->fb_height = gdk_display->modeinfo.xres;
-       }
-      gdk_display->fb_stride =
-       gdk_display->fb_width * (gdk_display->modeinfo.bits_per_pixel / 8);
-      
-      gdk_fb_recompute_all();
-      gdk_fb_redraw_all ();
-      
-      gdk_fb_cursor_unhide ();
-    }
-  else
-    _gdk_fb_screen_angle = angle;
-#else
-  g_warning ("Screen rotation without shadow fb not supported.");
-#endif
-}
-
-void
-gdk_error_trap_push (void)
-{
-}
-
-gint
-gdk_error_trap_pop (void)
-{
-  return 0;
-}
-
-void
-gdk_notify_startup_complete (void)
-{
-}
diff --git a/gdk/linux-fb/gdkmouse-fb.c b/gdk/linux-fb/gdkmouse-fb.c
deleted file mode 100644 (file)
index 78c0e4b..0000000
+++ /dev/null
@@ -1,864 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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/gdk.h>
-#include <gdk/gdkinternals.h>
-#include "gdkprivate-fb.h"
-#include "gdkinputprivate.h"
-#include <stdlib.h>
-#include <sys/types.h>
-#include <fcntl.h>
-#include <termios.h>
-#include <sys/ioctl.h>
-#include <string.h>
-#include <math.h>
-#include <unistd.h>
-#include <errno.h>
-
-typedef struct _GdkFBMouse GdkFBMouse;
-typedef struct _GdkFBMouseDevice GdkFBMouseDevice;
-
-struct _GdkFBMouse {
-  gint fd; /* Set by open */
-  gchar *file;
-
-  /* These are written to by parse_packet */
-  gdouble x, y;
-  gboolean button_pressed[3];
-
-  guchar mouse_packet[5]; /* read by parse_packet */
-  gint packet_nbytes;
-  
-  gboolean click_grab;
-  GIOChannel *io;
-  gint io_tag;
-
-  GdkFBMouseDevice *dev;
-};
-
-static GdkFBMouse *gdk_fb_mouse = NULL;
-
-void
-gdk_fb_mouse_get_info (gint *x,
-                      gint *y,
-                      GdkModifierType *mask)
-{
-  if (x)
-    *x = gdk_fb_mouse->x;
-  if (y)
-    *y = gdk_fb_mouse->y;
-  if (mask)
-    *mask =
-      (gdk_fb_mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
-      (gdk_fb_mouse->button_pressed[1]?GDK_BUTTON2_MASK:0) |
-      (gdk_fb_mouse->button_pressed[2]?GDK_BUTTON3_MASK:0) |
-      gdk_fb_keyboard_modifiers ();
-}
-
-static void
-handle_mouse_movement(GdkFBMouse *mouse)
-{
-  GdkWindow *mousewin;
-  GdkEvent *event;
-  gint x, y;
-  GdkWindow *old_win, *win, *event_win, *cursor_win;
-  guint state;
-  GdkDrawableFBData *mousewin_private;
-
-  old_win = gdk_window_at_pointer (NULL, NULL);
-  
-  if (_gdk_fb_pointer_grab_confine)
-    mousewin = _gdk_fb_pointer_grab_confine;
-  else
-    mousewin = _gdk_parent_root;
-
-  mousewin_private = GDK_DRAWABLE_IMPL_FBDATA (mousewin);
-  
-  if (mouse->x < mousewin_private->llim_x)
-    mouse->x = mousewin_private->llim_x;
-  else if (mouse->x > mousewin_private->lim_x - 1)
-    mouse->x = mousewin_private->lim_x - 1;
-  
-  if (mouse->y < mousewin_private->llim_y)
-    mouse->y = mousewin_private->llim_y;
-  else if (mouse->y > mousewin_private->lim_y - 1)
-    mouse->y = mousewin_private->lim_y - 1;
-
-  win = gdk_window_at_pointer (NULL, NULL);
-
-  cursor_win = win;
-  if (_gdk_fb_pointer_grab_window)
-    {
-      GdkWindow *w;
-      
-      cursor_win = _gdk_fb_pointer_grab_window;
-      w = win;
-      while (w != _gdk_parent_root)
-       {
-         if (w == _gdk_fb_pointer_grab_window)
-           {
-             cursor_win = win;
-             break;
-           }
-         w = gdk_window_get_parent (w);
-       }
-    }
-  
-  gdk_fb_cursor_move (mouse->x, mouse->y, cursor_win);
-
-  event_win = gdk_fb_pointer_event_window (win, GDK_MOTION_NOTIFY);
-
-  if (event_win && (win == old_win))
-    {
-      /* Only send motion events in the same window */
-      gdk_window_get_origin (event_win, &x, &y);
-      x = mouse->x - x;
-      y = mouse->y - y;
-
-      state = (mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
-       (mouse->button_pressed[1]?GDK_BUTTON2_MASK:0) |
-       (mouse->button_pressed[2]?GDK_BUTTON3_MASK:0) |
-       gdk_fb_keyboard_modifiers ();
-
-      event = gdk_event_make (event_win, GDK_MOTION_NOTIFY, TRUE);
-      event->motion.x = x;
-      event->motion.y = y;
-      event->motion.state = state;
-      event->motion.is_hint = FALSE;
-      event->motion.device = _gdk_core_pointer;
-      event->motion.x_root = mouse->x;
-      event->motion.y_root = mouse->y;
-    }
-  
-  gdk_fb_window_send_crossing_events (NULL, win, GDK_CROSSING_NORMAL);
-}
-
-static void
-send_button_event (GdkFBMouse *mouse,
-                  guint button,
-                  gboolean press_event)
-{
-  GdkEvent *event;
-  gint x, y, i;
-  GdkWindow *mouse_win;
-  GdkWindow *event_win;
-  int nbuttons;
-
-  
-  mouse_win = gdk_window_at_pointer(NULL, NULL);
-  event_win = gdk_fb_pointer_event_window (mouse_win,
-                                          press_event ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE);
-  
-  if (event_win)
-    {
-      event = gdk_event_make (event_win, press_event ? GDK_BUTTON_PRESS : GDK_BUTTON_RELEASE, FALSE);
-      
-      gdk_window_get_origin (event_win, &x, &y);
-      x = mouse->x - x;
-      y = mouse->y - y;
-      
-      event->button.x = x;
-      event->button.y = y;
-      event->button.button = button;
-      event->button.state = (mouse->button_pressed[0]?GDK_BUTTON1_MASK:0) |
-       (mouse->button_pressed[1] ? GDK_BUTTON2_MASK : 0) |
-       (mouse->button_pressed[2] ? GDK_BUTTON3_MASK : 0) |
-       (1 << (button + 8)) /* badhack */ |
-       gdk_fb_keyboard_modifiers ();
-      event->button.device = _gdk_core_pointer;
-      event->button.x_root = mouse->x;
-      event->button.y_root = mouse->y;
-      
-      _gdk_event_queue_append (gdk_display_get_default (), event);
-      
-      /* For double-clicks */
-      if (press_event)
-       _gdk_event_button_generate (gdk_display_get_default (), event);
-    }
-
-  nbuttons = 0;
-  for (i=0;i<3;i++)
-    if (mouse->button_pressed[i])
-      nbuttons++;
-  
-  /* Handle implicit button grabs: */
-  if (press_event && nbuttons == 1)
-    {
-      gdk_fb_pointer_grab (mouse_win, FALSE,
-                          gdk_window_get_events (mouse_win),
-                          NULL, NULL,
-                          GDK_CURRENT_TIME, TRUE);
-      mouse->click_grab = TRUE;
-    }
-  else if (!press_event && nbuttons == 0 && mouse->click_grab)
-    {
-      gdk_fb_pointer_ungrab (GDK_CURRENT_TIME, TRUE);
-      mouse->click_grab = FALSE;
-    }
-}
-
-static void
-handle_mouse_scroll (GdkFBMouse *mouse,
-                    gboolean    up)
-{
-  GdkEvent *event;
-  gint x, y;
-  GdkWindow *mouse_win;
-
-  mouse_win = gdk_window_at_pointer(NULL, NULL);
-
-  event = gdk_event_make (mouse_win, GDK_SCROLL, FALSE);
-
-  gdk_window_get_origin (mouse_win, &x, &y);
-  x = mouse->x - x;
-  y = mouse->y - y;
-
-  event->button.window = mouse_win;
-  event->scroll.direction = up ? GDK_SCROLL_UP : GDK_SCROLL_DOWN;
-  event->scroll.window = mouse_win;
-  event->scroll.time = GDK_CURRENT_TIME;
-  event->scroll.x = x;
-  event->scroll.y = y;
-  event->scroll.x_root = mouse->x;
-  event->scroll.y_root = mouse->y;
-  event->scroll.state = gdk_fb_keyboard_modifiers ();
-  event->scroll.device = _gdk_core_pointer;
-
-  _gdk_event_queue_append (gdk_display_get_default (), event);
-}
-
-/******************************************************
- ************ Device specific mouse code **************
- ******************************************************/
-
-/* proto is used to detect the start of the packet:
- *   (buf[0]&proto[0]) == proto[1]
- * indicates start of packet.
- */
-
-struct _GdkFBMouseDevice {
-  gchar *name;
-  gchar *file;
-  gint packet_size;
-  gboolean (*open)(GdkFBMouse *mouse);
-  void (*close)(GdkFBMouse *mouse);
-  gboolean (*parse_packet)(GdkFBMouse *mouse, gboolean *got_motion);
-  guchar proto[2];
-};
-
-static gboolean handle_mouse_io             (GIOChannel   *gioc,
-                                            GIOCondition  cond,
-                                            gpointer      data);
-static gboolean gdk_fb_mouse_ps2_open       (GdkFBMouse   *mouse);
-static gboolean gdk_fb_mouse_imps2_open     (GdkFBMouse   *mouse);
-static void     gdk_fb_mouse_ps2_close      (GdkFBMouse   *mouse);
-static gboolean gdk_fb_mouse_ps2_packet     (GdkFBMouse   *mouse,
-                                            gboolean     *got_motion);
-static gboolean gdk_fb_mouse_ms_open        (GdkFBMouse   *mouse);
-static void     gdk_fb_mouse_ms_close       (GdkFBMouse   *mouse);
-static gboolean gdk_fb_mouse_ms_packet      (GdkFBMouse   *mouse,
-                                            gboolean     *got_motion);
-static gboolean gdk_fb_mouse_fidmour_open   (GdkFBMouse   *mouse);
-static void     gdk_fb_mouse_fidmour_close  (GdkFBMouse   *mouse);
-static gboolean gdk_fb_mouse_fidmour_packet (GdkFBMouse   *mouse,
-                                            gboolean     *got_motion);
-
-static GdkFBMouseDevice mouse_devs[] =
-{
-  { "ps2",
-    "/dev/psaux",
-    3,
-    gdk_fb_mouse_ps2_open,
-    gdk_fb_mouse_ps2_close,
-    gdk_fb_mouse_ps2_packet,
-    { 0xc0, 0x00 }
-  },
-  { "imps2",
-    "/dev/psaux",
-    4,
-    gdk_fb_mouse_imps2_open,
-    gdk_fb_mouse_ps2_close,
-    gdk_fb_mouse_ps2_packet,
-    { 0xc0, 0x00 }
-  },
-  { "ms",
-    "/dev/mouse",
-    3,
-    gdk_fb_mouse_ms_open,
-    gdk_fb_mouse_ms_close,
-    gdk_fb_mouse_ms_packet,
-    { 0x40, 0x40 }
-  },
-  { "fidmour",
-    "/dev/fidmour",
-    5,
-    gdk_fb_mouse_fidmour_open,
-    gdk_fb_mouse_fidmour_close,
-    gdk_fb_mouse_fidmour_packet,
-    { 0x00, 0x00 } /* don't know what packet start looks like */
-  }
-};
-
-gboolean
-gdk_fb_mouse_init (gboolean open_dev)
-{
-  gchar *mouse_type, *mouse_file;
-  gint i;
-
-  gdk_fb_mouse = g_new0 (GdkFBMouse, 1);
-  gdk_fb_mouse->fd = -1;
-
-  mouse_type = getenv ("GDK_MOUSE_TYPE");
-  if (!mouse_type)
-    mouse_type = "ps2";
-      
-  for (i=0;i<G_N_ELEMENTS(mouse_devs);i++)
-    {
-      if (g_ascii_strcasecmp(mouse_type, mouse_devs[i].name)==0)
-       break;
-    }
-  
-  if (i == G_N_ELEMENTS(mouse_devs))
-    {
-      g_warning ("No mouse driver of type %s found", mouse_type);
-      return FALSE;
-    }
-
-  gdk_fb_mouse->dev = &mouse_devs[i];
-
-  mouse_file = getenv ("GDK_MOUSE_FILE");
-  if (!mouse_file)
-    mouse_file = gdk_fb_mouse->dev->file;
-  gdk_fb_mouse->file = mouse_file;
-
-  gdk_fb_mouse->x = gdk_display->fb_width / 2;
-  gdk_fb_mouse->y = gdk_display->fb_height / 2;
-
-  if (open_dev)
-    return gdk_fb_mouse_open ();
-  else
-    return TRUE;
-}
-
-gboolean
-gdk_fb_mouse_open (void)
-{
-  GdkFBMouseDevice *device;
-
-  device = gdk_fb_mouse->dev;
-
-  if (!device->open(gdk_fb_mouse))
-    {
-      g_warning ("Mouse driver open failed");
-      return FALSE;
-    }
-
-  gdk_fb_mouse->io = 
-    g_io_channel_unix_new (gdk_fb_mouse->fd);
-  gdk_fb_mouse->io_tag = 
-    g_io_add_watch (gdk_fb_mouse->io,
-                   G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL, 
-                   handle_mouse_io, gdk_fb_mouse);
-
-  return TRUE;
-}
-
-void 
-gdk_fb_mouse_close (void)
-{
-  if (gdk_fb_mouse->io_tag)
-    {
-      g_source_remove (gdk_fb_mouse->io_tag);
-      gdk_fb_mouse->io_tag = 0;
-    }
-     
- gdk_fb_mouse->dev->close(gdk_fb_mouse);
-
- if (gdk_fb_mouse->io)
-   {
-     g_io_channel_unref (gdk_fb_mouse->io);
-     gdk_fb_mouse->io = NULL;
-   }
-}
-
-static gboolean
-handle_mouse_io (GIOChannel *gioc,
-                GIOCondition cond,
-                gpointer data)
-{
-  GdkFBMouse *mouse = (GdkFBMouse *)data;
-  GdkFBMouseDevice *dev = mouse->dev;
-  guchar *proto = dev->proto;
-  gboolean got_motion;
-  gint n, i;
-
-  got_motion = FALSE;
-  
-  while (1)
-    {
-      n = read (mouse->fd, mouse->mouse_packet + mouse->packet_nbytes, dev->packet_size - mouse->packet_nbytes);
-      if (n<=0) /* error or nothing to read */
-       break;
-
-      /* we just read in what should be the first byte of a packet */
-      if (mouse->packet_nbytes == 0)
-       {
-         /* check to see if we have the first byte of a packet.
-          * if not, throw it away */
-         while ((mouse->mouse_packet[0] & proto[0]) != proto[1] && n > 0)
-           {
-             for (i = 1; i < n; i++)
-               mouse->mouse_packet[i-1] = mouse->mouse_packet[i];
-             n--;
-           }
-         /* if none of the bytes read were packet starts, break */
-         if (n <= 0)
-           break;
-       }
-  
-      mouse->packet_nbytes += n;
-      
-      if (mouse->packet_nbytes == dev->packet_size)
-       {
-         if (dev->parse_packet (mouse, &got_motion))
-           mouse->packet_nbytes = 0;
-       }
-    }
-  
-  if (got_motion)
-    handle_mouse_movement (mouse);
-  
-  return TRUE;
-}
-
-static gint
-gdk_fb_mouse_dev_open (char *devname, gint mode)
-{
-  gint fd;
-  
-  /* Use nonblocking mode to open, to not hang on device */
-  fd = open (devname, mode | O_NONBLOCK);
-  return fd;
-}
-
-static gboolean
-write_all (gint   fd,
-          gchar *buf,
-          gsize  to_write)
-{
-  while (to_write > 0)
-    {
-      gssize count = write (fd, buf, to_write);
-      if (count < 0)
-       {
-         if (errno != EINTR)
-           return FALSE;
-       }
-      else
-       {
-         to_write -= count;
-         buf += count;
-       }
-    }
-
-  return TRUE;
-}
-
-static gboolean
-gdk_fb_mouse_ps2_open (GdkFBMouse *mouse)
-{
-  gint fd;
-  guchar buf[7];
-  int i = 0;
-
-  fd = gdk_fb_mouse_dev_open (mouse->file, O_RDWR);
-  if (fd < 0)
-    {
-      g_print ("Error opening %s: %s\n", mouse->file, strerror (errno));
-      return FALSE;
-    }
-
-  /* From xf86_Mouse.c */
-  buf[i++] = 230; /* 1:1 scaling */
-  buf[i++] = 244; /* enable mouse */
-  buf[i++] = 243; /* Sample rate */
-  buf[i++] = 200;
-  buf[i++] = 232; /* device resolution */
-  buf[i++] = 1;
-
-  if (!write_all (fd, buf, i))
-    {
-      close (fd);
-      return FALSE;
-    }
-  
-  usleep (10000); /* sleep 10 ms, then read whatever junk we can get from the mouse, in a vain attempt
-                    to get synchronized with the event stream */
-  
-  while ((i = read (fd, buf, sizeof(buf))) > 0)
-    g_print ("Got %d bytes of junk from psaux\n", i);
-  
-  mouse->fd = fd;
-  return TRUE;
-}
-
-static gboolean
-gdk_fb_mouse_imps2_open (GdkFBMouse *mouse)
-{
-  gint fd;
-  guchar buf[7];
-  int i = 0;
-
-  fd = gdk_fb_mouse_dev_open (mouse->file, O_RDWR);
-  if (fd < 0)
-    {
-      g_print ("Error opening %s: %s\n", mouse->file, strerror (errno));
-      return FALSE;
-    }
-
-  i = 0;
-  buf[i++] = 243; /* Sample rate */
-  buf[i++] = 200;
-  buf[i++] = 243; /* Sample rate */
-  buf[i++] = 100;
-  buf[i++] = 243; /* Sample rate */
-  buf[i++] = 80;
-  buf[i++] = 242;
-
-  if (!write_all (fd, buf, i))
-    {
-      close (fd);
-      return FALSE;
-    }
-
-  if (read (fd, buf, 1) != 1)
-    {
-      close (fd);
-      return FALSE;
-    }
-  
-  i = 0;
-  buf[i++] = 230; /* 1:1 scaling */
-  buf[i++] = 244; /* enable mouse */
-  buf[i++] = 243; /* Sample rate */
-  buf[i++] = 100;
-  buf[i++] = 232; /* device resolution */
-  buf[i++] = 3;
-
-  if (!write_all (fd, buf, i))
-    {
-      close (fd);
-      return FALSE;
-    }
-  
-  mouse->fd = fd;
-  return TRUE;
-}
-
-static void
-gdk_fb_mouse_ps2_close (GdkFBMouse *mouse)
-{
-  close (mouse->fd);
-  mouse->fd = -1;
-}
-
-static gboolean
-gdk_fb_mouse_ps2_packet (GdkFBMouse *mouse, gboolean *got_motion)
-{
-  int dx=0, dy=0;
-  gboolean new_button1, new_button2, new_button3;
-  guchar *buf;
-
-  buf = mouse->mouse_packet;
-      
-  new_button1 = (buf[0] & 1) && 1;
-  new_button3 = (buf[0] & 2) && 1;
-  new_button2 = (buf[0] & 4) && 1;
-  if (mouse->dev->packet_size == 4 && buf[3] != 0)
-    handle_mouse_scroll (mouse, buf[3] & 0x80);
-
-  if (*got_motion &&
-      (new_button1 != mouse->button_pressed[0] ||
-       new_button2 != mouse->button_pressed[1] ||
-       new_button3 != mouse->button_pressed[2]))
-    {
-      /* If a mouse button state changes we need to get correct ordering with enter/leave events,
-        so push those out via handle_mouse_input */
-      *got_motion = FALSE;
-      handle_mouse_movement (mouse);
-    }
-
-  if (new_button1 != mouse->button_pressed[0])
-    {
-      mouse->button_pressed[0] = new_button1; 
-      send_button_event (mouse, 1, new_button1);
-    }
-  
-  if (new_button2 != mouse->button_pressed[1])
-    {
-      mouse->button_pressed[1] = new_button2;
-      send_button_event (mouse, 2, new_button2);
-    }
-  
-  if (new_button3 != mouse->button_pressed[2])
-    {
-      mouse->button_pressed[2] = new_button3; 
-      send_button_event (mouse, 3, new_button3);
-    }
-      
-  if (buf[1] != 0)
-    dx = ((buf[0] & 0x10) ? ((gint)buf[1])-256 : buf[1]);
-  else
-    dx = 0;
-  if (buf[2] != 0)
-    dy = -((buf[0] & 0x20) ? ((gint)buf[2])-256 : buf[2]);
-  else
-    dy = 0;
-  
-  mouse->x += dx;
-  mouse->y += dy;
-  
-  if (dx || dy)
-    *got_motion = TRUE;
-
-  return TRUE;
-}
-
-
-static gboolean
-gdk_fb_mouse_ms_open (GdkFBMouse   *mouse)
-{
-  gint fd;
-  gint i;
-  guchar buf[7];
-  struct termios tty;
-
-  fd = gdk_fb_mouse_dev_open (mouse->file, O_RDWR);
-  if (fd < 0)
-    {
-      g_print ("Error opening %s: %s\n", mouse->file, strerror (errno));
-      return FALSE;
-    }
-
-  while ((i = read (fd, buf, sizeof(buf))) > 0)
-    g_print ("Got %d bytes of junk from %s\n", i, mouse->file);
-
-  tcgetattr (fd, &tty);
-  tty.c_iflag = IGNBRK | IGNPAR;
-  tty.c_cflag = CREAD|CLOCAL|HUPCL|CS7|B1200;
-  tty.c_oflag = 0;
-  tty.c_lflag = 0;
-  tty.c_line = 0;
-  tty.c_cc[VTIME] = 0;
-  tty.c_cc[VMIN] = 1;
-  tcsetattr (fd, TCSAFLUSH, &tty);
-
-  if (!write_all (fd, "*n", 2))
-    {
-      close (fd);
-      return FALSE;
-    }
-
-  mouse->fd = fd;
-  return TRUE;
-}
-
-static void
-gdk_fb_mouse_ms_close (GdkFBMouse   *mouse)
-{
-  close (mouse->fd);
-  mouse->fd = -1;
-}
-
-static gboolean
-gdk_fb_mouse_ms_packet (GdkFBMouse   *mouse,
-                       gboolean     *got_motion)
-{
-  int dx=0, dy=0;
-  gboolean new_button1, new_button2, new_button3;
-  guchar *buf;
-  static guchar prev = 0;
-
-  buf = mouse->mouse_packet;
-
-  /* handling of third button is adapted from gpm ms driver */
-  if (buf[0] == 0x40 && !(prev|buf[1]|buf[2]))
-    {
-      new_button1 = 0;
-      new_button2 = 1;
-      new_button3 = 0;
-    }
-  else
-    {
-      new_button1 = (buf[0] & 0x20) && 1;
-      new_button2 = 0;
-      new_button3 = (buf[0] & 0x10) && 1;
-    }
-  prev = (new_button1 << 2) | (new_button2 << 1) | (new_button3 << 0);
-
-  if (*got_motion &&
-      (new_button1 != mouse->button_pressed[0] ||
-       new_button2 != mouse->button_pressed[1] ||
-       new_button3 != mouse->button_pressed[2]))
-    {
-      /* If a mouse button state changes we need to get correct ordering with enter/leave events,
-        so push those out via handle_mouse_input */
-      *got_motion = FALSE;
-      handle_mouse_movement (mouse);
-    }
-
-  if (new_button1 != mouse->button_pressed[0])
-    {
-      mouse->button_pressed[0] = new_button1; 
-      send_button_event (mouse, 1, new_button1);
-    }
-  
-  if (new_button2 != mouse->button_pressed[1])
-    {
-      mouse->button_pressed[1] = new_button2;
-      send_button_event (mouse, 2, new_button2);
-    }
-  
-  if (new_button3 != mouse->button_pressed[2])
-    {
-      mouse->button_pressed[2] = new_button3; 
-      send_button_event (mouse, 3, new_button3);
-    }
-
-  dx = (signed char)(((buf[0] & 0x03) << 6) | (buf[1] & 0x3F));
-  dy = (signed char)(((buf[0] & 0x0C) << 4) | (buf[2] & 0x3F));
-  
-  mouse->x += dx;
-  mouse->y += dy;
-  
-  if (dx || dy)
-    *got_motion = TRUE;
-
-  return TRUE;
-}
-
-static gboolean
-gdk_fb_mouse_fidmour_open (GdkFBMouse   *mouse)
-{
-  gint fd;
-
-  fd = gdk_fb_mouse_dev_open (mouse->file, O_RDONLY);
-  if (fd < 0)
-    {
-      g_print ("Error opening %s: %s\n", mouse->file, strerror (errno));
-      return FALSE;
-    }
-
-  mouse->fd = fd;
-  return TRUE;
-}
-
-static void
-gdk_fb_mouse_fidmour_close (GdkFBMouse   *mouse)
-{
-  close (mouse->fd);
-}
-
-static gboolean
-gdk_fb_mouse_fidmour_packet (GdkFBMouse   *mouse,
-                            gboolean     *got_motion)
-{
-  int n;
-  gboolean btn_down = 0;
-  gdouble x = 0.0, y = 0.0;
-
-  n = 0;
-  if (!(mouse->mouse_packet[0] & 0x80))
-    {
-      int i;
-      /* We haven't received any of the packet yet but there is no header at the beginning */
-      for (i = 1; i < mouse->packet_nbytes; i++)
-       {
-         if (mouse->mouse_packet[i] & 0x80)
-           {
-             n = i;
-             break;
-           }
-       }
-    }
-  else if (mouse->packet_nbytes > 1 &&
-          ((mouse->mouse_packet[0] & 0x90) == 0x90))
-    {
-      /* eat the 0x90 and following byte, no clue what it's for */
-      n = 2;
-    }
-  else
-    {
-      switch (mouse->mouse_packet[0] & 0xF)
-       {
-       case 2:
-         btn_down = 0;
-         break;
-       case 1:
-       case 0:
-         btn_down = 1;
-         break;
-       default:
-         g_assert_not_reached ();
-         break;
-       }
-      
-      x = mouse->mouse_packet[1] + (mouse->mouse_packet[2] << 7);
-      if (x > 8192)
-       x -= 16384;
-      y = mouse->mouse_packet[3] + (mouse->mouse_packet[4] << 7);
-      if (y > 8192)
-       y -= 16384;
-      /* Now map touchscreen coords to screen coords */
-      x *= ((double)gdk_display->fb_width)/4096.0;
-      y *= ((double)gdk_display->fb_height)/4096.0;
-    }
-  
-  if (n)
-    {
-      memmove (mouse->mouse_packet, mouse->mouse_packet+n, mouse->packet_nbytes-n);
-      mouse->packet_nbytes -= n;
-      return FALSE;
-    }
-
-  if (btn_down != mouse->button_pressed[0])
-    {
-      if (*got_motion)
-       {
-         /* If a mouse button state changes we need to get correct
-            ordering with enter/leave events, so push those out
-            via handle_mouse_input */
-         *got_motion = FALSE;
-         handle_mouse_movement (mouse);
-       }
-      
-      mouse->button_pressed[0] = btn_down;
-      send_button_event (mouse, 1, btn_down);
-    }
-  
-  if (fabs(x - mouse->x) >= 1.0 || fabs(x - mouse->y) >= 1.0)
-    {
-      *got_motion = TRUE;
-      mouse->x = x;
-      mouse->y = y;
-    }
-  
-  return TRUE;
-}
diff --git a/gdk/linux-fb/gdkpango-fb.c b/gdk/linux-fb/gdkpango-fb.c
deleted file mode 100644 (file)
index 7ba6bff..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2000 Elliot Lee
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <glib.h>
-#include "gdkprivate-fb.h"
-#include "gdkpango.h"
-
-#include <pango/pangoft2.h>
-
-PangoContext *
-gdk_pango_context_get_for_screen (GdkScreen *screen)
-{
-  return pango_ft2_get_context (75.0, 75.0);
-}
diff --git a/gdk/linux-fb/gdkpixmap-fb.c b/gdk/linux-fb/gdkpixmap-fb.c
deleted file mode 100644 (file)
index 00b58c4..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-/* Needed for SEEK_END in SunOS */
-#include <unistd.h>
-
-#include "gdkpixmap.h"
-#include "gdkfb.h"
-#include "gdkprivate-fb.h"
-
-typedef struct
-{
-  gchar *color_string;
-  GdkColor color;
-  gint transparent;
-} _GdkPixmapColor;
-
-typedef struct
-{
-  guint ncolors;
-  GdkColormap *colormap;
-  gulong pixels[1];
-} _GdkPixmapInfo;
-
-static gpointer parent_class = NULL;
-
-static void
-gdk_pixmap_impl_fb_init (GdkPixmapFBData *impl)
-{
-  GdkDrawableFBData *private = (GdkDrawableFBData *)impl;
-
-  private->window_type = GDK_DRAWABLE_PIXMAP;
-  private->colormap = gdk_colormap_ref (gdk_colormap_get_system());
-  private->mem = NULL;
-  private->width = 1;
-  private->height = 1;
-}
-
-static void
-gdk_pixmap_impl_fb_finalize (GObject *object)
-{
-  g_free (GDK_DRAWABLE_FBDATA (object)->mem);
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_pixmap_impl_fb_class_init (GdkPixmapFBClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  /*  GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass); */
-  
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_pixmap_impl_fb_finalize;
-}
-
-GType
-_gdk_pixmap_impl_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkPixmapFBClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_pixmap_impl_fb_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkPixmapFBData),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_pixmap_impl_fb_init
-      };
-      
-      object_type = g_type_register_static (gdk_drawable_impl_fb_get_type(),
-                                            "GdkPixmapFB",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-GdkPixmap*
-gdk_pixmap_new (GdkDrawable *window,
-               gint         width,
-               gint         height,
-               gint         depth)
-{
-  GdkPixmap *pixmap;
-  GdkDrawableFBData *private;
-
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
-  g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
-  g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-  
-  if (!window)
-    window = _gdk_parent_root;
-
-  if (depth == -1)
-    depth = gdk_drawable_get_visual (window)->depth;
-
-  pixmap = (GdkPixmap *)g_object_new (gdk_pixmap_get_type (), NULL);
-  private = GDK_DRAWABLE_IMPL_FBDATA (pixmap);
-  private->rowstride = (width * depth + 7) / 8; /* Round up to nearest whole byte */
-  private->mem = g_malloc (private->rowstride * height);
-  private->abs_x = 0;
-  private->abs_y = 0;
-  private->llim_x = 0;
-  private->llim_y = 0;
-  private->lim_x = width;
-  private->lim_y = height;
-  private->width = width;
-  private->height = height;
-  private->depth = ((GdkPixmapObject *)pixmap)->depth = depth;
-
-  return pixmap;
-}
-
-GdkPixmap *
-gdk_bitmap_create_from_data (GdkDrawable *window,
-                            const gchar *data,
-                            gint         width,
-                            gint         height)
-{
-  GdkPixmap *pixmap;
-
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
-
-  if (!window)
-    window = _gdk_parent_root;
-
-  pixmap = gdk_pixmap_new (window, width, height, 1);
-
-  memcpy (GDK_DRAWABLE_IMPL_FBDATA (pixmap)->mem, data, ((width + 7) / 8) * height);
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_create_from_data (GdkDrawable    *window,
-                            const gchar    *data,
-                            gint            width,
-                            gint            height,
-                            gint            depth,
-                            const GdkColor *fg,
-                            const GdkColor *bg)
-{
-  GdkPixmap *pixmap;
-
-  g_return_val_if_fail (window == NULL || GDK_IS_DRAWABLE (window), NULL);
-  g_return_val_if_fail (data != NULL, NULL);
-  g_return_val_if_fail (fg != NULL, NULL);
-  g_return_val_if_fail (bg != NULL, NULL);
-  g_return_val_if_fail ((window != NULL) || (depth != -1), NULL);
-  g_return_val_if_fail ((width != 0) && (height != 0), NULL);
-
-  if (!window)
-    window = _gdk_parent_root;
-
-  if (depth == -1)
-    depth = gdk_drawable_get_visual (window)->depth;
-
-  pixmap = gdk_pixmap_new (window, width, height, depth);
-
-  memcpy (GDK_DRAWABLE_IMPL_FBDATA (pixmap)->mem, data, height * GDK_DRAWABLE_IMPL_FBDATA (pixmap)->rowstride);
-
-  return pixmap;
-}
-
-GdkPixmap*
-gdk_pixmap_foreign_new (GdkNativeWindow anid)
-{
-  return (GdkPixmap*) gdk_drawable_ref ((GdkDrawable *)anid);
-}
-
-GdkPixmap*
-gdk_pixmap_lookup (GdkNativeWindow anid)
-{
-  return (GdkPixmap*) (anid);
-}
-
diff --git a/gdk/linux-fb/gdkprivate-fb.h b/gdk/linux-fb/gdkprivate-fb.h
deleted file mode 100644 (file)
index 4466ffc..0000000
+++ /dev/null
@@ -1,471 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-/*
- * Private uninstalled header defining things local to X windowing code
- */
-
-#ifndef __GDK_PRIVATE_FB_H__
-#define __GDK_PRIVATE_FB_H__
-
-#include <gdk/gdkprivate.h>
-#include <gdk/gdkinternals.h>
-#include <gdk/gdk.h>
-#include "gdkfb.h"
-#include "gdkregion-generic.h"
-#include <linux/fb.h>
-#include <stdio.h>
-#include <ft2build.h>
-#include FT_FREETYPE_H
-
-#define GDK_TYPE_DRAWABLE_IMPL_FBDATA (gdk_drawable_impl_fb_get_type ())
-#define GDK_DRAWABLE_IMPL_FBDATA(win) ((GdkDrawableFBData *)((GdkWindowObject *)(win))->impl)
-#define GDK_IS_DRAWABLE_IMPL_FBDATA(object)     (G_TYPE_CHECK_INSTANCE_TYPE ((object), GDK_TYPE_DRAWABLE_IMPL_FBDATA))
-#define GDK_DRAWABLE_IMPL(win)        ((GdkDrawable *)((GdkWindowObject *)(win))->impl)
-#define GDK_WINDOW_IMPL_FBDATA(win)   ((GdkWindowFBData *)((GdkWindowObject *)(win))->impl)
-#define GDK_PIXMAP_IMPL_FBDATA(win)   ((GdkPixmapFBData *)((GdkWindowObject *)(win))->impl)
-#define GDK_DRAWABLE_FBDATA(win)      ((GdkDrawableFBData *)(win))
-#define GDK_PIXMAP_FBDATA(win)        ((GdkPixmapFBData *)(win))
-#define GDK_WINDOW_FBDATA(win)        ((GdkWindowFBData *)(win))
-#define GDK_FONT_FB(f)                ((GdkFontPrivateFB *)(f))
-#define GDK_CURSOR_FB(c)              ((GdkCursorPrivateFB *)(c))
-
-#define CHECK_IMPL_AND_INTF
-
-#ifdef CHECK_IMPL_AND_INTF
-#define GDK_CHECK_IMPL(drawable) \
- g_assert(G_OBJECT_TYPE(drawable) == _gdk_window_impl_get_type() || G_OBJECT_TYPE(drawable) == _gdk_pixmap_impl_get_type())
-#define GDK_CHECK_INTF(drawable) \
- g_assert(G_OBJECT_TYPE(drawable) == gdk_window_object_get_type() || G_OBJECT_TYPE(drawable) == gdk_pixmap_get_type())
-#else
-#define GDK_CHECK_IMPL(drawable) 
-#define GDK_CHECK_INTF(drawable)
-#endif
-typedef struct _GdkDrawableFBData GdkDrawableFBData;
-typedef struct _GdkWindowFBData GdkWindowFBData;
-typedef struct _GdkPixmapFBData GdkPixmapFBData;
-typedef struct _GdkFBDrawingContext GdkFBDrawingContext;
-
-#define GDK_DRAWABLE_PIXMAP (GDK_WINDOW_FOREIGN+1)
-
-struct _GdkDrawableFBData
-{
-  GdkDrawable parent_object;
-
-  GdkDrawable *wrapper;
-
-  guchar *mem;
-
-  gint abs_x, abs_y, lim_x, lim_y, llim_x, llim_y; /* computed values */
-
-  guint rowstride;
-
-  /* Due to excursions in gdk, this stuff has to be stored here
-     instead of in GdkDrawable where it belongs */
-  gint width, height, depth;
-  GdkColormap *colormap;
-  GdkWindowType window_type;
-};
-
-typedef struct {
-  GdkDrawableClass base_class;
-} GdkDrawableFBClass;
-
-struct _GdkPixmapFBData
-{
-  GdkDrawableFBData drawable_data;
-};
-
-typedef struct {
-  GdkDrawableFBClass klass;
-} GdkPixmapFBClass;
-
-GType gdk_drawable_impl_fb_get_type (void) G_GNUC_CONST;
-
-typedef struct {
-  gulong length;
-  GdkAtom type;
-  gint format;
-  guchar data[1];
-} GdkWindowProperty;
-
-struct _GdkWindowFBData
-{
-  GdkDrawableFBData drawable_data;
-  GdkCursor *cursor;
-  GHashTable *properties;
-
-  GdkRegion *shape; /* Can also be GDK_FB_USE_CHILD_SHAPE */
-  
-  guint realized : 1;
-};
-
-typedef struct {
-  GdkDrawableFBClass base_class;
-} GdkWindowFBClass;
-#define GDK_WINDOW_P(x) ((GdkWindowObject *)(x))
-
-struct _GdkFBDisplay
-{
-  int tty_fd;
-  int console_fd;
-  int vt, start_vt;
-
-  /* Used by rendering code: */
-  guchar *fb_mem;
-  gint fb_width; /* In pixels */
-  gint fb_height; /* In pixels */
-  gint fb_stride; /* In bytes */
-
-  int fb_fd;
-  guchar *fb_mmap;
-  gpointer active_cmap;
-  gulong mem_len;
-  struct fb_fix_screeninfo sinfo;
-  struct fb_var_screeninfo modeinfo;
-  struct fb_var_screeninfo orig_modeinfo;
-  int red_byte, green_byte, blue_byte; /* For truecolor */
-
-  /* fb manager */
-  int manager_fd;
-  int manager_tag;
-  int manager_blocked;
-};
-
-struct _GdkVisualClass
-{
-  GObjectClass parent_class;
-};
-
-
-typedef struct {
-  GHashTable *hash;
-  GdkColorInfo *info;
-  guint sync_tag;
-} GdkColormapPrivateFB;
-
-typedef struct {
-  GdkCursor base;
-  GdkPixmap *cursor, *mask;
-  int hot_x, hot_y;
-} GdkCursorPrivateFB;
-
-/* Define this to emulate slow emulation of
-   GdkFonts using PangoFont */
-#define EMULATE_GDKFONT
-
-typedef struct {
-  GdkFontPrivate base;
-#ifdef EMULATE_GDKFONT
-  /* For PangoFont emulation: */
-  char *name;
-  PangoFont *pango_font;
-#else
-  /* For bogus GdkFonts: */
-  int size;
-#endif
-} GdkFontPrivateFB;
-
-typedef struct {
-  /* Empty */
-} GdkImagePrivateFB;
-
-#define GDK_GC_FBDATA(x) ((GdkGCFBData *)(x))
-#define GDK_GC_P(x) ((GdkGC *)(x))
-
-typedef enum {
-  GPR_USED_BG,
-  GPR_AA_GRAYVAL,
-  GPR_NONE,
-  GPR_ERR_BOUNDS
-} GetPixelRet;
-
-typedef enum {
-  GDK_FB_SRC_BPP_1,
-  GDK_FB_SRC_BPP_8,
-  GDK_FB_SRC_BPP_16,
-  GDK_FB_SRC_BPP_24,
-  GDK_FB_SRC_BPP_32,
-  GDK_FB_SRC_BPP_7_AA_GRAYVAL,
-  GDK_FB_SRC_BPP_8_AA_GRAYVAL,
-  GDK_NUM_FB_SRCBPP
-} GdkFbSrcBPP;
-
-typedef void gdk_fb_draw_drawable_func (GdkDrawable *drawable,
-                                       GdkGC       *gc,
-                                       GdkPixmap   *src,
-                                       GdkFBDrawingContext *dc,
-                                       gint         start_y,
-                                       gint         end_y,
-                                       gint         start_x,
-                                       gint         end_x,
-                                       gint         src_x_off,
-                                       gint         src_y_off,
-                                       gint         draw_direction);
-
-typedef struct {
-  GdkGC parent_instance;
-
-  gchar *dash_list;
-  GdkGCValuesMask values_mask;
-  GdkGCValues values;
-  gint dash_offset;
-  gushort dash_list_len;
-  guchar alu;
-
-  /* The GC can only be used with target drawables of
-   * the same depth as the initial drawable
-   * specified in gd_gc_new().
-   */
-  guchar depth;
-  
-  /* Calculated state: */
-  /* These functions can only be called for drawables
-   * that have the same depth as the gc. 
-   */
-  void (*set_pixel)        (GdkDrawable    *drawable,
-                           GdkGC          *gc,
-                           int             x,
-                           int             y,
-                           gulong          pixel);
-
-  GetPixelRet (*get_color) (GdkDrawable      *drawable,
-                           GdkGC            *gc,
-                           int               x,
-                           int               y,
-                           GdkColor         *color);
-  
-  void (*fill_span)        (GdkDrawable  *drawable,
-                           GdkGC        *gc,
-                           GdkSpan      *span,
-                           GdkColor     *color);
-
-  void (*fill_rectangle)   (GdkDrawable  *drawable,
-                           GdkGC        *gc,
-                           GdkRectangle *rect,
-                           GdkColor     *color);
-  
-  gdk_fb_draw_drawable_func *draw_drawable[GDK_NUM_FB_SRCBPP];
-} GdkGCFBData;
-
-typedef struct {
-  GdkGCClass parent_class;
-} GdkGCFBClass;
-
-
-extern GdkGC *_gdk_fb_screen_gc;
-
-GType gdk_gc_fb_get_type (void) G_GNUC_CONST;
-
-void       _gdk_selection_window_destroyed    (GdkWindow       *window);
-void       gdk_window_invalidate_region_clear (GdkWindow       *window,
-                                              GdkRegion       *region);
-void       gdk_window_invalidate_rect_clear   (GdkWindow       *window,
-                                              GdkRectangle    *rect);
-void       gdk_fb_window_send_crossing_events (GdkWindow       *src,
-                                              GdkWindow       *dest,
-                                              GdkCrossingMode  mode);
-void       gdk_fb_window_move_resize          (GdkWindow       *window,
-                                              gint             x,
-                                              gint             y,
-                                              gint             width,
-                                              gint             height,
-                                              gboolean         send_expose_events);
-GdkWindow *gdk_fb_window_find_focus           (void);
-GdkRegion *gdk_fb_window_get_abs_shape        (GdkDrawable     *window);
-GdkRegion *gdk_fb_window_peek_shape           (GdkDrawable     *window,
-                                              gint            *dx,
-                                              gint            *dy);
-GdkGC *   _gdk_fb_gc_new                      (GdkDrawable     *drawable,
-                                              GdkGCValues     *values,
-                                              GdkGCValuesMask  values_mask);
-
-#define _GDK_FB_GC_DEPTH (1<<31)
-void      _gdk_fb_gc_calc_state              (GdkGC           *gc,
-                                             GdkGCValuesMask  changed);
-
-GdkImage *_gdk_fb_copy_to_image              (GdkDrawable    *drawable,
-                                             GdkImage       *image,
-                                             gint            src_x,
-                                             gint            src_y,
-                                             gint            dest_x,
-                                             gint            dest_y,
-                                             gint            width,
-                                             gint            height);
-void      gdk_fb_drawable_clear              (GdkDrawable     *drawable);
-void      gdk_fb_draw_drawable               (GdkDrawable     *drawable,
-                                             GdkGC           *gc,
-                                             GdkPixmap       *src,
-                                             gint             xsrc,
-                                             gint             ysrc,
-                                             gint             xdest,
-                                             gint             ydest,
-                                             gint             width,
-                                             gint             height);
-
-struct _GdkFBDrawingContext {
-  GdkWindow *bg_relto;
-  GdkPixmap *bgpm;
-
-  GdkRegion *real_clip_region;
-
-  guchar *mem, *clipmem;
-  gpointer cursor_dc;
-
-  guint rowstride, clip_rowstride;
-  int clipxoff, clipyoff;
-
-  guint draw_bg : 1;
-  guint copy_region : 1;
-  guint handle_cursor : 1;
-};
-
-void       gdk_fb_drawing_context_init     (GdkFBDrawingContext *dc,
-                                           GdkDrawable         *drawable,
-                                           GdkGC               *gc,
-                                           gboolean             draw_bg,
-                                           gboolean             do_clipping);
-void       gdk_fb_drawing_context_finalize (GdkFBDrawingContext *dc);
-void       gdk_fb_draw_drawable_3          (GdkDrawable         *drawable,
-                                           GdkGC               *gc,
-                                           GdkPixmap           *src,
-                                           GdkFBDrawingContext *dc,
-                                           gint                 xsrc,
-                                           gint                 ysrc,
-                                           gint                 xdest,
-                                           gint                 ydest,
-                                           gint                 width,
-                                           gint                 height);
-void       gdk_fb_draw_drawable_2          (GdkDrawable         *drawable,
-                                           GdkGC               *gc,
-                                           GdkPixmap           *src,
-                                           gint                 xsrc,
-                                           gint                 ysrc,
-                                           gint                 xdest,
-                                           gint                 ydest,
-                                           gint                 width,
-                                           gint                 height,
-                                           gboolean             draw_bg,
-                                           gboolean             do_clipping);
-void       gdk_fb_draw_rectangle           (GdkDrawable         *drawable,
-                                           GdkGC               *gc,
-                                           gboolean             filled,
-                                           gint                 x,
-                                           gint                 y,
-                                           gint                 width,
-                                           gint                 height);
-void       gdk_fb_fill_spans               (GdkDrawable         *real_drawable,
-                                           GdkGC               *gc,
-                                           GdkSpan             *spans,
-                                           int                  nspans,
-                                           gboolean             sorted);
-GdkRegion *gdk_fb_clip_region              (GdkDrawable         *drawable,
-                                           GdkGC               *gc,
-                                           gboolean             do_clipping,
-                                           gboolean             do_children,
-                                           gboolean             full_shapes);
-
-
-GdkGrabStatus gdk_fb_pointer_grab          (GdkWindow           *window,
-                                           gint                 owner_events,
-                                           GdkEventMask         event_mask,
-                                           GdkWindow           *confine_to,
-                                           GdkCursor           *cursor,
-                                           guint32              time,
-                                           gboolean             implicit_grab);
-void       gdk_fb_pointer_ungrab           (guint32 time,
-                                           gboolean implicit_grab);
-
-guint32    gdk_fb_get_time                 (void);
-
-void       gdk_shadow_fb_update            (gint                 minx,
-                                           gint                 miny,
-                                           gint                 maxx,
-                                           gint                 maxy);
-void       gdk_shadow_fb_init              (void);
-void       gdk_shadow_fb_stop_updates      (void);
-void       gdk_fb_recompute_all            (void);
-
-extern GdkAtom _gdk_selection_property;
-
-extern GdkFBAngle _gdk_fb_screen_angle;
-
-/* Pointer grab info */
-extern GdkWindow *_gdk_fb_pointer_grab_window;
-extern gboolean _gdk_fb_pointer_grab_owner_events;
-extern GdkWindow *_gdk_fb_pointer_grab_confine;
-extern GdkEventMask _gdk_fb_pointer_grab_events;
-extern GdkCursor *_gdk_fb_pointer_grab_cursor;
-/* Keyboard grab info */
-extern GdkWindow *_gdk_fb_keyboard_grab_window;
-extern GdkEventMask _gdk_fb_keyboard_grab_events;
-extern gboolean _gdk_fb_keyboard_grab_owner_events;
-
-extern GdkFBDisplay *gdk_display;
-extern GdkDisplay *_gdk_display;
-extern GdkScreen *_gdk_screen;
-
-extern volatile gboolean _gdk_fb_is_active_vt;
-
-GdkEvent *gdk_event_make(GdkWindow *window,
-                        GdkEventType type,
-                        gboolean append_to_queue);
-GdkWindow * gdk_fb_pointer_event_window (GdkWindow *window,
-                                        GdkEventType type);
-GdkWindow *gdk_fb_keyboard_event_window (GdkWindow *window,
-                                        GdkEventType type);
-GdkWindow *gdk_fb_other_event_window (GdkWindow *window,
-                                     GdkEventType type);
-
-void gdk_fb_get_cursor_rect(GdkRectangle *rect);
-gboolean gdk_fb_cursor_need_hide(GdkRectangle *rect);
-gboolean gdk_fb_cursor_region_need_hide(GdkRegion *region);
-void gdk_fb_cursor_unhide(void);
-void gdk_fb_cursor_reset(void);
-void gdk_fb_cursor_hide(void);
-void gdk_fb_redraw_all(void);
-void gdk_fb_cursor_move (gint x, gint y, GdkWindow *in_window);
-
-guint gdk_fb_keyboard_modifiers (void);
-gboolean gdk_fb_keyboard_init  (gboolean open_dev);
-gboolean gdk_fb_keyboard_open  (void);
-void     gdk_fb_keyboard_close (void);
-gboolean gdk_fb_mouse_init     (gboolean open_dev);
-gboolean gdk_fb_mouse_open     (void);
-void     gdk_fb_mouse_close    (void);
-void     gdk_fb_mouse_get_info (gint            *x,
-                               gint            *y,
-                               GdkModifierType *mask);
-
-/* Initialization */
-void _gdk_windowing_window_init (void);
-void _gdk_visual_init (void);
-void _gdk_dnd_init    (void);
-void _gdk_windowing_image_init  (void);
-void _gdk_events_init (void);
-void _gdk_input_init (void);
-
-#endif /* __GDK_PRIVATE_FB_H__ */
diff --git a/gdk/linux-fb/gdkproperty-fb.c b/gdk/linux-fb/gdkproperty-fb.c
deleted file mode 100644 (file)
index 3c7ebc5..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <string.h>
-#include <time.h>
-
-#include "gdkfb.h"
-#include "gdkproperty.h"
-#include "gdkprivate.h"
-#include "gdkprivate-fb.h"
-
-GdkAtom
-gdk_atom_intern (const gchar *atom_name,
-                gboolean     only_if_exists)
-{
-  g_return_val_if_fail (atom_name != NULL, GDK_NONE);
-
-  if (strcmp (atom_name, "PRIMARY") == 0)
-    return GDK_SELECTION_PRIMARY;
-  else if (strcmp (atom_name, "SECONDARY") == 0)
-    return GDK_SELECTION_SECONDARY;
-  else if (strcmp (atom_name, "CLIPBOARD") == 0)
-    return GDK_SELECTION_CLIPBOARD;
-  else if (strcmp (atom_name, "ATOM") == 0)
-    return GDK_SELECTION_TYPE_ATOM;
-  else if (strcmp (atom_name, "BITMAP") == 0)
-    return GDK_SELECTION_TYPE_BITMAP;
-  else if (strcmp (atom_name, "COLORMAP") == 0)
-    return GDK_SELECTION_TYPE_COLORMAP;
-  else if (strcmp (atom_name, "DRAWABLE") == 0)
-    return GDK_SELECTION_TYPE_DRAWABLE;
-  else if (strcmp (atom_name, "INTEGER") == 0)
-    return GDK_SELECTION_TYPE_INTEGER;
-  else if (strcmp (atom_name, "PIXMAP") == 0)
-    return GDK_SELECTION_TYPE_PIXMAP;
-  else if (strcmp (atom_name, "WINDOW") == 0)
-    return GDK_SELECTION_TYPE_WINDOW;
-  else if (strcmp (atom_name, "STRING") == 0)
-    return GDK_SELECTION_TYPE_STRING;
-  else
-    return GUINT_TO_POINTER (256 + g_quark_from_string (atom_name));
-}
-
-gchar*
-gdk_atom_name (GdkAtom atom)
-{
-  if (GPOINTER_TO_UINT (atom) < 256)
-    {
-      
-      switch (GPOINTER_TO_UINT (atom))
-       {
-       case GPOINTER_TO_UINT (GDK_SELECTION_PRIMARY):
-         return g_strdup ("PRIMARY");
-       case GPOINTER_TO_UINT (GDK_SELECTION_SECONDARY):
-         return g_strdup ("SECONDARY");
-       case GPOINTER_TO_UINT (GDK_SELECTION_CLIPBOARD):
-         return g_strdup ("CLIPBOARD");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_ATOM):
-         return g_strdup ("ATOM");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_BITMAP):
-         return g_strdup ("BITMAP");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_COLORMAP):
-         return g_strdup ("COLORMAP");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_DRAWABLE):
-         return g_strdup ("DRAWABLE");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_INTEGER):
-         return g_strdup ("INTEGER");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_PIXMAP):
-         return g_strdup ("PIXMAP");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_WINDOW):
-         return g_strdup ("WINDOW");
-       case GPOINTER_TO_UINT (GDK_SELECTION_TYPE_STRING):
-         return g_strdup ("STRING");
-       default:
-         g_warning (G_STRLOC "Invalid atom");
-         return g_strdup ("<invalid>");
-       }
-    }
-  else
-    return g_strdup (g_quark_to_string (GPOINTER_TO_UINT (atom) - 256));
-}
-
-static void
-gdk_property_delete_2 (GdkWindow *window,
-                      GdkAtom property,
-                      GdkWindowProperty *prop)
-{
-  GdkWindowFBData *fbd = GDK_WINDOW_IMPL_FBDATA(window);
-  GdkEvent *event;
-  GdkWindow *event_window;
-  
-  g_hash_table_remove (fbd->properties, GUINT_TO_POINTER (property));
-  g_free (prop);
-
-  event_window = gdk_fb_other_event_window (window, GDK_PROPERTY_NOTIFY);
-  if (event_window)
-    {
-      event = gdk_event_make (event_window, GDK_PROPERTY_NOTIFY, TRUE);
-      event->property.atom = property;
-      event->property.state = GDK_PROPERTY_DELETE;
-    }
-}
-
-void
-gdk_property_delete (GdkWindow *window,
-                    GdkAtom    property)
-{
-  GdkWindowFBData *fbd = GDK_WINDOW_FBDATA (window);
-  GdkWindowProperty *prop;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!fbd->properties)
-    return;
-
-  prop = g_hash_table_lookup (fbd->properties, GUINT_TO_POINTER(property));
-  if (!prop)
-    return;
-
-  gdk_property_delete_2 (window, property, prop);
-}
-
-gint
-gdk_property_get (GdkWindow   *window,
-                 GdkAtom      property,
-                 GdkAtom      type,
-                 gulong       offset,
-                 gulong       length,
-                 gint         pdelete,
-                 GdkAtom     *actual_property_type,
-                 gint        *actual_format_type,
-                 gint        *actual_length,
-                 guchar     **data)
-{
-  GdkWindowFBData *fbd = GDK_WINDOW_FBDATA (window);
-  GdkWindowProperty *prop;
-  int nbytes;
-
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (data != NULL, FALSE);
-  g_return_val_if_fail (actual_length != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
-  if (!fbd->properties)
-    return FALSE;
-
-  prop = g_hash_table_lookup (fbd->properties, GUINT_TO_POINTER (property));
-  if (!prop)
-    return FALSE;
-
-  nbytes = (offset + length * (prop->format >> 3)) - prop->length;
-  nbytes = MAX (nbytes, 0);
-  if (nbytes > 0)
-    {
-      *data = g_malloc (nbytes+1);
-      memcpy (*data, prop->data + offset, nbytes);
-      (*data)[nbytes] = 0;
-    }
-  else
-    *data = NULL;
-  *actual_length = nbytes / (prop->format >> 3);
-  *actual_property_type = prop->type;
-  *actual_format_type = prop->format;
-
-  if (pdelete)
-    gdk_property_delete_2 (window, property, prop);
-
-  return TRUE;
-}
-
-void
-gdk_property_change (GdkWindow   *window,
-                    GdkAtom      property,
-                    GdkAtom      type,
-                    gint         format,
-                    GdkPropMode  mode,
-                    const guchar *data,
-                    gint         nelements)
-{
-  GdkWindowFBData *fbd = GDK_WINDOW_FBDATA (window);
-  GdkWindowProperty *prop, *new_prop;
-  int new_size = 0;
-  GdkEvent *event;
-  GdkWindow *event_window;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (!fbd->properties)
-    fbd->properties = g_hash_table_new (NULL, NULL);
-
-  prop = g_hash_table_lookup (fbd->properties, GUINT_TO_POINTER (property));
-
-  switch(mode)
-    {
-    case GDK_PROP_MODE_REPLACE:
-      new_size = nelements * (format >> 3);
-      break;
-    case GDK_PROP_MODE_PREPEND:
-    case GDK_PROP_MODE_APPEND:
-      new_size = nelements * (format >> 3);
-      if (prop)
-       new_size += prop->length;
-    default:
-      break;
-    }
-
-  new_prop = g_malloc (G_STRUCT_OFFSET (GdkWindowProperty, data) + new_size);
-  new_prop->length = new_size;
-  new_prop->type = type;
-  new_prop->format = format;
-
-  switch (mode)
-    {
-    case GDK_PROP_MODE_REPLACE:
-      memcpy (new_prop->data, data, new_size);
-      break;
-    case GDK_PROP_MODE_APPEND:
-      if (prop)
-       memcpy (new_prop->data, prop->data, prop->length);
-      memcpy (new_prop->data + prop->length, data, (nelements * (format >> 3)));
-      break;
-    case GDK_PROP_MODE_PREPEND:
-      memcpy (new_prop->data, data, (nelements * (format >> 3)));
-      if (prop)
-       memcpy (new_prop->data + (nelements * (format >> 3)), prop->data, prop->length);
-      break;
-    }
-
-  g_hash_table_insert (fbd->properties, GUINT_TO_POINTER (property), new_prop);
-  g_free (prop);
-
-  event_window = gdk_fb_other_event_window (window, GDK_PROPERTY_NOTIFY);
-  if (event_window)
-    {
-      event = gdk_event_make (event_window, GDK_PROPERTY_NOTIFY, TRUE);
-      event->property.atom = property;
-      event->property.state = GDK_PROPERTY_NEW_VALUE;
-    }
-}
diff --git a/gdk/linux-fb/gdkrender-fb.c b/gdk/linux-fb/gdkrender-fb.c
deleted file mode 100644 (file)
index eec6290..0000000
+++ /dev/null
@@ -1,1549 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 2000 Alexander Larsson
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdkprivate-fb.h"
-#include <string.h>
-#include <signal.h>
-#include <sys/time.h>
-
-/*
- * Reading pixel values from a generic drawable.
- */
-
-static GetPixelRet
-gdk_fb_drawable_get_color (GdkDrawable *drawable,
-                          GdkGC *gc,
-                          int x,
-                          int y,
-                          GdkColor *spot)
-{
-  GetPixelRet retval = GPR_NONE;
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-
-  switch (private->depth)
-    {
-    case 1:
-      {
-       guchar foo = mem[(x >> 3) + y * rowstride];
-       if (foo & (1 << (x % 8)))
-         *spot = GDK_GC_FBDATA (gc)->values.foreground;
-       else
-         {
-           retval = GPR_USED_BG;
-           *spot = GDK_GC_FBDATA (gc)->values.background;
-         }
-      }
-      break;
-    case 71:
-      if (mem[x + y * rowstride])
-       *spot = GDK_GC_FBDATA (gc)->values.foreground;
-      else
-       *spot = GDK_GC_FBDATA (gc)->values.background;
-      break;
-    case 77:
-      retval = GPR_AA_GRAYVAL;
-      spot->pixel = mem[x + y * rowstride] << 1;
-      spot->red = spot->green = spot->blue = spot->pixel << 8;
-      break;
-    case 78: /* AA mode */
-      retval = GPR_AA_GRAYVAL;
-      spot->pixel = mem[x + y * rowstride];
-      spot->red = spot->green = spot->blue = spot->pixel << 8;
-      break;
-    case 8:
-      spot->pixel = mem[x + y * rowstride];
-      *spot = private->colormap->colors[spot->pixel];
-      break;
-    case 16:
-      {
-       guint16 val16 = *((guint16 *)&mem[x*2 + y*rowstride]);
-
-       spot->red = (((1<<gdk_display->modeinfo.red.length) - 1) & (val16 >> gdk_display->modeinfo.red.offset)) << (16 - gdk_display->modeinfo.red.length);
-       spot->green = (((1<<gdk_display->modeinfo.green.length) - 1) & (val16 >> gdk_display->modeinfo.green.offset)) << (16 - gdk_display->modeinfo.green.length);
-       spot->blue = (((1<<gdk_display->modeinfo.blue.length) - 1) & (val16 >> gdk_display->modeinfo.blue.offset)) << (16 - gdk_display->modeinfo.blue.length);
-
-       spot->pixel = val16;
-      }
-      break;
-    case 24:
-      {
-       guchar *smem = &mem[x*3 + y*rowstride];
-       spot->red = smem[gdk_display->red_byte] << 8;
-       spot->green = smem[gdk_display->green_byte] << 8;
-       spot->blue = smem[gdk_display->blue_byte] << 8;
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
-       spot->pixel = (smem[0]<<16)|(smem[1]<<8)|smem[2];
-#else
-       spot->pixel = smem[0]|(smem[1]<<8)|(smem[2]<<16);
-#endif
-      }
-      break;
-    case 32:
-      {
-       guchar *smem = &mem[x*4 + y*rowstride];
-       spot->red = smem[gdk_display->red_byte] << 8;
-       spot->green = smem[gdk_display->green_byte] << 8;
-       spot->blue = smem[gdk_display->blue_byte] << 8;
-       spot->pixel = *(guint32 *)smem;
-      }
-      break;
-    }
-
-  return retval;
-}
-
-/*************************************
- * gc->get_color() implementations
- *************************************/
-
-static GetPixelRet
-gdk_fb_get_color_1 (GdkDrawable *drawable,
-                   GdkGC *gc,
-                   int x,
-                   int y,
-                   GdkColor *color)
-{
-  GetPixelRet retval = GPR_NONE;
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guchar foo;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  foo = mem[(x >> 3) + y * rowstride];
-  if (foo & (1 << (x % 8)))
-    *color = GDK_GC_FBDATA (gc)->values.foreground;
-  else
-    {
-      retval = GPR_USED_BG;
-
-      *color = GDK_GC_FBDATA (gc)->values.background;
-    }
-  
-  return retval;
-}
-
-static GetPixelRet
-gdk_fb_get_color_8 (GdkDrawable *drawable,
-                   GdkGC *gc,
-                   int x,
-                   int y,
-                   GdkColor *color)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  gint pixel;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  pixel = mem[x + y * rowstride];
-  *color = private->colormap->colors[pixel];
-
-  return GPR_NONE;
-}
-
-static GetPixelRet
-gdk_fb_get_color_16 (GdkDrawable *drawable,
-                    GdkGC *gc,
-                    int x,
-                    int y,
-                    GdkColor *color)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guint16 val16;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-
-  val16 = *((guint16 *)&mem[x*2 + y*rowstride]);
-
-  color->red = (((1<<gdk_display->modeinfo.red.length) - 1) & (val16 >> gdk_display->modeinfo.red.offset)) << (16 - gdk_display->modeinfo.red.length);
-  color->green = (((1<<gdk_display->modeinfo.green.length) - 1) & (val16 >> gdk_display->modeinfo.green.offset)) << (16 - gdk_display->modeinfo.green.length);
-  color->blue = (((1<<gdk_display->modeinfo.blue.length) - 1) & (val16 >> gdk_display->modeinfo.blue.offset)) << (16 - gdk_display->modeinfo.blue.length);
-
-  color->pixel = val16;
-
-  return GPR_NONE;
-}
-
-static GetPixelRet
-gdk_fb_get_color_24 (GdkDrawable *drawable,
-                    GdkGC *gc,
-                    int x,
-                    int y,
-                    GdkColor *color)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guchar *smem;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-
-  smem = &mem[x*3 + y*rowstride];
-  color->red = smem[gdk_display->red_byte] << 8;
-  color->green = smem[gdk_display->green_byte] << 8;
-  color->blue = smem[gdk_display->blue_byte] << 8;
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
-  color->pixel = (smem[0]<<16)|(smem[1]<<8)|smem[2];
-#else
-  color->pixel = smem[0]|(smem[1]<<8)|(smem[2]<<16);
-#endif
-
-  return GPR_NONE;
-}
-
-static GetPixelRet
-gdk_fb_get_color_32 (GdkDrawable *drawable,
-                    GdkGC *gc,
-                    int x,
-                    int y,
-                    GdkColor *color)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guchar *smem;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  smem = &mem[x*4 + y*rowstride];
-  color->red = smem[gdk_display->red_byte] << 8;
-  color->green = smem[gdk_display->green_byte] << 8;
-  color->blue = smem[gdk_display->blue_byte] << 8;
-  color->pixel = *(guint32 *)smem;
-
-  return GPR_NONE;
-}
-
-/*************************************
- * gc->set_pixel() implementations
- *************************************/
-
-static void
-gdk_fb_set_pixel_1(GdkDrawable *drawable,
-                  GdkGC *gc,
-                  int x,
-                  int y,
-                  gulong pixel)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guchar *ptr;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  ptr = mem + (y*rowstride) + (x >> 3);
-
-  if (pixel)
-    *ptr |= (1 << (x % 8));
-  else
-    *ptr &= ~(1 << (x % 8));
-}
-
-static void
-gdk_fb_set_pixel_8(GdkDrawable *drawable,
-                  GdkGC *gc,
-                  int x,
-                  int y,
-                  gulong pixel)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-
-  mem[x + y*rowstride] = pixel;
-}
-
-static void
-gdk_fb_set_pixel_16(GdkDrawable *drawable,
-                   GdkGC *gc,
-                   int x,
-                   int y,
-                   gulong pixel)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guint16 *ptr;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  ptr = (guint16 *)&mem[x*2 + y*rowstride];
-  *ptr = pixel;
-}
-
-static void
-gdk_fb_set_pixel_24(GdkDrawable *drawable,
-                   GdkGC *gc,
-                   int x,
-                   int y,
-                   gulong pixel)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guchar *smem;
-  
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  smem = &mem[x*3 + y*rowstride];
-  smem[0] = pixel & 0xff;
-  smem[1] = (pixel >> 8) & 0xff;
-  smem[2] = (pixel >> 16) & 0xff;
-}
-
-static void
-gdk_fb_set_pixel_32(GdkDrawable *drawable,
-                   GdkGC *gc,
-                   int x,
-                   int y,
-                   gulong pixel)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  guchar *mem = private->mem;
-  guint rowstride = private->rowstride;
-  guint32 *smem;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  g_assert (private->depth == GDK_GC_FBDATA (gc)->depth);
-  
-  smem = (guint32 *)&mem[x*4 + y*rowstride];
-  *smem = pixel;
-}
-
-
-/*************************************
- * gc->fill_span() implementations
- *************************************/
-
-static void
-gdk_fb_fill_span_generic (GdkDrawable *drawable,
-                         GdkGC       *gc,
-                         GdkSpan     *span,
-                         GdkColor    *color)
-{
-  int curx;
-  GdkColor spot = *color;
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  gint left, right, y;
-  int clipxoff, clipyoff; /* Amounts to add to curx & cury to get x & y in clip mask */
-  int tsxoff, tsyoff;
-  GdkDrawable *cmask;
-  guchar *clipmem;
-  guint mask_rowstride;
-  GdkPixmap *ts = NULL;
-  GdkDrawableFBData *ts_private;
-  gboolean solid_stipple;
-  GdkFunction func;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  y = span->y;
-  left = span->x;
-  right = span->x + span->width;
-  
-  func = gc_private->values.function;
-    
-  cmask = gc_private->values.clip_mask;
-  clipxoff = clipyoff = tsxoff = tsyoff = 0;
-  mask_rowstride = 0;
-  solid_stipple = FALSE;
-  clipmem = NULL;
-  
-  if (cmask)
-    {
-      GdkDrawableFBData *cmask_private;
-      
-      cmask_private = GDK_DRAWABLE_IMPL_FBDATA (cmask);
-      
-      clipmem = cmask_private->mem;
-      clipxoff = cmask_private->abs_x - gc_private->values.clip_x_origin - private->abs_x;
-      clipyoff = cmask_private->abs_y - gc_private->values.clip_y_origin - private->abs_y;
-      mask_rowstride = cmask_private->rowstride;
-    }
-  
-  if (gc_private->values.fill == GDK_TILED &&
-      gc_private->values.tile)
-    {
-      gint xstep;
-      gint relx, rely;
-      int drawh;
-      GdkFBDrawingContext *dc, dc_data;
-
-      dc = &dc_data;
-      
-      gdk_fb_drawing_context_init (dc, drawable, gc, FALSE, TRUE);
-      
-      ts = gc_private->values.tile;
-      ts_private = GDK_DRAWABLE_IMPL_FBDATA (ts);
-      
-      rely = y - private->abs_y;
-      drawh = (rely - gc_private->values.ts_y_origin) % ts_private->height;
-      if (drawh < 0)
-       drawh += ts_private->height;
-      
-      for (curx = left; curx < right; curx += xstep)
-       {
-         int draww;
-         
-         relx = curx - private->abs_x;
-         
-         draww = (relx - gc_private->values.ts_x_origin) % ts_private->width;
-         if (draww < 0)
-           draww += ts_private->width;
-         
-         xstep = MIN (ts_private->width - draww, right - relx);
-         
-         gdk_fb_draw_drawable_3 (drawable, gc, GDK_DRAWABLE_IMPL (ts),
-                                 dc,
-                                 draww, drawh,
-                                 relx, rely,
-                                 xstep, 1);
-       }
-      
-      gdk_fb_drawing_context_finalize (dc);
-      
-      return;
-    }
-  else if ((gc_private->values.fill == GDK_STIPPLED ||
-           gc_private->values.fill == GDK_OPAQUE_STIPPLED) &&
-          gc_private->values.stipple)
-    {
-      ts = gc_private->values.stipple;
-      tsxoff = - GDK_DRAWABLE_IMPL_FBDATA (ts)->abs_x - gc_private->values.ts_x_origin - private->abs_x;
-      tsyoff = - GDK_DRAWABLE_IMPL_FBDATA (ts)->abs_y - gc_private->values.ts_y_origin - private->abs_y;
-      solid_stipple = (gc_private->values.fill == GDK_OPAQUE_STIPPLED);
-    }
-  
-  for (curx = left; curx < right; curx++)
-    {
-      int maskx = curx+clipxoff, masky = y + clipyoff;
-      guchar foo;
-      
-      if (cmask)
-       {
-         foo = clipmem[masky*mask_rowstride + (maskx >> 3)];
-         
-         if (!(foo & (1 << (maskx % 8))))
-           continue;
-       }
-      
-      if (func == GDK_INVERT)
-       {
-         (gc_private->get_color) (drawable, gc, curx, y, &spot);
-         spot.pixel = ~spot.pixel;
-         spot.red = ~spot.red;
-         spot.green = ~spot.green;
-         spot.blue = ~spot.blue;
-       }
-      else if (func == GDK_XOR)
-       {
-         (gc_private->get_color) (drawable, gc, curx, y, &spot);
-         spot.pixel ^= gc_private->values.foreground.pixel;
-       }
-      else if (func != GDK_COPY)
-       {
-         g_warning ("Unsupported GdkFunction %d\n", func);
-       }
-      else if (ts)
-       {
-         int wid, hih;
-         
-         ts_private = GDK_DRAWABLE_IMPL_FBDATA (ts);
-         
-         wid = ts_private->width;
-         hih = ts_private->height;
-         
-         maskx = (curx+tsxoff)%wid;
-         masky = (y+tsyoff)%hih;
-         if (maskx < 0)
-           maskx += wid;
-         if (masky < 0)
-           masky += hih;
-         
-         foo = ts_private->mem[(maskx >> 3) + ts_private->rowstride*masky];
-         if (foo & (1 << (maskx % 8)))
-           {
-             spot = gc_private->values.foreground;
-           }
-         else if (solid_stipple)
-           {
-             spot = gc_private->values.background;
-           }
-         else
-           continue;
-       }
-      
-      (gc_private->set_pixel) (drawable, gc, curx, y, spot.pixel);
-    }
-}
-
-static void
-gdk_fb_fill_span_simple_1 (GdkDrawable *drawable,
-                          GdkGC       *gc,
-                          GdkSpan     *span,
-                          GdkColor    *color)
-{
-  int curx;
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *mem, *ptr;
-  guint rowstride;
-  gint left, right, y;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  g_assert (!gc_private->values.clip_mask &&
-           !gc_private->values.tile &&
-           !gc_private->values.stipple &&
-           gc_private->values.function != GDK_INVERT);
-
-  y = span->y;
-  left = span->x;
-  right = span->x + span->width;
-  
-  mem = private->mem;
-  rowstride = private->rowstride;
-
-  {
-    int fromx = MIN ((left+7)&(~7), right);
-    int begn = fromx - left, begoff = left % 8, endn;
-    guchar begmask, endmask;
-    int body_end = right & ~7;
-    int body_len = (body_end - fromx)/8;
-    
-    begmask = ((1 << (begn + begoff)) - 1)
-      & ~((1 << (begoff)) - 1);
-    endn = right - body_end;
-    endmask = (1 << endn) - 1;
-    
-    ptr = mem + y*rowstride + (left >> 3);
-       
-    if (color->pixel)
-      *ptr |= begmask;
-    else
-      *ptr &= ~begmask;
-    
-    curx = fromx;
-    
-    if (curx < right)
-      {
-       ptr = mem + y*rowstride + (curx >> 3);
-       memset (ptr, color->pixel?0xFF:0, body_len);
-       
-       if (endn)
-         {
-           ptr = mem + y*rowstride + (body_end >> 3);
-           if (color->pixel)
-             *ptr |= endmask;
-           else
-             *ptr &= ~endmask;
-         }
-      }
-  }
-}
-
-static void
-gdk_fb_fill_span_simple_8 (GdkDrawable *drawable,
-                          GdkGC       *gc,
-                          GdkSpan     *span,
-                          GdkColor    *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *mem, *ptr;
-  guint rowstride;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  g_assert (!gc_private->values.clip_mask &&
-           !gc_private->values.tile &&
-           !gc_private->values.stipple &&
-           gc_private->values.function != GDK_INVERT);
-
-  mem = private->mem;
-  rowstride = private->rowstride;
-
-  ptr = mem + span->y*rowstride + span->x;
-  memset (ptr, color->pixel, span->width);
-}
-
-static void
-gdk_fb_fill_span_simple_16 (GdkDrawable *drawable,
-                           GdkGC       *gc,
-                           GdkSpan     *span,
-                           GdkColor    *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *mem;
-  guint rowstride;
-  guint16 *p16;
-  int n;
-  int i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  g_assert (!gc_private->values.clip_mask &&
-           !gc_private->values.tile &&
-           !gc_private->values.stipple &&
-           gc_private->values.function != GDK_INVERT);
-
-  mem = private->mem;
-  rowstride = private->rowstride;
-
-  n = span->width;
-  p16 = (guint16 *)(mem + span->y * rowstride + span->x*2);
-  for (i = 0; i < n; i++)
-    *(p16++) = color->pixel;
-}
-
-static void
-gdk_fb_fill_span_simple_24 (GdkDrawable *drawable,
-                           GdkGC       *gc,
-                           GdkSpan     *span,
-                           GdkColor    *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *mem, *ptr;
-  guint rowstride;
-  int n;
-  guchar redval, greenval, blueval;
-  guchar *firstline, *ptr_end;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  g_assert (!gc_private->values.clip_mask &&
-           !gc_private->values.tile &&
-           !gc_private->values.stipple &&
-           gc_private->values.function != GDK_INVERT);
-
-  mem = private->mem;
-  rowstride = private->rowstride;
-
-  redval = color->red>>8;
-  greenval = color->green>>8;
-  blueval = color->blue>>8;
-    
-  n = span->width*3;
-    
-  firstline = ptr = mem + span->y * rowstride + span->x*3;
-  ptr_end = ptr+n;
-  while (ptr < ptr_end)
-    {
-      ptr[gdk_display->red_byte] = redval;
-      ptr[gdk_display->green_byte] = greenval;
-      ptr[gdk_display->blue_byte] = blueval;
-      ptr += 3;
-    }
-}
-
-static void
-gdk_fb_fill_span_simple_32 (GdkDrawable *drawable,
-                           GdkGC       *gc,
-                           GdkSpan     *span,
-                           GdkColor    *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *mem;
-  guint rowstride;
-  guint32 *p32;
-  int n;
-  int i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  g_assert (gc);
-
-  g_assert (!gc_private->values.clip_mask &&
-           !gc_private->values.tile &&
-           !gc_private->values.stipple &&
-           gc_private->values.function != GDK_INVERT);
-
-  mem = private->mem;
-  rowstride = private->rowstride;
-
-  n = span->width;
-  p32 = (guint32 *)(mem + span->y * rowstride + span->x*4);
-  for (i = 0; i < n; i++)
-    *(p32++) = color->pixel;
-}
-
-
-/*************************************
- * gc->draw_drawable() implementations
- *************************************/
-
-static void
-gdk_fb_draw_drawable_generic (GdkDrawable *drawable,
-                             GdkGC       *gc,
-                             GdkPixmap   *src,
-                             GdkFBDrawingContext *dc,
-                             gint         start_y,
-                             gint         end_y,
-                             gint         start_x,
-                             gint         end_x,
-                             gint         src_x_off,
-                             gint         src_y_off,
-                             gint         draw_direction)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  int cur_x, cur_y;
-
-  if (draw_direction < 0)
-    {
-      int tmp;
-      tmp = start_y;
-      start_y = end_y;
-      end_y = tmp;
-      start_y--;
-      end_y--;
-      
-      tmp = start_x;
-      start_x = end_x;
-      end_x = tmp;
-      start_x--;
-      end_x--;
-    }
-
-  for (cur_y = start_y; cur_y != end_y; cur_y+=draw_direction)
-    {
-      for (cur_x = start_x; cur_x != end_x; cur_x+=draw_direction)
-       {
-         GdkColor spot;
-         
-         if (GDK_GC_FBDATA(gc)->values.clip_mask)
-           {
-             int maskx = cur_x + dc->clipxoff, masky = cur_y + dc->clipyoff;
-             guchar foo;
-             
-             foo = dc->clipmem[masky*dc->clip_rowstride + (maskx >> 3)];
-             
-             if (!(foo & (1 << (maskx % 8))))
-               continue;
-           }
-         
-         switch (gdk_fb_drawable_get_color (src, gc, cur_x + src_x_off, cur_y + src_y_off, &spot))
-           {
-           case GPR_AA_GRAYVAL:
-             {
-               GdkColor realspot, fg;
-               guint graylevel = spot.pixel;
-               gint tmp;
-               
-               if (private->depth == 1)
-                 {
-                   if (spot.pixel > 192)
-                     spot = GDK_GC_FBDATA (gc)->values.foreground;
-                   else
-                     spot = GDK_GC_FBDATA (gc)->values.background;
-                   break;
-                 }
-               else
-                 {
-                   if (graylevel >= 254)
-                     {
-                       spot = GDK_GC_FBDATA (gc)->values.foreground;
-                     }
-                   else if (graylevel <= 2)
-                     {
-                       if (!dc->draw_bg)
-                         continue;
-                       
-                       spot = GDK_GC_FBDATA (gc)->values.background;
-                     }
-                   else
-                     {
-                       switch ((GDK_GC_FBDATA (gc)->get_color) (drawable, gc, cur_x, cur_y, &realspot))
-                         {
-                         case GPR_USED_BG:
-                           {
-                             int bgx, bgy;
-                             
-                             bgx = (cur_x - GDK_DRAWABLE_IMPL_FBDATA (dc->bg_relto)->abs_x) % GDK_DRAWABLE_IMPL_FBDATA (dc->bgpm)->width + private->abs_x;
-                             bgy = (cur_y - GDK_DRAWABLE_IMPL_FBDATA (dc->bg_relto)->abs_y) % GDK_DRAWABLE_IMPL_FBDATA (dc->bgpm)->height + private->abs_y;
-                             gdk_fb_drawable_get_color (dc->bgpm, gc, bgx, bgy, &realspot);
-                           }
-                           break;
-                         case GPR_NONE:
-                           break;
-                         default:
-                           g_assert_not_reached ();
-                           break;
-                         }
-                       
-                       fg = GDK_GC_FBDATA (gc)->values.foreground;
-
-                       /* Now figure out what 'spot' should actually look like */
-                       fg.red >>= 8;
-                       fg.green >>= 8;
-                       fg.blue >>= 8;
-                       realspot.red >>= 8;
-                       realspot.green >>= 8;
-                       realspot.blue >>= 8;
-
-                               
-                       tmp = (fg.red - realspot.red) * graylevel;
-                       spot.red = realspot.red + ((tmp + (tmp >> 8) + 0x80) >> 8);
-                       spot.red <<= 8;
-                       
-                       tmp = (fg.green - realspot.green) * graylevel;
-                       spot.green = realspot.green + ((tmp + (tmp >> 8) + 0x80) >> 8);
-                       spot.green <<= 8;
-                       
-                       tmp = (fg.blue - realspot.blue) * graylevel;
-                       spot.blue = realspot.blue + ((tmp + (tmp >> 8) + 0x80) >> 8);
-                       spot.blue <<= 8;
-                       
-                       /* Now find the pixel for this thingie */
-                       switch (private->depth)
-                         {
-                         case 8:
-                           if (!gdk_colormap_alloc_color (private->colormap, &spot, FALSE, TRUE))
-                             {
-                               g_error ("Can't allocate AA color!");
-                             }
-                           break;
-                         case 16:
-                           spot.pixel = (spot.red >> (16 - gdk_display->modeinfo.red.length)) << gdk_display->modeinfo.red.offset;
-                           spot.pixel |= (spot.green >> (16 - gdk_display->modeinfo.green.length)) << gdk_display->modeinfo.green.offset;
-                           spot.pixel |= (spot.blue >> (16 - gdk_display->modeinfo.blue.length)) << gdk_display->modeinfo.blue.offset;
-                           break;
-                         case 24:
-                         case 32:
-                           spot.pixel = ((spot.red & 0xFF00) >> 8  << (gdk_display->modeinfo.red.offset))
-                             | ((spot.green & 0xFF00) >> 8 << (gdk_display->modeinfo.green.offset))
-                             | ((spot.blue & 0xFF00) >> 8 << (gdk_display->modeinfo.blue.offset));
-                           break;
-                         }
-                     }
-                 }
-             }
-             break;
-           case GPR_USED_BG:
-             if (!dc->draw_bg)
-               continue;
-             break;
-           case GPR_NONE:
-             break;
-           default:
-             g_assert_not_reached ();
-             break;
-           }
-         
-         (GDK_GC_FBDATA (gc)->set_pixel) (drawable, gc, cur_x, cur_y, spot.pixel);
-       }
-    }
-
-}
-
-void
-gdk_fb_draw_drawable_memmove (GdkDrawable *drawable,
-                             GdkGC       *gc,
-                             GdkPixmap   *src,
-                             GdkFBDrawingContext *dc,
-                             gint         start_y,
-                             gint         end_y,
-                             gint         start_x,
-                             gint         end_x,
-                             gint         src_x_off,
-                             gint         src_y_off,
-                             gint         draw_direction)
-{
-  GdkDrawableFBData *src_private = GDK_DRAWABLE_FBDATA (src);
-  guint depth = src_private->depth;
-  guint src_rowstride = src_private->rowstride;
-  guchar *srcmem = src_private->mem;
-  int linelen = (end_x - start_x)*(depth>>3);
-  gint cur_y;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  if (draw_direction < 0)
-    {
-      int tmp;
-      tmp = start_y;
-      start_y = end_y;
-      end_y = tmp;
-      start_y--;
-      end_y--;
-    }
-
-  for(cur_y = start_y; cur_y != end_y; cur_y += draw_direction)
-    {
-      memmove (dc->mem + (cur_y * dc->rowstride) + start_x*(depth>>3),
-              srcmem + ((cur_y + src_y_off)*src_rowstride) + (start_x + src_x_off)*(depth>>3),
-              linelen);
-    }
-
-}
-
-static void
-gdk_fb_draw_drawable_aa_24 (GdkDrawable *drawable,
-                           GdkGC       *gc,
-                           GdkPixmap   *src,
-                           GdkFBDrawingContext *dc,
-                           gint         start_y,
-                           gint         end_y,
-                           gint         start_x,
-                           gint         end_x,
-                           gint         src_x_off,
-                           gint         src_y_off,
-                           gint         draw_direction)
-{
-  GdkDrawableFBData *private = GDK_DRAWABLE_FBDATA (drawable);
-  int x, y;
-  GdkGCFBData *gc_private;
-  guchar *dmem = private->mem;
-  guint dst_rowstride = private->rowstride;
-  guchar *smem = GDK_DRAWABLE_FBDATA (src)->mem;
-  guint src_rowstride = GDK_DRAWABLE_FBDATA (src)->rowstride;
-  guchar *dst;
-  guint grayval;
-  gint r, g, b, tmp;
-  GdkColor fg;
-  gint fg_r, fg_g, fg_b;
-  
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  gc_private = GDK_GC_FBDATA (gc);
-
-  fg = GDK_GC_FBDATA (gc)->values.foreground;
-  fg_r = fg.red >> 8;
-  fg_g = fg.green >> 8;
-  fg_b = fg.blue >> 8;
-
-  if (draw_direction < 0)
-    {
-      int tmp;
-      tmp = start_y;
-      start_y = end_y;
-      end_y = tmp;
-      start_y--;
-      end_y--;
-      
-      tmp = start_x;
-      start_x = end_x;
-      end_x = tmp;
-      start_x--;
-      end_x--;
-    }
-
-  for (y = start_y; y != end_y; y+=draw_direction)
-    {
-      for (x = start_x; x != end_x; x+=draw_direction)
-       {
-         grayval = smem[x + src_x_off + (y + src_y_off) * src_rowstride];
-
-         if ((grayval <= 2) && (!dc->draw_bg))
-           continue;
-
-         dst = &dmem[x*3 + y*dst_rowstride];
-         
-         if (grayval >= 254)
-           {
-             dst[gdk_display->red_byte] = fg_r;
-             dst[gdk_display->green_byte] = fg_g;
-             dst[gdk_display->blue_byte] = fg_b;
-           }
-         else if (grayval <= 2)
-           {
-             dst[gdk_display->red_byte] = GDK_GC_FBDATA (gc)->values.background.red >> 8;
-             dst[gdk_display->green_byte] = GDK_GC_FBDATA (gc)->values.background.green >> 8;
-             dst[gdk_display->blue_byte] = GDK_GC_FBDATA (gc)->values.background.blue >> 8;
-           }
-         else
-           {
-             r = dst[gdk_display->red_byte];
-             tmp = (fg_r - r) * (gint)grayval;
-             r = r + ((tmp + (tmp >> 8) + 0x80) >> 8);
-             dst[gdk_display->red_byte] = r;
-
-             g = dst[gdk_display->green_byte];
-             tmp = (fg_g - g) * (gint)grayval;
-             g = g + ((tmp + (tmp >> 8) + 0x80) >> 8);
-             dst[gdk_display->green_byte] = g;
-
-             b = dst[gdk_display->blue_byte];
-             tmp = (fg_b - b) * (gint)grayval;
-             b = b + ((tmp + (tmp >> 8) + 0x80) >> 8);
-             dst[gdk_display->blue_byte] = b;
-           }
-       }
-    }
-}
-
-/*************************************
- * gc->fill_rectangle() implementations
- *************************************/
-
-void
-gdk_fb_fill_rectangle_generic (GdkDrawable    *drawable,
-                              GdkGC          *gc,
-                              GdkRectangle   *rect,
-                              GdkColor       *color)
-{
-  GdkDrawableFBData *private;
-  GdkSpan *spans;
-  int i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-
-  spans = g_new (GdkSpan, rect->height);
-  for (i = 0; i < rect->height; i++)
-    {
-      spans[i].x = rect->x - private->abs_x;
-      spans[i].y = rect->y+i - private->abs_y;
-      spans[i].width = rect->width;
-    }
-  gdk_fb_fill_spans (drawable, gc, spans, rect->height, TRUE);
-  g_free (spans);
-}
-
-void
-gdk_fb_fill_rectangle_simple_16 (GdkDrawable    *drawable,
-                                GdkGC          *gc,
-                                GdkRectangle   *rect,
-                                GdkColor       *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *ptr;
-  guint rowstride;
-  int n;
-  gboolean extra;
-  int i;
-  guint32 pixel;
-  gint height;
-  
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  rowstride = private->rowstride - rect->width*2;
-  ptr = (guchar *)private->mem + rect->y * private->rowstride + rect->x*2;
-
-  extra = rect->width&1;
-  n = rect->width>>1;
-    
-  pixel = (color->pixel << 16) | color->pixel;
-
-  height = rect->height;
-  while (height>0)
-    {
-      i = n;
-      while (i>0)
-       {
-         *(guint32 *)ptr = pixel;
-         ptr += 4;
-         i--;
-       }
-      if (extra)
-       {
-         *(guint16 *)ptr = color->pixel;
-         ptr += 2;
-       }
-      ptr += rowstride;
-      height--; 
-    }
-}
-
-void
-gdk_fb_fill_rectangle_simple_32 (GdkDrawable    *drawable,
-                                GdkGC          *gc,
-                                GdkRectangle   *rect,
-                                GdkColor       *color)
-{
-  GdkGCFBData *gc_private;
-  GdkDrawableFBData *private;
-  guchar *ptr;
-  guint rowstride;
-  int n;
-  int i;
-  guint32 pixel;
-  gint height;
-  
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  private = GDK_DRAWABLE_FBDATA (drawable);
-  gc_private = GDK_GC_FBDATA (gc);
-
-  rowstride = private->rowstride - rect->width*4;
-  ptr = (guchar *)private->mem + rect->y * private->rowstride + rect->x*4;
-
-  n = rect->width;
-    
-  pixel = color->pixel;
-
-  height = rect->height;
-  while (height>0)
-    {
-      i = n;
-      while (i>0)
-       {
-         *(guint32 *)ptr = pixel;
-         ptr += 4;
-         i--;
-       }
-      ptr += rowstride;
-      height--; 
-    }
-}
-
-
-/*************************************
- * GC state calculation
- *************************************/
-
-void
-_gdk_fb_gc_calc_state (GdkGC           *gc,
-                      GdkGCValuesMask  changed)
-{
-  GdkGCFBData *gc_private;
-  int i;
-
-  gc_private = GDK_GC_FBDATA (gc);
-
-  gc_private->fill_span = gdk_fb_fill_span_generic;
-  gc_private->fill_rectangle = gdk_fb_fill_rectangle_generic;
-
-  for (i = 0; i < GDK_NUM_FB_SRCBPP; i++)
-    gc_private->draw_drawable[i] = gdk_fb_draw_drawable_generic;
-  
-  if (changed & _GDK_FB_GC_DEPTH)
-    switch (gc_private->depth)
-      {
-      case 1:
-       gc_private->set_pixel = gdk_fb_set_pixel_1;
-       gc_private->get_color = gdk_fb_get_color_1;
-       break;
-      case 8:
-       gc_private->set_pixel = gdk_fb_set_pixel_8;
-       gc_private->get_color = gdk_fb_get_color_8;
-       break;
-      case 16:
-       gc_private->set_pixel = gdk_fb_set_pixel_16;
-       gc_private->get_color = gdk_fb_get_color_16;
-       break;
-      case 24:
-       gc_private->set_pixel = gdk_fb_set_pixel_24;
-       gc_private->get_color = gdk_fb_get_color_24;
-       break;
-      case 32:
-       gc_private->set_pixel = gdk_fb_set_pixel_32;
-       gc_private->get_color = gdk_fb_get_color_32;
-       break;
-      default:
-       g_assert_not_reached ();
-       break;
-      }
-
-  if (!gc_private->values.clip_mask)
-    {
-    switch (gc_private->depth)
-      {
-      case 8:
-       gc_private->draw_drawable[GDK_FB_SRC_BPP_8] = gdk_fb_draw_drawable_memmove;
-       break;
-      case 16:
-       gc_private->draw_drawable[GDK_FB_SRC_BPP_16] = gdk_fb_draw_drawable_memmove;
-       break;
-      case 24:
-       gc_private->draw_drawable[GDK_FB_SRC_BPP_8_AA_GRAYVAL] = gdk_fb_draw_drawable_aa_24;
-       gc_private->draw_drawable[GDK_FB_SRC_BPP_24] = gdk_fb_draw_drawable_memmove;
-       break;
-      case 32:
-       gc_private->draw_drawable[GDK_FB_SRC_BPP_32] = gdk_fb_draw_drawable_memmove;
-       break;
-      }
-    }
-  
-  if (!gc_private->values.clip_mask &&
-      !gc_private->values.tile &&
-      !gc_private->values.stipple &&
-       gc_private->values.function == GDK_COPY)
-    {
-      switch (gc_private->depth)
-       {
-       case 1:
-         gc_private->fill_span = gdk_fb_fill_span_simple_1;
-         break;
-       case 8:
-         gc_private->fill_span = gdk_fb_fill_span_simple_8;
-         break;
-       case 16:
-         gc_private->fill_span = gdk_fb_fill_span_simple_16;
-         gc_private->fill_rectangle = gdk_fb_fill_rectangle_simple_16;
-         break;
-       case 24:
-         gc_private->fill_span = gdk_fb_fill_span_simple_24;
-         break;
-       case 32:
-         gc_private->fill_span = gdk_fb_fill_span_simple_32;
-         gc_private->fill_rectangle = gdk_fb_fill_rectangle_simple_32;
-         break;
-       default:
-         g_assert_not_reached ();
-         break;
-       }
-    }
-}
-
-#ifdef ENABLE_SHADOW_FB
-static void
-gdk_shadow_fb_copy_rect_0 (gint x, gint y, gint width, gint height)
-{
-  guchar *dst, *src;
-  gint depth;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  depth = gdk_display->modeinfo.bits_per_pixel / 8;
-
-  dst = gdk_display->fb_mmap + x * depth + gdk_display->sinfo.line_length * y;
-  src = gdk_display->fb_mem + x * depth + gdk_display->fb_stride * y;
-
-  width = width*depth;
-  while (height>0)
-    {
-      memcpy (dst, src, width);
-      dst += gdk_display->sinfo.line_length;
-      src += gdk_display->fb_stride;
-      height--;
-    }
-}
-
-static void
-gdk_shadow_fb_copy_rect_90 (gint x, gint y, gint width, gint height)
-{
-  guchar *dst, *src, *pdst;
-  gint depth;
-  gint w;
-  gint i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  depth = gdk_display->modeinfo.bits_per_pixel / 8;
-
-  src = gdk_display->fb_mem + x * depth + gdk_display->fb_stride * y;
-  dst = gdk_display->fb_mmap + y * depth + gdk_display->sinfo.line_length * (gdk_display->fb_width - x - 1);
-
-  while (height>0)
-    {
-      w = width;
-      pdst = dst;
-      while (w>0) {
-       for (i = 0; i < depth; i++)
-         *pdst++ = *src++;
-       pdst -= gdk_display->sinfo.line_length + depth;
-       w--;
-      }
-      dst += depth;
-      src += gdk_display->fb_stride - width * depth;
-      height--;
-    }
-}
-
-static void
-gdk_shadow_fb_copy_rect_180 (gint x, gint y, gint width, gint height)
-{
-  guchar *dst, *src, *pdst;
-  gint depth;
-  gint w;
-  gint i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  depth = gdk_display->modeinfo.bits_per_pixel / 8;
-
-  src = gdk_display->fb_mem + x * depth + gdk_display->fb_stride * y;
-  dst = gdk_display->fb_mmap + (gdk_display->fb_width - x - 1) * depth + gdk_display->sinfo.line_length * (gdk_display->fb_height - y - 1) ;
-
-  while (height>0)
-    {
-      w = width;
-      pdst = dst;
-      while (w>0) {
-       for (i = 0; i < depth; i++)
-         *pdst++ = *src++;
-       pdst -= 2 * depth;
-       w--;
-      }
-      dst -= gdk_display->sinfo.line_length;
-      src += gdk_display->fb_stride - width * depth;
-      height--;
-    }
-}
-
-static void
-gdk_shadow_fb_copy_rect_270 (gint x, gint y, gint width, gint height)
-{
-  guchar *dst, *src, *pdst;
-  gint depth;
-  gint w;
-  gint i;
-
-  if (!_gdk_fb_is_active_vt)
-    return;
-
-  depth = gdk_display->modeinfo.bits_per_pixel / 8;
-
-  src = gdk_display->fb_mem + x * depth + gdk_display->fb_stride * y;
-  dst = gdk_display->fb_mmap + (gdk_display->fb_height - y - 1) * depth + gdk_display->sinfo.line_length * x;
-
-  while (height>0)
-    {
-      w = width;
-      pdst = dst;
-      while (w>0) {
-       for (i = 0; i < depth; i++)
-         *pdst++ = *src++;
-       pdst += gdk_display->sinfo.line_length - depth;
-       w--;
-      }
-      dst -= depth;
-      src += gdk_display->fb_stride - width * depth;
-      height--;
-    }
-}
-
-static void (*shadow_copy_rect[4]) (gint x, gint y, gint width, gint height);
-
-volatile gint refresh_queued = 0;
-volatile gint refresh_x1, refresh_y1;
-volatile gint refresh_x2, refresh_y2;
-
-static void
-gdk_shadow_fb_refresh (int signum)
-{
-  gint minx, miny, maxx, maxy;
-
-  if (!refresh_queued)
-    {
-      struct itimerval timeout;
-      /* Stop the timer */ 
-      timeout.it_value.tv_sec = 0;
-      timeout.it_value.tv_usec = 0;
-      timeout.it_interval.tv_sec = 0;
-      timeout.it_interval.tv_usec = 0;
-      setitimer (ITIMER_REAL, &timeout, NULL);
-      return;
-    }
-  
-  minx = refresh_x1;
-  miny = refresh_y1;
-  maxx = refresh_x2;
-  maxy = refresh_y2;
-  refresh_queued = 0;
-
-  /* clip x */
-  if (minx < 0) {
-    minx = 0;
-    maxx = MAX (maxx, 0);
-  }
-  if (maxx >= gdk_display->fb_width) {
-    maxx = gdk_display->fb_width-1;
-    minx = MIN (minx, maxx);
-  }
-  /* clip y */
-  if (miny < 0) {
-    miny = 0;
-    maxy = MAX (maxy, 0);
-  }
-  if (maxy >= gdk_display->fb_height) {
-    maxy = gdk_display->fb_height-1;
-    miny = MIN (miny, maxy);
-  }
-  
-  (*shadow_copy_rect[_gdk_fb_screen_angle]) (minx, miny, maxx - minx + 1, maxy - miny + 1);
-}
-
-void
-gdk_shadow_fb_stop_updates (void)
-{
-  struct itimerval timeout;
-
-  refresh_queued = 0;
-
-  /* Stop the timer */ 
-  timeout.it_value.tv_sec = 0;
-  timeout.it_value.tv_usec = 0;
-  timeout.it_interval.tv_sec = 0;
-  timeout.it_interval.tv_usec = 0;
-  setitimer (ITIMER_REAL, &timeout, NULL);
-
-  refresh_queued = 0;
-}
-
-void
-gdk_shadow_fb_init (void)
-{
-  struct sigaction action;
-
-  action.sa_handler = gdk_shadow_fb_refresh;
-  sigemptyset (&action.sa_mask);
-  action.sa_flags = 0;
-  
-  sigaction (SIGALRM, &action, NULL);
-
-  shadow_copy_rect[GDK_FB_0_DEGREES] = gdk_shadow_fb_copy_rect_0;
-  shadow_copy_rect[GDK_FB_90_DEGREES] = gdk_shadow_fb_copy_rect_90;
-  shadow_copy_rect[GDK_FB_180_DEGREES] = gdk_shadow_fb_copy_rect_180;
-  shadow_copy_rect[GDK_FB_270_DEGREES] = gdk_shadow_fb_copy_rect_270;
-}
-
-/* maxx and maxy are included */
-void
-gdk_shadow_fb_update (gint minx, gint miny, gint maxx, gint maxy)
-{
-  struct itimerval timeout;
-
-  if (gdk_display->manager_blocked)
-    return;
-  
-  g_assert (minx <= maxx);
-  g_assert (miny <= maxy);
-
-  if (refresh_queued)
-    {
-      refresh_x1 = MIN (refresh_x1, minx);
-      refresh_y1 = MIN (refresh_y1, miny);
-      refresh_x2 = MAX (refresh_x2, maxx);
-      refresh_y2 = MAX (refresh_y2, maxy);
-      refresh_queued = 1;
-    }
-  else
-    {
-      refresh_x1 = minx;
-      refresh_y1 = miny;
-      refresh_x2 = maxx;
-      refresh_y2 = maxy;
-      refresh_queued = 1;
-
-      getitimer (ITIMER_REAL, &timeout);
-      if (timeout.it_value.tv_usec == 0)
-       {
-         timeout.it_value.tv_sec = 0;
-         timeout.it_value.tv_usec = 20000; /* 20 ms => 50 fps */
-         timeout.it_interval.tv_sec = 0;
-         timeout.it_interval.tv_usec = 20000; /* 20 ms => 50 fps */
-         setitimer (ITIMER_REAL, &timeout, NULL);
-       }
-    }
-  
-}
-#else
-
-void
-gdk_shadow_fb_stop_updates (void)
-{
-}
-
-void
-gdk_shadow_fb_update (gint minx, gint miny, gint maxx, gint maxy)
-{
-}
-
-void
-gdk_shadow_fb_init (void)
-{
-}
-
-#endif
-
diff --git a/gdk/linux-fb/gdkscreen-fb.c b/gdk/linux-fb/gdkscreen-fb.c
deleted file mode 100644 (file)
index ff19caa..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdk.h"
-#include "gdkprivate-fb.h"
-
-static GdkColormap *default_colormap = NULL;
-
-GdkDisplay *
-gdk_screen_get_display (GdkScreen *screen)
-{
-  return _gdk_display;
-}
-
-GdkWindow *
-gdk_screen_get_root_window (GdkScreen *screen)
-{
-  return _gdk_parent_root;
-}
-
-GdkColormap*
-gdk_screen_get_default_colormap (GdkScreen *screen)
-{
-  return default_colormap;
-}
-
-void
-gdk_screen_set_default_colormap (GdkScreen   *screen,
-                                GdkColormap *colormap)
-{
-  GdkColormap *old_colormap;
-  
-  g_return_if_fail (GDK_IS_SCREEN (screen));
-  g_return_if_fail (GDK_IS_COLORMAP (colormap));
-
-  old_colormap = default_colormap;
-
-  default_colormap = g_object_ref (colormap);
-  
-  if (old_colormap)
-    g_object_unref (old_colormap);
-}
-
-int
-gdk_screen_get_n_monitors (GdkScreen *screen)
-{
-  return 1;
-}
-
-void
-gdk_screen_get_monitor_geometry (GdkScreen    *screen, 
-                                gint          num_monitor,
-                                GdkRectangle *dest)
-{
-  dest->x = 0;
-  dest->y = 0;
-  dest->width = gdk_screen_width ();
-  dest->height = gdk_screen_height ();
-}
-
-GdkColormap *
-gdk_screen_get_rgba_colormap (GdkScreen *screen)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
-  return NULL;
-}
-  
-GdkVisual *
-gdk_screen_get_rgba_visual (GdkScreen *screen)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), NULL);
-
-  return NULL;
-}
-  
-gint
-gdk_screen_get_number (GdkScreen *screen)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), 0);  
-  
-  return 0;
-}
-
-gchar * 
-_gdk_windowing_substitute_screen_number (const gchar *display_name,
-                                        int          screen_number)
-{
-  return g_strdup (display_name);
-}
-
-gchar *
-gdk_screen_make_display_name (GdkScreen *screen)
-{
-  return g_strdup ("");
-}
diff --git a/gdk/linux-fb/gdkselection-fb.c b/gdk/linux-fb/gdkselection-fb.c
deleted file mode 100644 (file)
index 374cf3f..0000000
+++ /dev/null
@@ -1,431 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include <string.h>
-
-#include "gdkproperty.h"
-#include "gdkselection.h"
-#include "gdkprivate.h"
-#include "gdkprivate-fb.h"
-
-
-typedef struct _OwnerInfo OwnerInfo;
-
-struct _OwnerInfo
-{
-  GdkAtom    selection;
-  GdkWindow *owner;
-};
-
-GSList *owner_list;
-
-/* When a window is destroyed we check if it is the owner
- * of any selections. This is somewhat inefficient, but
- * owner_list is typically short, and it is a low memory,
- * low code solution
- */
-void
-_gdk_selection_window_destroyed (GdkWindow *window)
-{
-  GSList *tmp_list = owner_list;
-  while (tmp_list)
-    {
-      OwnerInfo *info = tmp_list->data;
-      tmp_list = tmp_list->next;
-      
-      if (info->owner == window)
-       {
-         owner_list = g_slist_remove (owner_list, info);
-         g_free (info);
-       }
-    }
-}
-
-gint
-gdk_selection_owner_set_for_display (GdkDisplay *display,
-                                    GdkWindow  *owner,
-                                    GdkAtom     selection,
-                                    guint32     time,
-                                    gint        send_event)
-{
-  GSList *tmp_list;
-  OwnerInfo *info;
-
-  tmp_list = owner_list;
-  while (tmp_list)
-    {
-      info = tmp_list->data;
-      if (info->selection == selection)
-       {
-         owner_list = g_slist_remove (owner_list, info);
-         g_free (info);
-         break;
-       }
-      tmp_list = tmp_list->next;
-    }
-
-  if (owner)
-    {
-      info = g_new (OwnerInfo, 1);
-      info->owner = owner;
-      info->selection = selection;
-
-      owner_list = g_slist_prepend (owner_list, info);
-    }
-
-  return TRUE;
-}
-
-GdkWindow*
-gdk_selection_owner_get_for_display (GdkDisplay *display,
-                                    GdkAtom     selection)
-{
-  OwnerInfo *info;
-  GSList *tmp_list;
-  
-  tmp_list = owner_list;
-  while (tmp_list)
-    {
-      info = tmp_list->data;
-      if (info->selection == selection)
-       {
-         return info->owner;
-       }
-      tmp_list = tmp_list->next;
-    }
-  return NULL;
-}
-
-void
-gdk_selection_convert (GdkWindow *requestor,
-                      GdkAtom    selection,
-                      GdkAtom    target,
-                      guint32    time)
-{
-  GdkEvent *event;
-  GdkWindow *owner;
-  GdkWindow *event_window;
-  
-  owner = gdk_selection_owner_get (selection);
-  
-  if (owner)
-    {
-      event_window = gdk_fb_other_event_window (owner, GDK_SELECTION_REQUEST);
-      if (event_window)
-       {
-         event = gdk_event_make (event_window, GDK_SELECTION_REQUEST, TRUE);
-         event->selection.requestor = (unsigned int)requestor;
-         event->selection.selection = selection;
-         event->selection.target = target;
-         event->selection.property = _gdk_selection_property;
-       }
-    }
-  else
-    {
-      /* If no owner for the specified selection exists, the X server
-       * generates a SelectionNotify event to the requestor with property None.
-       */
-      gdk_selection_send_notify ((guint32)requestor,
-                                selection,
-                                target,
-                                GDK_NONE,
-                                0);
-    }
-}
-
-gint
-gdk_selection_property_get (GdkWindow  *requestor,
-                           guchar    **data,
-                           GdkAtom    *ret_type,
-                           gint       *ret_format)
-{
-  guchar *t = NULL;
-  GdkAtom prop_type;
-  gint prop_format;
-  gint prop_len;
-  
-  g_return_val_if_fail (requestor != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (requestor), 0);
-  
-  if (!gdk_property_get (requestor,
-                        _gdk_selection_property,
-                        NULL/*AnyPropertyType?*/,
-                        0, 0,
-                        FALSE,
-                        &prop_type, &prop_format, &prop_len,
-                        &t))
-    {
-      *data = NULL;
-      return 0;
-    }
-
-  if (ret_type)
-    *ret_type = prop_type;
-  if (ret_format)
-    *ret_format = prop_format;
-
-  if (!gdk_property_get (requestor,
-                        _gdk_selection_property,
-                        NULL/*AnyPropertyType?*/,
-                        0, prop_len + 1,
-                        FALSE,
-                        &prop_type, &prop_format, &prop_len,
-                        &t))
-    {
-      *data = NULL;
-      return 0;
-    }
-  
-  *data = t;
-  
-  return prop_len;
-}
-
-
-void
-gdk_selection_send_notify_for_display (GdkDisplay *display,
-                                      guint32     requestor,
-                                      GdkAtom     selection,
-                                      GdkAtom     target,
-                                      GdkAtom     property,
-                                      guint32     time)
-{
-  GdkEvent *event;
-  GdkWindow *event_window;
-  
-  event_window = gdk_fb_other_event_window (gdk_window_lookup ((GdkNativeWindow) requestor), GDK_SELECTION_NOTIFY);
-  if (event_window)
-    {
-      event = gdk_event_make (event_window, GDK_SELECTION_NOTIFY, TRUE);
-      event->selection.selection = selection;
-      event->selection.target = target;
-      event->selection.property = property;
-      event->selection.requestor = (GdkNativeWindow) requestor;
-    }
-}
-
-gint
-gdk_text_property_to_text_list_for_display (GdkDisplay   *display,
-                                           GdkAtom       encoding,
-                                           gint          format, 
-                                           const guchar *text,
-                                           gint          length,
-                                           gchar      ***list)
-{
-  g_warning ("gdk_text_property_to_text_list() not implemented\n");
-  return 0;
-}
-
-void
-gdk_free_text_list (gchar **list)
-{
-  g_return_if_fail (list != NULL);
-  g_warning ("gdk_free_text_list() not implemented\n");
-}
-
-gint
-gdk_string_to_compound_text_for_display (GdkDisplay  *display,
-                                        const gchar *str,
-                                        GdkAtom     *encoding,
-                                        gint        *format,
-                                        guchar     **ctext,
-                                        gint        *length)
-{
-  g_warning ("gdk_string_to_compound_text() not implemented\n");
-  return 0;
-}
-
-void gdk_free_compound_text (guchar *ctext)
-{
-  g_warning ("gdk_free_compound_text() not implemented\n");
-}
-
-gchar *
-gdk_utf8_to_string_target (const gchar *str)
-{
-  g_warning ("gdk_utf8_to_string_target() not implemented\n");
-  return NULL;
-}
-
-gboolean
-gdk_utf8_to_compound_text_for_display (GdkDisplay  *display,
-                                      const gchar *str,
-                                      GdkAtom     *encoding,
-                                      gint        *format,
-                                      guchar     **ctext,
-                                      gint        *length)
-{
-  g_warning ("gdk_utf8_to_compound_text() not implemented\n");
-  return 0;
-}
-
-static gint
-make_list (const gchar  *text,
-          gint          length,
-          gboolean      latin1,
-          gchar      ***list)
-{
-  GSList *strings = NULL;
-  gint n_strings = 0;
-  gint i;
-  const gchar *p = text;
-  const gchar *q;
-  GSList *tmp_list;
-  GError *error = NULL;
-
-  while (p < text + length)
-    {
-      gchar *str;
-      
-      q = p;
-      while (*q && q < text + length)
-       q++;
-
-      if (latin1)
-       {
-         str = g_convert (p, q - p,
-                          "UTF-8", "ISO-8859-1",
-                          NULL, NULL, &error);
-
-         if (!str)
-           {
-             g_warning ("Error converting selection from STRING: %s",
-                        error->message);
-             g_error_free (error);
-           }
-       }
-      else
-       str = g_strndup (p, q - p);
-
-      if (str)
-       {
-         strings = g_slist_prepend (strings, str);
-         n_strings++;
-       }
-
-      p = q + 1;
-    }
-
-  if (list)
-    *list = g_new (gchar *, n_strings + 1);
-
-  (*list)[n_strings] = NULL;
-  
-  i = n_strings;
-  tmp_list = strings;
-  while (tmp_list)
-    {
-      if (list)
-       (*list)[--i] = tmp_list->data;
-      else
-       g_free (tmp_list->data);
-
-      tmp_list = tmp_list->next;
-    }
-
-  g_slist_free (strings);
-
-  return n_strings;
-}
-
-
-gint 
-gdk_text_property_to_utf8_list_for_display (GdkDisplay    *display,
-                                           GdkAtom        encoding,
-                                           gint           format,
-                                           const guchar  *text,
-                                           gint           length,
-                                           gchar       ***list)
-{
-  g_return_val_if_fail (text != NULL, 0);
-  g_return_val_if_fail (length >= 0, 0);
-  
-  if (encoding == GDK_TARGET_STRING)
-    {
-      return make_list ((gchar *)text, length, TRUE, list);
-    }
-  else if (encoding == gdk_atom_intern ("UTF8_STRING", FALSE))
-    {
-      return make_list ((gchar *)text, length, FALSE, list);
-    }
-  else
-    {
-      gchar **local_list;
-      gint local_count;
-      gint i;
-      const gchar *charset = NULL;
-      gboolean need_conversion = !g_get_charset (&charset);
-      gint count = 0;
-      GError *error = NULL;
-      
-      /* Probably COMPOUND text, we fall back to Xlib routines
-       */
-      local_count = gdk_text_property_to_text_list (encoding,
-                                                   format, 
-                                                   text,
-                                                   length,
-                                                   &local_list);
-      if (list)
-       *list = g_new (gchar *, local_count + 1);
-      
-      for (i = 0; i < local_count; i++)
-       {
-         /* list contains stuff in our default encoding
-          */
-         if (need_conversion)
-           {
-             gchar *utf = g_convert (local_list[i], -1,
-                                     "UTF-8", charset,
-                                     NULL, NULL, &error);
-             if (utf)
-               {
-                 if (list)
-                   (*list)[count++] = utf;
-                 else
-                   g_free (utf);
-               }
-             else
-               {
-                 g_warning ("Error converting to UTF-8 from '%s': %s",
-                            charset, error->message);
-                 g_error_free (error);
-                 error = NULL;
-               }
-           }
-         else
-           {
-             if (list)
-               (*list)[count++] = g_strdup (local_list[i]);
-           }
-       }
-      
-      gdk_free_text_list (local_list);
-      (*list)[count] = NULL;
-
-      return count;
-    }
-}
diff --git a/gdk/linux-fb/gdkspawn-fb.c b/gdk/linux-fb/gdkspawn-fb.c
deleted file mode 100644 (file)
index 8fdd9b4..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2003 Sun Microsystems Inc.
- *
- * 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.
- *
- * Authors: Mark McLoughlin <mark@skynet.ie>
- */
-
-#include <config.h>
-
-#include "gdkspawn.h"
-
-#include <glib.h>
-#include <gdk/gdk.h>
-
-gboolean
-gdk_spawn_on_screen (GdkScreen             *screen,
-                    const gchar           *working_directory,
-                    gchar                **argv,
-                    gchar                **envp,
-                    GSpawnFlags            flags,
-                    GSpawnChildSetupFunc   child_setup,
-                    gpointer               user_data,
-                    gint                  *child_pid,
-                    GError               **error)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
-
-  return g_spawn_async (working_directory,
-                       argv,
-                       envp,
-                       flags,
-                       child_setup,
-                       user_data,
-                       child_pid,
-                       error);
-}
-
-gboolean
-gdk_spawn_on_screen_with_pipes (GdkScreen            *screen,
-                               const gchar          *working_directory,
-                               gchar               **argv,
-                               gchar               **envp,
-                               GSpawnFlags           flags,
-                               GSpawnChildSetupFunc  child_setup,
-                               gpointer              user_data,
-                               gint                 *child_pid,
-                               gint                 *standard_input,
-                               gint                 *standard_output,
-                               gint                 *standard_error,
-                               GError              **error)
-{
-  g_return_val_if_fail (GDK_IS_SCREEN (screen), FALSE);
-
-  return g_spawn_async_with_pipes (working_directory,
-                                  argv,
-                                  envp,
-                                  flags,
-                                  child_setup,
-                                  user_data,
-                                  child_pid,
-                                  standard_input,
-                                  standard_output,
-                                  standard_error,
-                                  error);
-}
-
-gboolean
-gdk_spawn_command_line_on_screen (GdkScreen    *screen,
-                                 const gchar  *command_line,
-                                 GError      **error)
-{
-  gchar    **argv = NULL;
-  gboolean   retval;
-
-  g_return_val_if_fail (command_line != NULL, FALSE);
-
-  if (!g_shell_parse_argv (command_line,
-                          NULL, &argv,
-                          error))
-    return FALSE;
-
-  retval = gdk_spawn_on_screen (screen,
-                               NULL, argv, NULL,
-                               G_SPAWN_SEARCH_PATH,
-                               NULL, NULL, NULL,
-                               error);
-  g_strfreev (argv);
-
-  return retval;
-}
diff --git a/gdk/linux-fb/gdkvisual-fb.c b/gdk/linux-fb/gdkvisual-fb.c
deleted file mode 100644 (file)
index 4331bfc..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdkvisual.h"
-#include "gdkprivate-fb.h"
-#include "gdkinternals.h"
-#include <sys/ioctl.h>
-
-static GdkVisual *system_visual = NULL;
-
-static void
-gdk_visual_finalize (GObject *object)
-{
-  g_error ("A GdkVisual object was finalized. This should not happen");
-}
-
-static void
-gdk_visual_class_init (GObjectClass *class)
-{
-  class->finalize = gdk_visual_finalize;
-}
-
-
-GType
-gdk_visual_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkVisualClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_visual_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkVisual),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) NULL,
-      };
-      
-      object_type = g_type_register_static (G_TYPE_OBJECT,
-                                            "GdkVisual",
-                                            &object_info, 0);
-    }
-  
-  return object_type;
-}
-
-void
-_gdk_visual_init (void)
-{
-  system_visual = g_object_new (GDK_TYPE_VISUAL, NULL);
-
-  system_visual->depth = system_visual->bits_per_rgb = gdk_display->modeinfo.bits_per_pixel;
-  system_visual->byte_order = GDK_LSB_FIRST;
-  system_visual->colormap_size = 0;
-
-  switch (gdk_display->sinfo.visual)
-    {
-    case FB_VISUAL_PSEUDOCOLOR:
-      system_visual->colormap_size = 1 << gdk_display->modeinfo.bits_per_pixel;
-      system_visual->type = GDK_VISUAL_PSEUDO_COLOR;
-      break;
-    case FB_VISUAL_DIRECTCOLOR:
-    case FB_VISUAL_TRUECOLOR:
-      system_visual->type = GDK_VISUAL_TRUE_COLOR;
-
-      system_visual->red_prec = gdk_display->modeinfo.red.length;
-      system_visual->red_shift = gdk_display->modeinfo.red.offset;
-      system_visual->red_mask = ((1 << (system_visual->red_prec)) - 1) << system_visual->red_shift;
-
-      system_visual->green_prec = gdk_display->modeinfo.green.length;
-      system_visual->green_shift = gdk_display->modeinfo.green.offset;
-      system_visual->green_mask = ((1 << (system_visual->green_prec)) - 1) << system_visual->green_shift;
-
-      system_visual->blue_prec = gdk_display->modeinfo.blue.length;
-      system_visual->blue_shift = gdk_display->modeinfo.blue.offset;
-      system_visual->blue_mask = ((1 << (system_visual->blue_prec)) - 1) << system_visual->blue_shift;
-
-      if (gdk_display->sinfo.visual == FB_VISUAL_DIRECTCOLOR) 
-       {
-         guint16 red[256], green[256], blue[256];
-         struct fb_cmap fbc = {0,0};
-         int size, i;
-         /* Load the colormap to ramps here, as they might be initialized to
-            some other garbage */
-         
-         g_warning ("Directcolor visual, not very well tested\n");
-         fbc.red = red;
-         fbc.green = green;
-         fbc.blue = blue;
-         
-         size = 1 << system_visual->red_prec;
-         for (i = 0; i < size; i++)
-           red[i] = i * 65535 / (size - 1);
-         
-         size = 1 << system_visual->green_prec;
-         fbc.len = size;
-         for (i = 0; i < size; i++)
-           green[i] = i * 65535 / (size - 1);
-         
-         size = 1 << system_visual->blue_prec;
-         for (i = 0; i < size; i++)
-           blue[i] = i * 65535 / (size - 1);
-         
-         ioctl (gdk_display->fb_fd, FBIOPUTCMAP, &fbc);
-       }
-      break;
-    case FB_VISUAL_STATIC_PSEUDOCOLOR:
-      system_visual->type = GDK_VISUAL_STATIC_COLOR;
-      system_visual->colormap_size = 1 << gdk_display->modeinfo.bits_per_pixel;
-      break;
-    default:
-      g_assert_not_reached ();
-      break;
-    }
-}
-
-gint
-gdk_visual_get_best_depth (void)
-{
-  return system_visual->depth;
-}
-
-GdkVisualType
-gdk_visual_get_best_type (void)
-{
-  return system_visual->type;
-}
-
-GdkVisual*
-gdk_screen_get_system_visual (GdkScreen *screen)
-{
-  return system_visual;
-}
-
-GdkVisual*
-gdk_visual_get_best (void)
-{
-  return system_visual;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_depth (gint depth)
-{
-  if (system_visual->depth != depth)
-    return NULL;
-
-  return system_visual;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_type (GdkVisualType visual_type)
-{
-  if (system_visual->type != visual_type)
-    return NULL;
-
-  return system_visual;
-}
-
-GdkVisual*
-gdk_visual_get_best_with_both (gint          depth,
-                              GdkVisualType visual_type)
-{
-  if (system_visual->depth != depth)
-    return NULL;
-
-  if (system_visual->type != visual_type)
-    return NULL;
-
-  return system_visual;
-}
-
-void
-gdk_query_depths  (gint **depths,
-                  gint  *count)
-{
-  *count = 1;
-  *depths = &system_visual->depth;
-}
-
-void
-gdk_query_visual_types (GdkVisualType **visual_types,
-                       gint           *count)
-{
-  *count = 1;
-  *visual_types = &system_visual->type;
-}
-
-GList*
-gdk_screen_list_visuals (GdkScreen *screen)
-{
-  return g_list_append (NULL, gdk_visual_get_system ());
-}
-
-GdkScreen *
-gdk_visual_get_screen (GdkVisual *visual)
-{
-  g_return_val_if_fail (GDK_IS_VISUAL (visual), NULL);
-
-  return gdk_screen_get_default ();
-}
diff --git a/gdk/linux-fb/gdkwindow-fb.c b/gdk/linux-fb/gdkwindow-fb.c
deleted file mode 100644 (file)
index fa0e025..0000000
+++ /dev/null
@@ -1,2380 +0,0 @@
-/* GDK - The GIMP Drawing Kit
- * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU Lesser 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
- * Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser 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.
- */
-
-/*
- * Modified by the GTK+ Team and others 1997-2000.  See the AUTHORS
- * file for a list of people on the GTK+ Team.  See the ChangeLog
- * files for a list of changes.  These files are distributed with
- * GTK+ at ftp://ftp.gtk.org/pub/gtk/. 
- */
-
-#include <config.h>
-#include "gdk.h"
-
-#include "gdkwindow.h"
-#include "gdkinputprivate.h"
-#include "gdkprivate-fb.h"
-#include "gdkinternals.h"
-
-#include <limits.h>
-
-/* Global variables: */
-static GdkWindow *gdk_fb_window_containing_pointer = NULL;
-static GdkWindow *gdk_fb_focused_window = NULL;
-static gpointer parent_class = NULL;
-
-static void recompute_drawable (GdkDrawable *drawable);
-static void gdk_fb_window_raise (GdkWindow *window);
-static GdkRegion* gdk_window_fb_get_visible_region (GdkDrawable *drawable);
-
-typedef struct
-{
-  GdkWindowChildChanged  changed;
-  GdkWindowChildGetPos   get_pos;
-  gpointer               user_data;
-}  GdkWindowChildHandlerData;
-
-static void
-g_free_2nd (gpointer a, gpointer b, gpointer data)
-{
-  g_free (b);
-}
-
-static void
-gdk_window_impl_fb_finalize (GObject *object)
-{
-  GdkWindowFBData *fbd = GDK_WINDOW_FBDATA (object);
-
-  if (GDK_WINDOW_IS_MAPPED (fbd->drawable_data.wrapper))
-    gdk_window_hide (fbd->drawable_data.wrapper);
-
-  if (fbd->cursor)
-    gdk_cursor_unref (fbd->cursor);
-
-  if (fbd->properties)
-    {
-      g_hash_table_foreach (fbd->properties, g_free_2nd, NULL);
-      g_hash_table_destroy (fbd->properties);
-    }
-
-  G_OBJECT_CLASS (parent_class)->finalize (object);
-}
-
-static void
-gdk_window_impl_fb_class_init (GdkWindowFBClass *klass)
-{
-  GObjectClass *object_class = G_OBJECT_CLASS (klass);
-  GdkDrawableClass *drawable_class = GDK_DRAWABLE_CLASS (klass);
-  
-  parent_class = g_type_class_peek_parent (klass);
-
-  object_class->finalize = gdk_window_impl_fb_finalize;
-  
-  /* Visible and clip regions are the same */
-  drawable_class->get_clip_region = gdk_window_fb_get_visible_region;
-  drawable_class->get_visible_region = gdk_window_fb_get_visible_region;
-}
-
-static void
-gdk_window_impl_fb_init (GdkWindowFBData *impl)
-{
-  impl->drawable_data.depth = gdk_display->modeinfo.bits_per_pixel;
-  impl->drawable_data.colormap = gdk_colormap_get_system ();
-  impl->shape = NULL;
-}
-
-GType
-_gdk_window_impl_get_type (void)
-{
-  static GType object_type = 0;
-
-  if (!object_type)
-    {
-      static const GTypeInfo object_info =
-      {
-        sizeof (GdkWindowFBClass),
-        (GBaseInitFunc) NULL,
-        (GBaseFinalizeFunc) NULL,
-        (GClassInitFunc) gdk_window_impl_fb_class_init,
-        NULL,           /* class_finalize */
-        NULL,           /* class_data */
-        sizeof (GdkWindowFBData),
-        0,              /* n_preallocs */
-        (GInstanceInitFunc) gdk_window_impl_fb_init,
-      };
-      
-      object_type = g_type_register_static (gdk_drawable_impl_fb_get_type(),
-                                            "GdkWindowFB",
-                                            &object_info,
-                                           0);
-    }
-  
-  return object_type;
-}
-
-void
-_gdk_windowing_window_init (void)
-{
-  GdkWindowAttr attr;
-
-  GdkCursor *cursor;
-  GdkWindowObject *private;
-
-  attr.width = gdk_screen_width ();
-  attr.height = gdk_screen_height ();
-  attr.window_type = GDK_WINDOW_ROOT;
-  attr.cursor = NULL;
-  attr.event_mask = GDK_EXPOSURE_MASK;
-  attr.wclass = GDK_INPUT_OUTPUT;
-  _gdk_parent_root = gdk_window_new (NULL, &attr, GDK_WA_CURSOR);
-  private = (GdkWindowObject *)_gdk_parent_root;
-
-  private->state = 0;
-
-  GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->lim_x = attr.width;
-  GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->lim_y = attr.height;
-
-  _gdk_fb_screen_gc = gdk_gc_new (_gdk_parent_root);
-
-  gdk_fb_drawable_clear (_gdk_parent_root);
-  
-  /* Must be done after root is created, since gdk_cursor_new()
-   * references _gdk_parent_root.
-   */
-  cursor = gdk_cursor_new (GDK_LEFT_PTR);
-  gdk_window_set_cursor (_gdk_parent_root, cursor);
-}
-
-GdkWindow*
-gdk_window_new (GdkWindow     *parent,
-               GdkWindowAttr *attributes,
-               gint           attributes_mask)
-{
-  GdkWindow *window;
-  GdkWindowObject *private;
-  GdkWindowObject *parent_private;
-  GdkVisual *visual;
-  GdkWindowFBData *impl;
-
-  int x, y, depth;
-  
-  g_return_val_if_fail (attributes != NULL, NULL);
-  
-  if (!parent ||
-      (attributes->window_type != GDK_WINDOW_CHILD &&
-       attributes->window_type != GDK_WINDOW_TEMP))
-    parent = _gdk_parent_root;
-  
-  parent_private = (GdkWindowObject*) parent;
-  
-  window = (GdkWindow *)g_object_new (GDK_TYPE_WINDOW, NULL);
-  private = (GdkWindowObject *)window;
-
-  private->parent = parent_private;
-
-  private->accept_focus = TRUE;
-  private->focus_on_map = TRUE;
-
-  if (attributes_mask & GDK_WA_X)
-    x = attributes->x;
-  else
-    x = 0;
-
-  if (attributes_mask & GDK_WA_Y)
-    y = attributes->y;
-  else
-    y = 0;
-
-  gdk_window_set_events (window, attributes->event_mask);
-
-  if (attributes_mask & GDK_WA_VISUAL)
-    visual = attributes->visual;
-  else
-    visual = gdk_visual_get_system ();
-
-  impl = (GdkWindowFBData *)private->impl;
-  impl->drawable_data.wrapper = window;
-  private->x = x;
-  private->y = y;
-  impl->drawable_data.width = (attributes->width > 1) ? (attributes->width) : (1);
-  impl->drawable_data.height = (attributes->height > 1) ? (attributes->height) : (1);
-  private->window_type = impl->drawable_data.window_type = attributes->window_type;
-  impl->drawable_data.mem = gdk_display->fb_mem;
-  impl->drawable_data.rowstride = gdk_display->fb_stride;
-  gdk_window_move_resize (window, x, y,
-                         impl->drawable_data.width, impl->drawable_data.height);
-
-  if (attributes->wclass == GDK_INPUT_OUTPUT)
-    {
-      depth = visual->depth;
-
-      private->input_only = FALSE;
-      private->depth = impl->drawable_data.depth;
-      
-      if ((attributes_mask & GDK_WA_COLORMAP) &&
-         attributes->colormap)
-       impl->drawable_data.colormap = attributes->colormap;
-      else
-       impl->drawable_data.colormap = gdk_colormap_get_system ();
-      
-      switch (impl->drawable_data.window_type)
-       {
-       case GDK_WINDOW_TOPLEVEL:
-       case GDK_WINDOW_CHILD:
-       case GDK_WINDOW_DIALOG:
-       case GDK_WINDOW_TEMP:
-       default:
-         break;
-         
-       case GDK_WINDOW_ROOT:
-         if (_gdk_parent_root)
-           g_error ("cannot make windows of type GDK_WINDOW_ROOT");
-         break;
-       case GDK_DRAWABLE_PIXMAP:
-         g_error ("cannot make windows of type GDK_DRAWABLE_PIXMAP (use gdk_pixmap_new)");
-         break;
-       }
-    }
-  else
-    {
-      depth = 0;
-      private->input_only = TRUE;
-      impl->drawable_data.colormap = NULL;
-    }
-
-  if (impl->drawable_data.colormap)
-    gdk_colormap_ref (impl->drawable_data.colormap);
-  
-  gdk_window_set_cursor (window, ((attributes_mask & GDK_WA_CURSOR) ?
-                                 (attributes->cursor) :
-                                 NULL));
-
-  if (parent_private)
-    parent_private->children = g_list_prepend (parent_private->children, window);
-  
-  if (attributes_mask & GDK_WA_TYPE_HINT)
-    gdk_window_set_type_hint (window, attributes->type_hint);
-
-  return window;
-}
-
-/* This function is called when the XWindow is really gone.  */
-void
-_gdk_windowing_window_destroy (GdkWindow *window,
-                              gboolean   recursing,
-                              gboolean   foreign_destroy)
-{
-  GdkWindowObject *private;
-  GdkRectangle r;
-
-  private = (GdkWindowObject*) window;
-
-  _gdk_selection_window_destroyed (window);
-
-  r.x = private->x;
-  r.y = private->y;
-  r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->width;
-  r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->height;
-  /* Clear the root window, as it might be visible under
-     the destroyed window */
-  gdk_window_clear_area (_gdk_parent_root,
-                        r.x,
-                        r.y,
-                        r.width,
-                        r.height);
-  /* Invalidate the rect */
-  gdk_window_invalidate_rect ((GdkWindow *)private->parent, &r, TRUE);
-}
-
-static gboolean
-all_parents_shown (GdkWindowObject *private)
-{
-  while (GDK_WINDOW_IS_MAPPED (private))
-    {
-      if (private->parent)
-       private = (GdkWindowObject *)private->parent;
-      else
-       return TRUE;
-    }
-
-  return FALSE;
-}
-
-static void
-send_map_events (GdkWindowObject *private, gboolean is_map)
-{
-  GList *l;
-  GdkWindow *parent = (GdkWindow *)private->parent;
-  GdkWindow *event_win;
-  
-  g_assert (is_map);
-
-  if (!GDK_WINDOW_IS_MAPPED (private))
-    return;
-
-  if (is_map)
-    {
-      event_win = gdk_fb_other_event_window ((GdkWindow *)private, GDK_MAP);
-      if (event_win)
-       gdk_event_make (event_win, GDK_MAP, TRUE);
-    }
-  if (private->input_only)
-    return;
-
-  if (!parent)
-    parent = (GdkWindow *)private;
-
-  if (((GDK_DRAWABLE_IMPL_FBDATA (private)->abs_x > GDK_DRAWABLE_IMPL_FBDATA (parent)->lim_x) ||
-       (GDK_DRAWABLE_IMPL_FBDATA (private)->abs_y > GDK_DRAWABLE_IMPL_FBDATA (parent)->lim_y) ||
-       (GDK_DRAWABLE_IMPL_FBDATA (private)->lim_x < GDK_DRAWABLE_IMPL_FBDATA (parent)->llim_x) ||
-       (GDK_DRAWABLE_IMPL_FBDATA (private)->lim_y < GDK_DRAWABLE_IMPL_FBDATA (parent)->llim_y)))
-     return;
-
-  if (is_map)
-    gdk_window_clear ((GdkWindow *)private);
-
-  for (l = private->children; l; l = l->next)
-    send_map_events (l->data, is_map);
-}
-
-/* Cut & paste versions of the stuff in gdkwindow.c, with the addition of clearing the newly exposed region. */
-void
-gdk_window_invalidate_region_clear(GdkWindow *window,
-                                  GdkRegion *region)
-{
-  int i;
-  GdkWindowObject *private = GDK_WINDOW_P (window);
-
-  if (private->input_only || !GDK_WINDOW_IS_MAPPED (private))
-    return;
-
-  if (private->bg_pixmap != GDK_NO_BG)
-    for (i = 0; i < region->numRects; i++)
-      gdk_window_clear_area (window,
-                            region->rects[i].x1,
-                            region->rects[i].y1,
-                            region->rects[i].x2 - region->rects[i].x1,
-                            region->rects[i].y2 - region->rects[i].y1);
-
-  gdk_window_invalidate_region (window, region, FALSE);
-
-  {
-    GList *tmp_list;
-    GdkRectangle child_rect;
-    GdkRegion *child_region;
-
-    tmp_list = private->children;
-    while (tmp_list)
-      {
-       GdkWindowObject *child = tmp_list->data;
-       tmp_list = tmp_list->next;
-
-       if (!child->input_only)
-         {
-           gint width, height;
-
-           gdk_drawable_get_size (GDK_DRAWABLE (child),
-                                  &width, &height);
-              
-           child_rect.x = child->x;
-           child_rect.y = child->y;
-           child_rect.width = width;
-           child_rect.height = height;
-             
-           child_region = gdk_region_rectangle (&child_rect);
-           gdk_region_intersect (child_region, region);
-             
-           if (!gdk_region_empty (child_region))
-             {
-               gdk_region_offset (child_region, - child_rect.x, - child_rect.y);
-               gdk_window_invalidate_region_clear ((GdkWindow *)child, child_region);
-             }
-             
-           gdk_region_destroy (child_region);
-         }
-      }
-  }  
-}
-
-void
-gdk_window_invalidate_rect_clear (GdkWindow *window,
-                                 GdkRectangle *rect)
-{
-  GdkWindowObject *private = GDK_WINDOW_P (window);
-
-  if (private->input_only || !GDK_WINDOW_IS_MAPPED (private))
-    return;
-
-  if (GDK_WINDOW_P (window)->bg_pixmap != GDK_NO_BG)
-    gdk_window_clear_area (window, rect->x, rect->y, rect->width, rect->height);
-  gdk_window_invalidate_rect (window, rect, FALSE);
-
-  {
-    GList *tmp_list;
-    GdkRectangle child_rect, new_rect;
-
-    tmp_list = private->children;
-    while (tmp_list)
-      {
-       GdkWindowObject *child = tmp_list->data;
-       tmp_list = tmp_list->next;
-
-       if (!child->input_only)
-         {
-           gint width, height;
-
-           width = GDK_DRAWABLE_IMPL_FBDATA (child)->width;
-           height = GDK_DRAWABLE_IMPL_FBDATA (child)->height;
-              
-           child_rect.x = child->x;
-           child_rect.y = child->y;
-           child_rect.width = width;
-           child_rect.height = height;
-             
-           if (gdk_rectangle_intersect (rect, &child_rect, &new_rect))
-             {
-               new_rect.x -= child_rect.x;
-               new_rect.y -= child_rect.y;
-                 
-               gdk_window_invalidate_rect_clear ((GdkWindow *)child, &new_rect);
-             }
-         }
-      }
-  }
-}
-
-void
-gdk_fb_redraw_all (void)
-{
-  GdkRectangle r;
-  r.x = r.y = 0;
-  r.width = GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->width;
-  r.height = GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->height;
-  gdk_window_invalidate_rect_clear (_gdk_parent_root, &r);
-  gdk_window_process_all_updates ();
-}
-
-
-/* Focus follows pointer */
-static GdkWindow *
-gdk_fb_window_find_toplevel (GdkWindow *window)
-{
-  GdkWindowObject *priv = (GdkWindowObject *)window;
-  while (priv != (GdkWindowObject *)_gdk_parent_root)
-    {
-      if ((priv->parent == (GdkWindowObject *)_gdk_parent_root) && GDK_WINDOW_IS_MAPPED (priv))
-       return (GdkWindow *)priv;
-      priv = priv->parent;
-    }
-  return _gdk_parent_root;
-}
-
-GdkWindow *
-gdk_fb_window_find_focus (void)
-{
-  if (_gdk_fb_keyboard_grab_window)
-    return _gdk_fb_keyboard_grab_window;
-  
-  if (!gdk_fb_focused_window)
-    gdk_fb_focused_window = gdk_window_ref (_gdk_parent_root);
-  
-  return gdk_fb_focused_window;
-}
-
-
-static void
-gdk_fb_change_focus (GdkWindow *new_focus_window)
-{
-  GdkEventFocus *event;
-  GdkWindow *old_win, *new_win;
-  GdkWindow *event_win;
-
-  /* No focus changes while the pointer is grabbed */
-  if (_gdk_fb_pointer_grab_window)
-    return;
-  
-  old_win = gdk_fb_focused_window;
-  new_win = gdk_fb_window_find_toplevel (new_focus_window);
-
-  if (old_win != new_win)
-    {
-      if (old_win)
-       {
-         event_win = gdk_fb_keyboard_event_window (old_win, GDK_FOCUS_CHANGE);
-         if (event_win)
-           {
-             event = (GdkEventFocus *)gdk_event_make (event_win, GDK_FOCUS_CHANGE, TRUE);
-             event->in = FALSE;
-           }
-       }
-      event_win = gdk_fb_keyboard_event_window (new_win, GDK_FOCUS_CHANGE);
-      if (event_win)
-       {
-         event = (GdkEventFocus *)gdk_event_make (event_win, GDK_FOCUS_CHANGE, TRUE);
-         event->in = TRUE;
-       }
-      
-      if (gdk_fb_focused_window)
-       gdk_window_unref (gdk_fb_focused_window);
-      gdk_fb_focused_window = gdk_window_ref (new_win);
-    }
-}
-
-static GdkWindow *
-gdk_fb_find_common_ancestor (GdkWindow *win1,
-                            GdkWindow *win2)
-{
-  GdkWindowObject *tmp;
-  GList *path1 = NULL, *path2 = NULL;
-  GList *list1, *list2;
-  
-  tmp = GDK_WINDOW_OBJECT (win1);
-  while (tmp) 
-    {
-      path1 = g_list_prepend(path1, tmp);
-      tmp = tmp->parent;
-    }
-
-  tmp = GDK_WINDOW_OBJECT (win2);
-  while (tmp) 
-    {
-      path2 = g_list_prepend(path2, tmp);
-      tmp = tmp->parent;
-    }
-  
-  list1 = path1;
-  list2 = path2;
-  tmp = NULL;
-  while (list1 && list2 && (list1->data == list2->data)) 
-    {
-      tmp = (GdkWindowObject *)list1->data;
-      list1 = g_list_next (list1);
-      list2 = g_list_next (list2);
-    }
-  g_list_free (path1);
-  g_list_free (path2);
-  return GDK_WINDOW (tmp);
-}
-
-void
-gdk_fb_window_send_crossing_events (GdkWindow *src,
-                                   GdkWindow *dest,
-                                   GdkCrossingMode mode)
-{
-  GdkWindow *c;
-  GdkWindow *win, *last, *next;
-  GdkEvent *event;
-  gint x, y, x_int, y_int;
-  GdkModifierType my_mask;
-  GList *path, *list;
-  gboolean non_linear;
-  GdkWindow *a;
-  GdkWindow *b;
-  GdkWindow *event_win;
-
-  if ((mode == GDK_CROSSING_NORMAL) &&
-      (dest == gdk_fb_window_containing_pointer))
-    return;
-
-  if (gdk_fb_window_containing_pointer == NULL)
-    gdk_fb_window_containing_pointer = gdk_window_ref (_gdk_parent_root);
-
-  if (src)
-    a = src;
-  else
-    a = gdk_fb_window_containing_pointer;
-  b = dest;
-
-  if (a==b)
-    return;
-
-  /* gdk_fb_window_containing_pointer might have been destroyed.
-   * The refcount we hold on it should keep it, but it's parents
-   * might have died.
-   */
-  if (GDK_WINDOW_DESTROYED (a))
-    a = _gdk_parent_root;
-  
-  gdk_fb_mouse_get_info (&x, &y, &my_mask);
-
-  c = gdk_fb_find_common_ancestor (a, b);
-
-  non_linear = (c != a) && (c != b);
-
-  event_win = gdk_fb_pointer_event_window (a, GDK_LEAVE_NOTIFY);
-  if (event_win)
-    {
-      event = gdk_event_make (event_win, GDK_LEAVE_NOTIFY, TRUE);
-      event->crossing.subwindow = NULL;
-      gdk_window_get_root_origin (a, &x_int, &y_int);
-      event->crossing.x = x - x_int;
-      event->crossing.y = y - y_int;
-      event->crossing.x_root = x;
-      event->crossing.y_root = y;
-      event->crossing.mode = mode;
-      if (non_linear)
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-      else if (c==a)
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      event->crossing.focus = FALSE;
-      event->crossing.state = my_mask;
-    }
-  
-  /* Traverse up from a to (excluding) c */
-  if (c != a)
-    {
-      last = a;
-      win = GDK_WINDOW (GDK_WINDOW_OBJECT (a)->parent);
-      while (win != c)
-       {
-         event_win = gdk_fb_pointer_event_window (win, GDK_LEAVE_NOTIFY);
-         if (event_win)
-           {
-             event = gdk_event_make (event_win, GDK_LEAVE_NOTIFY, TRUE);
-             event->crossing.subwindow = gdk_window_ref (last);
-             gdk_window_get_root_origin (win, &x_int, &y_int);
-             event->crossing.x = x - x_int;
-             event->crossing.y = y - y_int;
-             event->crossing.x_root = x;
-             event->crossing.y_root = y;
-             event->crossing.mode = mode;
-             if (non_linear)
-               event->crossing.detail = GDK_NOTIFY_NONLINEAR_VIRTUAL;
-             else
-               event->crossing.detail = GDK_NOTIFY_VIRTUAL;
-             event->crossing.focus = FALSE;
-             event->crossing.state = my_mask;
-           }
-         last = win;
-         win = GDK_WINDOW (GDK_WINDOW_OBJECT (win)->parent);
-       }
-    }
-  
-  /* Traverse down from c to b */
-  if (c != b) 
-    {
-      path = NULL;
-      win = GDK_WINDOW( GDK_WINDOW_OBJECT (b)->parent);
-      while (win != c)
-       {
-         path = g_list_prepend (path, win);
-         win = GDK_WINDOW( GDK_WINDOW_OBJECT (win)->parent);
-       }
-      
-      list = path;
-      while (list) 
-       {
-         win = (GdkWindow *)list->data;
-         list = g_list_next (list);
-         if (list)
-           next = (GdkWindow *)list->data;
-         else 
-           next = b;
-         
-         event_win = gdk_fb_pointer_event_window (win, GDK_ENTER_NOTIFY);
-         if (event_win)
-           {
-             event = gdk_event_make (event_win, GDK_ENTER_NOTIFY, TRUE);
-             event->crossing.subwindow = gdk_window_ref (next);
-             gdk_window_get_root_origin (win, &x_int, &y_int);
-             event->crossing.x = x - x_int;
-             event->crossing.y = y - y_int;
-             event->crossing.x_root = x;
-             event->crossing.y_root = y;
-             event->crossing.mode = mode;
-             if (non_linear)
-               event->crossing.detail = GDK_NOTIFY_NONLINEAR_VIRTUAL;
-             else
-               event->crossing.detail = GDK_NOTIFY_VIRTUAL;
-             event->crossing.focus = FALSE;
-             event->crossing.state = my_mask;
-           }
-       }
-      g_list_free (path);
-    }
-
-  event_win = gdk_fb_pointer_event_window (b, GDK_ENTER_NOTIFY);
-  if (event_win)
-    {
-      event = gdk_event_make (event_win, GDK_ENTER_NOTIFY, TRUE);
-      event->crossing.subwindow = NULL;
-      gdk_window_get_root_origin (b, &x_int, &y_int);
-      event->crossing.x = x - x_int;
-      event->crossing.y = y - y_int;
-      event->crossing.x_root = x;
-      event->crossing.y_root = y;
-      event->crossing.mode = mode;
-      if (non_linear)
-       event->crossing.detail = GDK_NOTIFY_NONLINEAR;
-      else if (c==a)
-       event->crossing.detail = GDK_NOTIFY_ANCESTOR;
-      else
-       event->crossing.detail = GDK_NOTIFY_INFERIOR;
-      event->crossing.focus = FALSE;
-      event->crossing.state = my_mask;
-    }
-
-  if (mode != GDK_CROSSING_GRAB)
-    {
-      gdk_fb_change_focus (b);
-      if (b != gdk_fb_window_containing_pointer)
-       {
-         gdk_window_unref (gdk_fb_window_containing_pointer);
-         gdk_fb_window_containing_pointer = gdk_window_ref (b);
-       }
-    }
-}
-
-static void
-show_window_internal (GdkWindow *window,
-                      gboolean   raise)
-{
-  GdkWindowObject *private;
-  GdkWindow *mousewin;
-
-  g_return_if_fail (window != NULL);
-  
-  private = (GdkWindowObject*) window;
-
-  if (!private->destroyed && !GDK_WINDOW_IS_MAPPED (private))
-    {
-      private->state = 0;
-
-      if (raise)
-        gdk_fb_window_raise (window);
-      
-      if (all_parents_shown ((GdkWindowObject *)private->parent))
-       {
-         GdkRectangle rect;
-
-         recompute_drawable ((GdkDrawable *)window);
-
-         send_map_events (private, TRUE);
-
-         mousewin = gdk_window_at_pointer (NULL, NULL);
-         gdk_fb_window_send_crossing_events (NULL,
-                                             mousewin, 
-                                             GDK_CROSSING_NORMAL);
-
-         if (private->input_only)
-           return;
-
-         rect.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-         rect.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-         rect.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - rect.x;
-         rect.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - rect.y;
-         gdk_window_invalidate_rect (_gdk_parent_root, &rect, TRUE);
-       }
-    }
-}
-
-void
-gdk_window_show_unraised (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-
-  show_window_internal (window, FALSE);
-}
-
-void
-gdk_window_show (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-
-  show_window_internal (window, TRUE);
-}
-
-void
-gdk_window_hide (GdkWindow *window)
-{
-  GdkWindowObject *private;
-  GdkWindow *mousewin;
-  GdkWindow *event_win;
-  
-  g_return_if_fail (window != NULL);
-  
-  private = (GdkWindowObject*) window;
-
-  if (!private->destroyed && GDK_WINDOW_IS_MAPPED (private))
-    {
-      GdkEvent *event;
-      GdkRectangle r;
-      gboolean do_hide;
-
-      event_win = gdk_fb_other_event_window (window, GDK_UNMAP);
-      if (event_win)
-       event = gdk_event_make (event_win, GDK_UNMAP, TRUE);
-
-      r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-      r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-      r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - r.x;
-      r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - r.y;
-
-      private->state = GDK_WINDOW_STATE_WITHDRAWN;
-
-      mousewin = gdk_window_at_pointer (NULL, NULL);
-      gdk_fb_window_send_crossing_events (NULL,
-                                         mousewin, 
-                                         GDK_CROSSING_NORMAL);
-
-      do_hide = gdk_fb_cursor_need_hide (&r);
-
-      if (do_hide)
-       gdk_fb_cursor_hide ();
-      if (window == _gdk_fb_pointer_grab_window)
-       gdk_pointer_ungrab (GDK_CURRENT_TIME);
-      if (window == _gdk_fb_keyboard_grab_window)
-       gdk_keyboard_ungrab (GDK_CURRENT_TIME);
-
-      /* Clear the root window, as it might be visible under
-        the hidden window*/
-      gdk_window_clear_area (_gdk_parent_root,
-                            r.x,
-                            r.y,
-                            r.width,
-                            r.height);
-      /* Invalidate the rect */
-      gdk_window_invalidate_rect (_gdk_parent_root, &r, TRUE);
-      
-      if (do_hide)
-       gdk_fb_cursor_unhide ();
-    }
-}
-
-void
-gdk_window_withdraw (GdkWindow *window)
-{
-  gdk_window_hide (window);
-}
-
-void
-gdk_window_move (GdkWindow *window,
-                gint       x,
-                gint       y)
-{
-  GdkWindowObject *private = (GdkWindowObject *)window;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  gdk_window_move_resize (window, x, y,
-                         GDK_DRAWABLE_IMPL_FBDATA (private)->width,
-                         GDK_DRAWABLE_IMPL_FBDATA (private)->height);
-}
-
-void
-gdk_window_resize (GdkWindow *window,
-                  gint       width,
-                  gint       height)
-{
-  GdkWindowObject *private;
-  gint x, y;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private = (GdkWindowObject*) window;
-  
-  if (width < 1)
-    width = 1;
-  if (height < 1)
-    height = 1;
-
-  x = private->x;
-  y = private->y;
-  
-  if (private->parent && (private->parent->window_type != GDK_WINDOW_CHILD))
-    {
-      GdkWindowChildHandlerData *data;
-      
-      data = g_object_get_data (G_OBJECT (private->parent), "gdk-window-child-handler");
-
-      if (data)
-       (*data->get_pos) (window, &x, &y, data->user_data);
-    }
-
-  gdk_window_move_resize (window, x, y, width, height);
-}
-
-static void
-recompute_abs_positions(GdkDrawable *drawable,
-                       gint parent_x, gint parent_y,
-                       gint parent_llim_x, gint parent_llim_y,
-                       gint parent_lim_x, gint parent_lim_y)
-{
-  GList *l;
-
-  if (GDK_IS_WINDOW (drawable))
-    {
-      GdkWindowObject *private = GDK_WINDOW_P (drawable);
-      int x, y;
-
-      if (!GDK_WINDOW_IS_MAPPED (private))
-       return;
-
-      
-      GDK_DRAWABLE_IMPL_FBDATA (private)->abs_x = parent_x + private->x;
-      GDK_DRAWABLE_IMPL_FBDATA (private)->abs_y = parent_y + private->y;
-      x = MAX (parent_llim_x, GDK_DRAWABLE_IMPL_FBDATA (private)->abs_x);
-      x = MIN (x, parent_lim_x);
-      GDK_DRAWABLE_IMPL_FBDATA (private)->llim_x = x;
-      y = MAX (parent_llim_y, GDK_DRAWABLE_IMPL_FBDATA (private)->abs_y);
-      y = MIN (y, parent_lim_y);
-      GDK_DRAWABLE_IMPL_FBDATA (private)->llim_y = y;
-      x = MIN (parent_lim_x,
-              GDK_DRAWABLE_IMPL_FBDATA (private)->abs_x + GDK_DRAWABLE_IMPL_FBDATA (private)->width);
-      x = MAX (x, GDK_DRAWABLE_IMPL_FBDATA (private)->llim_x);
-      GDK_DRAWABLE_IMPL_FBDATA (private)->lim_x = x;
-      y = MIN (parent_lim_y,
-              GDK_DRAWABLE_IMPL_FBDATA (private)->abs_y + GDK_DRAWABLE_IMPL_FBDATA (private)->height);
-      y = MAX (y, GDK_DRAWABLE_IMPL_FBDATA (private)->llim_y);
-      GDK_DRAWABLE_IMPL_FBDATA (private)->lim_y = y;
-
-      g_assert (GDK_DRAWABLE_IMPL_FBDATA (private)->llim_x <= GDK_DRAWABLE_IMPL_FBDATA (private)->lim_x);
-      g_assert (GDK_DRAWABLE_IMPL_FBDATA (private)->llim_y <= GDK_DRAWABLE_IMPL_FBDATA (private)->lim_y);
-
-      for (l = private->children; l; l = l->next)
-       recompute_abs_positions (l->data,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->abs_x,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->abs_y,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->llim_x,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->llim_y,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->lim_x,
-                                GDK_DRAWABLE_IMPL_FBDATA (private)->lim_y);
-    }
-  else
-    {
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->abs_x = 0;
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->abs_y = 0;
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->llim_x = 0;
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->llim_y = 0;
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->lim_x = GDK_DRAWABLE_IMPL_FBDATA (drawable)->width;
-      GDK_DRAWABLE_IMPL_FBDATA (drawable)->lim_y = GDK_DRAWABLE_IMPL_FBDATA (drawable)->height;
-    }
-}
-
-static void
-recompute_rowstride(GdkDrawable *drawable)
-{
-  GList *l;
-  GdkWindowObject *private;
-
-  g_return_if_fail (GDK_IS_WINDOW (drawable));
-
-  private = GDK_WINDOW_P (drawable);
-
-  GDK_DRAWABLE_IMPL_FBDATA (private)->rowstride = gdk_display->fb_stride;
-  for (l = private->children; l; l = l->next)
-    recompute_rowstride (l->data);
-}
-
-void
-gdk_fb_recompute_all (void)
-{
-  GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->width = gdk_display->fb_width;
-  GDK_DRAWABLE_IMPL_FBDATA (_gdk_parent_root)->height = gdk_display->fb_height;
-  
-  recompute_abs_positions (_gdk_parent_root,
-                          0, 0, 0, 0,
-                          gdk_display->fb_width, gdk_display->fb_height);
-  recompute_rowstride (_gdk_parent_root);
-}
-
-static void
-recompute_drawable (GdkDrawable *drawable)
-{
-  if (GDK_IS_WINDOW (drawable))
-    {
-      GdkWindowObject *private = GDK_WINDOW_P (drawable);
-      GdkWindow *parent;
-
-      parent = (GdkWindow *)private->parent;
-      if (!parent)
-       parent = _gdk_parent_root;
-
-      recompute_abs_positions (drawable,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->abs_x,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->abs_y,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->llim_x,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->llim_y,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->lim_x,
-                              GDK_DRAWABLE_IMPL_FBDATA (parent)->lim_y);
-    }
-  else
-    recompute_abs_positions (drawable, 0, 0, 0, 0, INT_MAX, INT_MAX);
-}
-
-void
-gdk_fb_window_move_resize (GdkWindow *window,
-                          gint       x,
-                          gint       y,
-                          gint       width,
-                          gint       height,
-                          gboolean   send_expose_events)
-{
-  GdkWindowObject *private;
-  gint dx, dy, dw, dh;
-  gint i, draw_dir;
-  GdkEvent *event;
-  GdkWindow *mousewin;
-  GdkRectangle root_rect;
-  GdkRectangle update_rect;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (width < 1)
-    width = 1;
-  if (height < 1)
-    height = 1;
-
-  private = (GdkWindowObject*) window;
-
-  if (private->parent && (private->parent->window_type != GDK_WINDOW_CHILD))
-    {
-      GdkWindowChildHandlerData *data;
-      
-      data = g_object_get_data (G_OBJECT (private->parent), "gdk-window-child-handler");
-
-      if (data && (*data->changed) (window, x, y, width, height, data->user_data))
-         return;
-    }
-  
-  if (!private->destroyed)
-    {
-      GdkRegion *old_region = NULL;
-
-      if (private->input_only)
-       send_expose_events = FALSE;
-
-      if (GDK_WINDOW_IS_MAPPED (private) && send_expose_events)
-       old_region = gdk_fb_clip_region (GDK_DRAWABLE_IMPL(window), NULL, TRUE, FALSE, FALSE);
-
-      dx = x - private->x;
-      dy = y - private->y;
-      dw = width - GDK_DRAWABLE_IMPL_FBDATA (private)->width;
-      dh = height - GDK_DRAWABLE_IMPL_FBDATA (private)->height;
-
-      private->x = x;
-      private->y = y;
-      GDK_DRAWABLE_IMPL_FBDATA (private)->width = width;
-      GDK_DRAWABLE_IMPL_FBDATA (private)->height = height;
-
-      if (GDK_WINDOW_IS_MAPPED (private))
-       {
-         recompute_drawable ((GdkDrawable *)window);
-
-         if (send_expose_events)
-           {
-             GdkRegion *new_region, *region;
-             gboolean handle_cursor = FALSE;
-
-             new_region = gdk_fb_clip_region (GDK_DRAWABLE_IMPL (window), NULL, TRUE, FALSE, TRUE);
-
-             region = gdk_region_copy (old_region);
-             gdk_region_offset (region, dx, dy);
-             gdk_region_intersect (region, new_region);
-
-             if (region->numRects && ((dx != 0) || (dy != 0)))
-               {
-                 GdkFBDrawingContext fbdc;
-
-                 if (gdk_fb_cursor_region_need_hide (old_region) ||
-                     gdk_fb_cursor_region_need_hide (new_region))
-                   {
-                     gdk_fb_cursor_hide ();
-                     handle_cursor = TRUE;
-                   }
-
-                 gdk_fb_drawing_context_init (&fbdc, GDK_DRAWABLE_IMPL (_gdk_parent_root), NULL, FALSE, FALSE);
-                 
-                 draw_dir = 1;
-                 if ((dy>0) || ((dy==0) && (dx>0)))
-                   draw_dir = -1;
-                             
-                 for (i=(draw_dir>0)?0:region->numRects-1;i >= 0 && i < region->numRects; i+=draw_dir)
-                   {
-                     GdkRegionBox *reg = &region->rects[i];
-
-                     gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL(_gdk_parent_root),
-                                             _gdk_fb_screen_gc,
-                                             GDK_DRAWABLE_IMPL(_gdk_parent_root),
-                                             &fbdc,
-                                             (reg->x1 - dx),
-                                             (reg->y1 - dy),
-                                             (reg->x1),
-                                             (reg->y1),
-                                             (reg->x2 - reg->x1),
-                                             (reg->y2 - reg->y1));
-                   }
-                 gdk_fb_drawing_context_finalize (&fbdc);
-               }
-             gdk_shadow_fb_update (region->extents.x1, region->extents.y1, 
-                                   region->extents.x2, region->extents.y2);
-             
-             gdk_region_union (new_region, old_region);
-             gdk_region_subtract (new_region, region);
-             gdk_region_destroy (region);
-
-
-             /* Clear the root window in new_region */
-             root_rect.x = 0;
-             root_rect.y = 0;
-             root_rect.width = gdk_screen_width();
-             root_rect.height = gdk_screen_height();
-             gdk_region_get_clipbox (new_region, &update_rect);
-             if (gdk_rectangle_intersect (&update_rect, &root_rect, &update_rect))
-               gdk_window_clear_area (_gdk_parent_root,
-                                      update_rect.x,
-                                      update_rect.y,
-                                      update_rect.width,
-                                      update_rect.height);
-             /* Invalidate regions in new_region */
-             gdk_window_invalidate_region (_gdk_parent_root, new_region, TRUE);
-             
-             if (handle_cursor)
-               gdk_fb_cursor_unhide ();
-
-             gdk_region_destroy (old_region);
-             gdk_region_destroy (new_region);
-           }
-         /* Send GdkEventConfigure for toplevel windows */
-         if (private->window_type != GDK_WINDOW_CHILD)
-           {
-             GdkWindow *event_win;
-             event_win = gdk_fb_other_event_window (window, GDK_CONFIGURE);
-             if (event_win)
-               {
-                 event = gdk_event_make (event_win, GDK_CONFIGURE, TRUE);
-                 event->configure.x = private->x;
-                 event->configure.y = private->y;
-                 event->configure.width = GDK_DRAWABLE_IMPL_FBDATA (private)->width;
-                 event->configure.height = GDK_DRAWABLE_IMPL_FBDATA (private)->height;
-               }
-           }
-
-         /* The window the pointer is in might have changed */
-         mousewin = gdk_window_at_pointer (NULL, NULL);
-         gdk_fb_window_send_crossing_events (NULL,
-                                             mousewin, 
-                                             GDK_CROSSING_NORMAL);
-       }
-    }
-}
-
-void
-gdk_window_move_resize (GdkWindow *window,
-                       gint       x,
-                       gint       y,
-                       gint       width,
-                       gint       height)
-{
-  gdk_fb_window_move_resize (window, x, y, width, height, TRUE);
-}
-
-void
-gdk_window_reparent (GdkWindow *window,
-                    GdkWindow *new_parent,
-                    gint       x,
-                    gint       y)
-{
-  GdkWindowObject *window_private;
-  GdkWindowObject *parent_private;
-  GdkWindowObject *old_parent_private;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  g_return_if_fail (new_parent != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (new_parent));
-  
-  if (!new_parent)
-    new_parent = _gdk_parent_root;
-
-  window_private = (GdkWindowObject*) window;
-  old_parent_private = (GdkWindowObject*)window_private->parent;
-  parent_private = (GdkWindowObject*) new_parent;
-  
-  g_assert(GDK_DRAWABLE_IMPL_FBDATA (window_private)->colormap);
-
-  window_private->parent = (GdkWindowObject *)new_parent;
-  
-  if (old_parent_private)
-    old_parent_private->children = g_list_remove (old_parent_private->children, window);
-
-  parent_private->children = g_list_prepend (parent_private->children, window);
-
-  if (GDK_WINDOW_IS_MAPPED (window_private))
-    {
-      GdkRectangle r;
-      GdkRegion *region;
-
-      r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-      r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-      r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - r.x;
-      r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - r.y;
-      region = gdk_region_rectangle (&r);
-
-      recompute_drawable ((GdkDrawable *)window);
-      r.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-      r.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-      r.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - r.x;
-      r.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - r.y;
-      gdk_region_union_with_rect (region, &r);
-
-      gdk_window_invalidate_region (_gdk_parent_root, region, TRUE);
-      gdk_region_destroy (region);
-    }
-}
-
-
-void
-_gdk_windowing_window_clear_area (GdkWindow *window,
-                                 gint       x,
-                                 gint       y,
-                                 gint       width,
-                                 gint       height)
-{
-  GdkPixmap *bgpm;
-  GdkWindow *relto;
-
-  if (GDK_WINDOW_P (window)->input_only)
-    return;
-
-  bgpm = GDK_WINDOW_P (window)->bg_pixmap;
-
-  if (width == 0)
-    width = GDK_DRAWABLE_IMPL_FBDATA (window)->width - x;
-  
-  if (height == 0)
-    height = GDK_DRAWABLE_IMPL_FBDATA (window)->height - y;
-  
-  relto = window;
-  while ((bgpm == GDK_PARENT_RELATIVE_BG) && relto)
-    {
-      relto = (GdkWindow *)GDK_WINDOW_P(relto)->parent;
-      bgpm = GDK_WINDOW_P (relto)->bg_pixmap;
-    }
-  
-  if (bgpm && bgpm != GDK_NO_BG)
-    {
-      int curx, cury;
-      int xstep, ystep;
-      int xtrans, ytrans;
-      GdkFBDrawingContext fbdc;
-
-      gdk_fb_drawing_context_init (&fbdc, GDK_DRAWABLE_IMPL (window), NULL, FALSE, TRUE);
-
-      xtrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_x;
-      ytrans = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y - GDK_DRAWABLE_IMPL_FBDATA (relto)->abs_y;
-
-      for (cury = y; cury < (y + height); cury += ystep)
-       {
-         int drawh = (cury + ytrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height;
-         ystep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->height - drawh;
-
-         ystep = MIN (ystep, y + height - cury);
-
-         for (curx = x; curx < (x + width); curx += xstep)
-           {
-             int draww = (curx + xtrans) % GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width;
-             xstep = GDK_DRAWABLE_IMPL_FBDATA (bgpm)->width - draww;
-
-             xstep = MIN (xstep, x + width - curx);
-             gdk_fb_draw_drawable_3 (GDK_DRAWABLE_IMPL (window),
-                                     _gdk_fb_screen_gc,
-                                     GDK_DRAWABLE_IMPL (bgpm),
-                                     &fbdc,
-                                     draww, drawh,
-                                     curx, cury,
-                                     xstep, ystep);
-           }
-       }
-
-      gdk_fb_drawing_context_finalize (&fbdc);
-    }
-  else if (!bgpm)
-    {
-      if (relto == window)
-       gdk_draw_rectangle (window, _gdk_fb_screen_gc, TRUE, x, y, width, height);
-      else
-       {
-         /* GDK_PARENT_RELATIVE_BG, but no pixmap, get the color from the parent window. */
-         GdkGC *gc;
-         GdkGCValues values;
-         values.foreground = GDK_WINDOW_P (relto)->bg_color;
-         gc = gdk_gc_new_with_values (window, &values, GDK_GC_FOREGROUND);
-         gdk_draw_rectangle (window, gc, TRUE, x, y, width, height);
-         gdk_gc_unref (gc);
-       }
-    }
-}
-
-/* What's the diff? */
-void
-_gdk_windowing_window_clear_area_e (GdkWindow *window,
-                                   gint       x,
-                                   gint       y,
-                                   gint       width,
-                                   gint       height)
-{
-  _gdk_windowing_window_clear_area (window, x, y, width, height);
-}
-
-static void
-gdk_fb_window_raise (GdkWindow *window)
-{
-  GdkWindowObject *parent;
-
-  parent = GDK_WINDOW_OBJECT (window)->parent;
-
-  parent->children = g_list_remove (parent->children, window);
-  parent->children = g_list_prepend (parent->children, window);
-}
-
-static void
-gdk_fb_window_lower (GdkWindow *window)
-{
-  GdkWindowObject *parent;
-
-  parent = GDK_WINDOW_OBJECT (window)->parent;
-
-  parent->children = g_list_remove (parent->children, window);
-  parent->children = g_list_append (parent->children, window);
-}
-
-
-void
-gdk_window_raise (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  gdk_fb_window_raise (window);
-  
-  if (GDK_WINDOW_OBJECT (window)->parent)
-    gdk_window_invalidate_rect (window, NULL, TRUE);
-}
-
-void
-gdk_window_lower (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  gdk_fb_window_lower (window);
-  
-  if (GDK_WINDOW_OBJECT (window)->parent)
-    gdk_window_invalidate_rect (window, NULL, TRUE);
-}
-
-void
-gdk_window_set_hints (GdkWindow *window,
-                     gint       x,
-                     gint       y,
-                     gint       min_width,
-                     gint       min_height,
-                     gint       max_width,
-                     gint       max_height,
-                     gint       flags)
-{
-}
-
-void 
-gdk_window_set_geometry_hints (GdkWindow      *window,
-                              GdkGeometry    *geometry,
-                              GdkWindowHints  geom_mask)
-{
-}
-
-void
-gdk_window_set_title (GdkWindow   *window,
-                     const gchar *title)
-{
-}
-
-void          
-gdk_window_set_role (GdkWindow   *window,
-                    const gchar *role)
-{
-}
-
-void          
-gdk_window_set_transient_for (GdkWindow *window, 
-                             GdkWindow *parent)
-{
-  GdkWindowObject *private = GDK_WINDOW_OBJECT (window);
-  GdkWindowObject *root = GDK_WINDOW_OBJECT (_gdk_parent_root);
-  int i;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  g_return_if_fail (parent != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (parent));
-  
-  g_return_if_fail ((GdkWindow *)private->parent == _gdk_parent_root);
-  g_return_if_fail ((GdkWindow *)GDK_WINDOW_OBJECT (parent)->parent == _gdk_parent_root);
-  
-  root->children = g_list_remove (root->children, window);
-
-  i = g_list_index (root->children, parent);
-  if (i<0)
-    root->children = g_list_prepend (root->children, window);
-  else 
-    root->children = g_list_insert (root->children, window, i);
-}
-
-void
-gdk_window_set_background (GdkWindow      *window,
-                          const GdkColor *color)
-{
-  GdkWindowObject *private = (GdkWindowObject *)window;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  private->bg_color = *color;
-
-  if (private->bg_pixmap &&
-      private->bg_pixmap != GDK_PARENT_RELATIVE_BG &&
-      private->bg_pixmap != GDK_NO_BG)
-    {
-      gdk_pixmap_unref (private->bg_pixmap);
-      private->bg_pixmap = NULL;
-    }
-}
-
-void
-gdk_window_set_back_pixmap (GdkWindow *window,
-                           GdkPixmap *pixmap,
-                           gboolean   parent_relative)
-{
-  GdkWindowObject *private = (GdkWindowObject *)window;
-  GdkPixmap *old_pixmap;
-
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  g_return_if_fail (pixmap == NULL || !parent_relative);
-  g_return_if_fail (pixmap == NULL || gdk_drawable_get_depth (window) == gdk_drawable_get_depth (pixmap));
-
-  if (pixmap && !gdk_drawable_get_colormap (pixmap))
-    {
-      g_warning ("gdk_window_set_back_pixmap(): pixmap must have a colormap");
-      return;
-    }
-  
-  old_pixmap = private->bg_pixmap;
-
-  if (parent_relative)
-    {
-      private->bg_pixmap = GDK_PARENT_RELATIVE_BG;
-    }
-  else
-    {
-      if (pixmap)
-       {
-         gdk_pixmap_ref (pixmap);
-         private->bg_pixmap = pixmap;
-       }
-      else
-       {
-         private->bg_pixmap = GDK_NO_BG;
-       }
-    }
-
-  if (old_pixmap &&
-      old_pixmap != GDK_PARENT_RELATIVE_BG &&
-      old_pixmap != GDK_NO_BG)
-    gdk_pixmap_unref (old_pixmap);
-}
-
-void
-gdk_window_set_cursor (GdkWindow *window,
-                      GdkCursor *cursor)
-{
-  GdkCursor *old_cursor = GDK_WINDOW_IMPL_FBDATA(window)->cursor;
-  GdkRectangle window_reg;
-
-  GDK_WINDOW_IMPL_FBDATA (window)->cursor = cursor ? gdk_cursor_ref (cursor) : NULL;
-
-  if (old_cursor)
-    gdk_cursor_unref (old_cursor);
-
-  window_reg.x = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_x;
-  window_reg.y = GDK_DRAWABLE_IMPL_FBDATA (window)->llim_y;
-  window_reg.width = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_x - window_reg.x;
-  window_reg.height = GDK_DRAWABLE_IMPL_FBDATA (window)->lim_y - window_reg.y;
-  if (gdk_fb_cursor_need_hide (&window_reg))
-    gdk_fb_cursor_reset ();
-}
-
-void
-gdk_window_get_geometry (GdkWindow *window,
-                        gint      *x,
-                        gint      *y,
-                        gint      *width,
-                        gint      *height,
-                        gint      *depth)
-{
-  GdkWindowObject *private = (GdkWindowObject *)window;
-  
-  g_return_if_fail (window == NULL || GDK_IS_WINDOW (window));
-  
-  if (!window)
-    window = _gdk_parent_root;
-  
-  if (!private->destroyed)
-    {
-
-      if (x)
-       *x = private->x;
-      if (y)
-       *y = private->y;
-      if (width)
-       *width = GDK_DRAWABLE_IMPL_FBDATA (window)->width;
-      if (height)
-       *height = GDK_DRAWABLE_IMPL_FBDATA (window)->height;
-      if (depth)
-       *depth = gdk_display->modeinfo.bits_per_pixel;
-    }
-}
-
-gboolean
-gdk_window_get_origin (GdkWindow *window,
-                      gint      *x,
-                      gint      *y)
-{
-  g_return_val_if_fail (window != NULL, FALSE);
-  
-  if (x)
-    *x = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x;
-  if (y)
-    *y = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y;
-
-  return TRUE;
-}
-
-gboolean
-gdk_window_get_deskrelative_origin (GdkWindow *window,
-                                   gint      *x,
-                                   gint      *y)
-{
-  gint tx = 0;
-  gint ty = 0;
-  gboolean return_val;
-
-  g_return_val_if_fail (window != NULL, 0);
-  
-  if (!GDK_WINDOW_DESTROYED (window))
-    {
-      tx = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x;
-      ty = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y;
-
-      return_val = TRUE;
-    }
-  else
-    return_val = FALSE;
-  
-  if (x)
-    *x = tx;
-  if (y)
-    *y = ty;
-
-  return return_val;
-}
-
-void
-gdk_window_get_root_origin (GdkWindow *window,
-                           gint      *x,
-                           gint      *y)
-{
-  gdk_window_get_deskrelative_origin (window, x, y);
-}
-
-static GdkRegion*
-gdk_window_fb_get_visible_region (GdkDrawable *drawable)
-{
-  GdkDrawableFBData *priv = GDK_DRAWABLE_FBDATA (drawable);
-  GdkRectangle result_rect;
-  GdkRectangle screen_rect;
-
-  result_rect.x = 0;
-  result_rect.y = 0;
-  result_rect.width = priv->width;
-  result_rect.height = priv->height;
-
-  screen_rect.x = -priv->abs_x;
-  screen_rect.y = -priv->abs_y;
-  screen_rect.width = gdk_display->fb_width;
-  screen_rect.height = gdk_display->fb_height;
-  
-  gdk_rectangle_intersect (&result_rect, &screen_rect, &result_rect);
-  
-  return gdk_region_rectangle (&result_rect);
-}
-
-GdkWindow *
-_gdk_windowing_window_get_pointer (GdkDisplay      *display,
-                                  GdkWindow       *window,
-                                  gint            *x,
-                                  gint            *y,
-                                  GdkModifierType *mask)
-{
-  GdkWindow *return_val;
-  int winx = 0;
-  int winy = 0;
-  int x_int, y_int;
-  gint shape_dx, shape_dy;
-  GdkRegion *shape;
-
-  g_return_val_if_fail (window == NULL || GDK_IS_WINDOW (window), NULL);
-  
-  gdk_window_get_root_origin (window, &x_int, &y_int);
-  gdk_fb_mouse_get_info (&winx, &winy, mask);
-
-  winx -= x_int;
-  winy -= y_int;
-
-  *x = winx;
-  *y = winy;
-  
-  return_val = NULL;
-  
-  shape = gdk_fb_window_peek_shape (window, &shape_dx, &shape_dy);
-  if ((winx >= 0) && (winx < GDK_DRAWABLE_IMPL_FBDATA (window)->width) &&
-      (winy >= 0) && (winy < GDK_DRAWABLE_IMPL_FBDATA (window)->height) &&
-      (!shape || gdk_region_point_in (shape, winx - shape_dx, winy - shape_dy)))
-    {
-      GdkWindowObject *private;
-      GdkWindowObject *sub;
-      int subx = winx, suby = winy;
-
-      for (private = sub = (GdkWindowObject *)window; sub; private = sub)
-       {
-         GList *ltmp;
-
-         for (ltmp = private->children; ltmp; ltmp = ltmp->next)
-           {
-             sub = ltmp->data;
-
-             if (!GDK_WINDOW_IS_MAPPED (sub))
-               continue;
-
-             shape = gdk_fb_window_peek_shape (GDK_WINDOW (sub),
-                                               &shape_dx, &shape_dy);
-             if (subx >= sub->x &&
-                 (subx < (GDK_DRAWABLE_IMPL_FBDATA (sub)->width + sub->x)) &&
-                 (suby >= sub->y) &&
-                 (suby < (GDK_DRAWABLE_IMPL_FBDATA (sub)->height + sub->y)) &&
-                 (!shape || gdk_region_point_in (shape, subx - sub->x - shape_dx, suby - sub->y - shape_dy)))
-               {
-                 subx -= sub->x;
-                 suby -= sub->y;
-                 break;
-               }
-           }
-
-         if (!ltmp)
-           {
-             sub = NULL;
-             break;
-           }
-       }
-
-      return_val = (GdkWindow *)private;
-    }
-
-  if (!return_val)
-    return_val = _gdk_parent_root;
-
-  return return_val;
-}
-
-void
-_gdk_windowing_get_pointer (GdkDisplay       *display,
-                           GdkScreen       **screen,
-                           gint             *x,
-                           gint             *y,
-                           GdkModifierType  *mask)
-{
-  GdkScreen *default_screen = gdk_display_get_default_screen (display);
-  GdkWindow *root_window = gdk_screen_get_root_window (default_screen);
-  
-  *screen = default_screen;
-  _gdk_windowing_window_get_pointer (display, root_window, x, y, mask);
-}
-
-GdkWindow*
-_gdk_windowing_window_at_pointer (GdkDisplay *display,
-                                 gint       *win_x,
-                                 gint       *win_y)
-{
-  gint rx, ry;
-  GdkWindow *retval = gdk_window_get_pointer (NULL, win_x, win_y, NULL);
-
-  if (retval)
-    {
-      gdk_window_get_origin (retval, &ry, &rx);
-      (*win_x) -= rx;
-      (*win_y) -= ry;
-    }
-
-  return retval;
-}
-
-GdkEventMask  
-gdk_window_get_events (GdkWindow *window)
-{
-  g_return_val_if_fail (window != NULL, 0);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), 0);
-
-  if (GDK_WINDOW_DESTROYED (window))
-    return 0;
-  else
-    return GDK_WINDOW_OBJECT (window)->event_mask;
-}
-
-void          
-gdk_window_set_events (GdkWindow       *window,
-                      GdkEventMask     event_mask)
-{
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  if (event_mask & GDK_BUTTON_MOTION_MASK)
-    event_mask |=
-      GDK_BUTTON1_MOTION_MASK | GDK_BUTTON2_MOTION_MASK |
-      GDK_BUTTON3_MOTION_MASK;
-  
-  GDK_WINDOW_OBJECT (window)->event_mask = GDK_STRUCTURE_MASK | event_mask;
-}
-
-void
-gdk_window_add_colormap_windows (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-  /* N/A */
-}
-
-
-GdkRegion*
-gdk_fb_region_create_from_bitmap (GdkBitmap *bitmap)
-{
-  GdkDrawableFBData *private;
-  GdkRegion *region;
-  GdkRectangle rect;
-  gboolean in_rect;
-  gint x;
-  guchar bit_mask;
-  guchar *src;
-
-  g_return_val_if_fail(bitmap != NULL, NULL);
-  g_return_val_if_fail(GDK_IS_PIXMAP(bitmap), NULL);
-
-  private = GDK_DRAWABLE_IMPL_FBDATA (bitmap);
-
-  g_return_val_if_fail(private->depth == 1, NULL);
-
-  region = gdk_region_new();
-
-  rect.height = 1;
-
-  in_rect = FALSE; /* Haven't started a rectangle yet */
-
-  for (rect.y = 0; rect.y < private->height; (rect.y)++)
-    {
-      src = private->mem + rect.y * private->rowstride;
-      bit_mask = 1;
-      for (x = 0; x < private->width; x++)
-       {
-         if ((*src & bit_mask) && !in_rect)
-           {
-             /* Start of rect */
-             in_rect = TRUE;
-             rect.x = x;
-           }
-         else if (!(*src & bit_mask) && in_rect)
-           {
-             /* End of rect */
-             in_rect = FALSE;
-             rect.width = x - rect.x;
-             gdk_region_union_with_rect (region, &rect);
-           }
-         
-         if (bit_mask == 1<<7)
-           {
-             bit_mask = 1;
-             src++;
-           }
-         else
-           bit_mask <<= 1;
-       }
-      
-      if (in_rect)
-       {
-         /* Past end of line */
-         in_rect = FALSE;
-         rect.width = x - rect.x;
-         gdk_region_union_with_rect (region, &rect);
-       }
-    }
-
-  return region;
-}
-
-GdkRegion *
-gdk_fb_window_peek_shape (GdkDrawable *window, gint *dx, gint *dy)
-{
-  gint x, y;
-  
-  if (!GDK_IS_WINDOW (window))
-    return NULL;
-
-  if (GDK_WINDOW_IMPL_FBDATA (window)->shape == NULL)
-    return NULL;
-
-  x = y = 0;
-  
-  while (GDK_WINDOW_IMPL_FBDATA (window)->shape == GDK_FB_USE_CHILD_SHAPE)
-    {
-      GList *children;
-      children = ((GdkWindowObject*)window)->children;
-      if (children)
-       {
-         window = (GdkDrawable *)children->data;
-         x += GDK_WINDOW_P(window)->x;
-         y += GDK_WINDOW_P(window)->y;
-       }
-      else
-       return NULL;
-    }
-
-  *dx = x;
-  *dy = y;
-  
-  return GDK_WINDOW_IMPL_FBDATA (window)->shape;
-}
-GdkRegion *
-gdk_fb_window_get_abs_shape (GdkDrawable *window)
-{
-  GdkRegion *shape;
-  
-  if (!GDK_IS_WINDOW (window))
-    return NULL;
-
-  if (GDK_WINDOW_IMPL_FBDATA (window)->shape == NULL)
-    return NULL;
-  
-  if (GDK_WINDOW_IMPL_FBDATA (window)->shape == GDK_FB_USE_CHILD_SHAPE)
-    {
-      GList *children;
-      children = ((GdkWindowObject*)window)->children;
-      if (children)
-       return gdk_fb_window_get_abs_shape ((GdkDrawable *)children->data);
-      else
-       return NULL;
-    }
-
-  shape = gdk_region_copy (GDK_WINDOW_IMPL_FBDATA (window)->shape);
-  gdk_region_offset (shape,
-                    GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x,
-                    GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y);
-  return shape;
-}
-
-
-static void
-_gdk_window_shape_combine_region (GdkWindow *window,
-                                 GdkRegion *shape,
-                                 gint       x,
-                                 gint       y)
-{
-  GdkWindowFBData *private;
-  GdkDrawableFBData *drawable_private;
-  GdkRegion *old_region = NULL;
-  GdkRegion *new_region = NULL;
-  GdkRectangle rect;
-  
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = GDK_WINDOW_IMPL_FBDATA (window);
-  drawable_private = GDK_DRAWABLE_IMPL_FBDATA (window);
-
-  if (GDK_WINDOW_IS_MAPPED (window))
-    {
-      old_region = gdk_fb_window_get_abs_shape (window);
-      if (old_region == NULL)
-       {
-         rect.x = drawable_private->llim_x;
-         rect.y = drawable_private->llim_y;
-         rect.width = drawable_private->lim_x - rect.x;
-         rect.height = drawable_private->lim_y - rect.y;
-         old_region = gdk_region_rectangle (&rect);
-       }
-    }
-
-  if (private->shape && private->shape != GDK_FB_USE_CHILD_SHAPE)
-    gdk_region_destroy (private->shape);
-
-  if (shape)
-    {
-      private->shape = shape;
-      if (shape != GDK_FB_USE_CHILD_SHAPE)
-       gdk_region_offset (private->shape, x, y);
-    }
-  else
-    private->shape = NULL;
-
-  if (GDK_WINDOW_IS_MAPPED (window))
-    {
-      new_region = gdk_fb_window_get_abs_shape (window);
-      if (new_region == NULL)
-       {
-         rect.x = drawable_private->llim_x;
-         rect.y = drawable_private->llim_y;
-         rect.width = drawable_private->lim_x - rect.x;
-         rect.height = drawable_private->lim_y - rect.y;
-         new_region = gdk_region_rectangle (&rect);
-       }
-
-      gdk_region_subtract (old_region, new_region);
-      gdk_region_destroy (new_region);
-      gdk_window_invalidate_region (_gdk_parent_root, old_region, TRUE);
-      gdk_region_destroy (old_region);
-    }
-}
-
-void
-gdk_window_shape_combine_mask (GdkWindow *window,
-                              GdkBitmap *mask,
-                              gint x, gint y)
-{
-  _gdk_window_shape_combine_region (window,
-                                   (mask == GDK_FB_USE_CHILD_SHAPE)?
-                                   GDK_FB_USE_CHILD_SHAPE :
-                                   mask ?
-                                   gdk_fb_region_create_from_bitmap (mask) :
-                                   NULL,
-                                   x, y);
-}
-
-void
-gdk_window_shape_combine_region (GdkWindow *window,
-                                 GdkRegion *shape,
-                                 gint       x,
-                                 gint       y)
-{
-  _gdk_window_shape_combine_region (window,
-                                   gdk_region_copy (shape),
-                                   x, y);
-}
-
-void
-gdk_window_set_override_redirect (GdkWindow *window,
-                                 gboolean override_redirect)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /* N/A */
-}
-
-void
-gdk_window_set_accept_focus (GdkWindow *window,
-                            gboolean accept_focus)
-{
-  GdkWindowObject *private;
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowObject *)window;  
-  
-  accept_focus = accept_focus != FALSE;
-
-  if (private->accept_focus != accept_focus)
-    private->accept_focus = accept_focus;
-}
-
-void
-gdk_window_set_focus_on_map (GdkWindow *window,
-                            gboolean focus_on_map)
-{
-  GdkWindowObject *private;
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  private = (GdkWindowObject *)window;  
-  
-  focus_on_map = focus_on_map != FALSE;
-
-  if (private->focus_on_map != focus_on_map)
-    private->focus_on_map = focus_on_map;
-}
-
-void          
-gdk_window_set_icon (GdkWindow *window, 
-                    GdkWindow *icon_window,
-                    GdkPixmap *pixmap,
-                    GdkBitmap *mask)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /* N/A */
-}
-
-void          
-gdk_window_set_icon_name (GdkWindow *window, 
-                         const gchar *    name)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /* N/A */
-}
-
-void          
-gdk_window_set_group (GdkWindow *window, 
-                     GdkWindow *leader)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  g_return_if_fail (leader != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (leader));
-
-  /* N/A */
-}
-
-void
-gdk_fb_window_set_child_handler (GdkWindow             *window,
-                                GdkWindowChildChanged  changed,
-                                GdkWindowChildGetPos   get_pos,
-                                gpointer               user_data)
-{
-  GdkWindowChildHandlerData *data;
-    
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  data = g_new (GdkWindowChildHandlerData, 1);
-  data->changed = changed;
-  data->get_pos = get_pos;
-  data->user_data = user_data;
-
-  g_object_set_data_full (G_OBJECT (window), "gdk-window-child-handler",
-                         data, (GDestroyNotify) g_free);
-}
-
-void
-gdk_window_set_decorations (GdkWindow      *window,
-                           GdkWMDecoration decorations)
-{
-  GdkWMDecoration *dec;
-    
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  dec = g_new (GdkWMDecoration, 1);
-  *dec = decorations;
-
-  g_object_set_data_full (G_OBJECT (window), "gdk-window-decorations",
-                         dec, (GDestroyNotify) g_free);
-}
-
-gboolean
-gdk_window_get_decorations(GdkWindow *window,
-                          GdkWMDecoration *decorations)
-{
-  GdkWMDecoration *dec;
-    
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-
-
-  dec = g_object_get_data (G_OBJECT (window), "gdk-window-decorations");
-  if (dec)
-    {
-      *decorations = *dec;
-      return TRUE;
-    }
-  return FALSE;
-}
-
-void
-gdk_window_set_functions (GdkWindow    *window,
-                         GdkWMFunction functions)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /* N/A */
-}
-
-void
-gdk_window_set_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-}
-
-void
-gdk_window_merge_child_shapes (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-}
-
-/*************************************************************
- * gdk_window_set_static_gravities:
- *     Set the bit gravity of the given window to static,
- *     and flag it so all children get static subwindow
- *     gravity.
- *   arguments:
- *     window: window for which to set static gravity
- *     use_static: Whether to turn static gravity on or off.
- *   results:
- *     Does the XServer support static gravity?
- *************************************************************/
-
-gboolean 
-gdk_window_set_static_gravities (GdkWindow *window,
-                                gboolean   use_static)
-{
-  g_return_val_if_fail (window != NULL, FALSE);
-  g_return_val_if_fail (GDK_IS_WINDOW (window), FALSE);
-  
-  return TRUE;
-}
-
-void
-_gdk_windowing_window_get_offsets      (GdkWindow  *window,
-                                       gint       *x_offset,
-                                       gint       *y_offset)
-{
-  *x_offset = *y_offset = 0;
-}
-
-gboolean
-_gdk_windowing_window_queue_antiexpose (GdkWindow  *window,
-                                       GdkRegion  *area)
-{
-  return FALSE;
-}
-
-void
-gdk_window_stick (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_unstick (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_maximize (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  gdk_synthesize_window_state (window,
-                              0,
-                              GDK_WINDOW_STATE_MAXIMIZED);
-}
-
-void
-gdk_window_unmaximize (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  gdk_synthesize_window_state (window,
-                              GDK_WINDOW_STATE_MAXIMIZED,
-                              0);
-}
-
-void
-gdk_window_iconify (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_iconify() not implemented.\n");
-}
-
-void
-gdk_window_deiconify (GdkWindow *window)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /*  g_warning ("gdk_window_deiconify() not implemented.\n");*/
-}
-
-void
-gdk_window_fullscreen (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_fullscreen() not implemented.\n");
-}
-
-void
-gdk_window_unfullscreen (GdkWindow *window)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  /*  g_warning ("gdk_window_unfullscreen() not implemented.\n");*/
-}
-
-void
-gdk_window_set_keep_above (GdkWindow *window, gboolean setting)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_set_keep_above() not implemented.\n");
-}
-
-void
-gdk_window_set_keep_below (GdkWindow *window, gboolean setting)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_set_keep_below() not implemented.\n");
-}
-
-void
-gdk_window_focus (GdkWindow *window,
-                  guint32    timestamp)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-
-  g_warning ("gdk_window_focus() not implemented.\n");
-}
-
-void
-gdk_window_set_type_hint (GdkWindow        *window,
-                         GdkWindowTypeHint hint)
-{
-  g_return_if_fail (window != NULL);
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_set_modal_hint (GdkWindow *window,
-                          gboolean   modal)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_set_skip_taskbar_hint (GdkWindow *window,
-                                 gboolean   skips_taskbar)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_set_skip_pager_hint (GdkWindow *window,
-                               gboolean   skips_pager)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_begin_resize_drag (GdkWindow     *window,
-                              GdkWindowEdge  edge,
-                              gint           button,
-                              gint           root_x,
-                              gint           root_y,
-                              guint32        timestamp)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-  
-}
-
-void
-gdk_window_begin_move_drag (GdkWindow *window,
-                            gint       button,
-                            gint       root_x,
-                            gint       root_y,
-                            guint32    timestamp)
-{
-  g_return_if_fail (GDK_IS_WINDOW (window));
-}
-
-void
-gdk_window_set_icon_list (GdkWindow *window,
-                         GList     *pixbufs)
-{
-  /* We don't support icons right now */
-}
-
-/* No need to care about frames. Decoration is done by GtkWindow */
-void
-gdk_window_get_frame_extents (GdkWindow    *window,
-                              GdkRectangle *rect)
-{
-  g_return_if_fail (window != NULL);
-  
-  rect->x = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_x;
-  rect->y = GDK_DRAWABLE_IMPL_FBDATA (window)->abs_y;
-  rect->width = GDK_DRAWABLE_IMPL_FBDATA (window)->width;
-  rect->height = GDK_DRAWABLE_IMPL_FBDATA (window)->height;
-}
-
-GdkWindow*
-gdk_window_foreign_new_for_display (GdkDisplay      *display,
-                                   GdkNativeWindow  anid)
-{
-  return (GdkWindow*) gdk_drawable_ref ((GdkDrawable *)anid);
-}
-
-GdkWindow*
-gdk_window_lookup (GdkNativeWindow anid)
-{
-  return (GdkWindow*) (anid);
-}
-
-GdkWindow *
-gdk_window_lookup_for_display (GdkDisplay *display, GdkNativeWindow anid)
-{
-  g_return_val_if_fail (display == gdk_display_get_default(), NULL);
-
-  return (GdkWindow*) (anid);
-}
-
-void
-gdk_window_enable_synchronized_configure (GdkWindow *window)
-{
-}
-
-void
-gdk_window_configure_finished (GdkWindow *window)
-{
-}
diff --git a/gdk/linux-fb/mi.h b/gdk/linux-fb/mi.h
deleted file mode 100644 (file)
index b651797..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-#ifndef MI_H
-#define MI_H 1
-
-#include "mitypes.h"
-#include "mistruct.h"
-#include "mifpoly.h"
-#include "mifillarc.h"
-#include "mipoly.h"
-
-void miPolyArc(GdkDrawable *pDraw, GdkGC *pGC, int narcs, miArc *parcs);
-void miPolyFillArc(GdkDrawable *pDraw, GdkGC *pGC, int narcs, miArc *parcs);
-void miFillPolygon(GdkDrawable *dst, GdkGC *pgc, int shape, int mode, int count, GdkPoint *pPts);
-
-miDashPtr miDashLine(int npt, GdkPoint *ppt, unsigned int nDash, unsigned char *pDash, unsigned int offset, int *pnseg);
-void miZeroLine(GdkDrawable *pDraw, GdkGC *pGC, int mode, int npt, GdkPoint *pptInit);
-void miZeroDashLine(GdkDrawable *dst, GdkGC *pgc, int mode, int nptInit, GdkPoint *pptInit);
-void miStepDash (int dist, int *pDashIndex, unsigned char *pDash, int numInDashList, int *pDashOffset);
-void miWideDash (GdkDrawable *pDrawable, GdkGC *pGC, int mode, int npt, GdkPoint *pPts);
-void miWideLine (GdkDrawable *pDrawable, GdkGC *pGC, int mode, int npt, GdkPoint *pPts);
-
-#endif
diff --git a/gdk/linux-fb/miarc.c b/gdk/linux-fb/miarc.c
deleted file mode 100644 (file)
index ea237d9..0000000
+++ /dev/null
@@ -1,3470 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/miarc.c,v 3.7 1999/12/27 00:39:56 robin Exp $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: miarc.c /main/91 1998/02/09 14:45:57 kaleb $ */
-/* Author: Keith Packard and Bob Scheifler */
-/* Warning: this code is toxic, do not dally very long here. */
-
-#define _XOPEN_SOURCE_EXTENDED /* to get prototype for cbrt on some systems */
-#define _XOPEN_SOURCE          /* to get prototype for hypot on some systems */
-
-#include <config.h>
-#include <string.h>            /* memmove */
-#include <limits.h>
-
-#include <math.h>
-
-#include "mi.h"
-#include "gdkprivate-fb.h"
-
-static double miDsin(double a), miDcos(double a), miDasin(double a), miDatan2(double x, double y);
-
-#ifdef ICEILTEMPDECL
-ICEILTEMPDECL
-#endif
-
-/*
- * some interesting sematic interpretation of the protocol:
- *
- * Self intersecting arcs (i.e. those spanning 360 degrees) 
- *  never join with other arcs, and are drawn without caps
- *  (unless on/off dashed, in which case each dash segment
- *  is capped, except when the last segment meets the
- *  first segment, when no caps are drawn)
- *
- * double dash arcs are drawn in two parts, first the
- *  odd dashes (drawn in background) then the even dashes
- *  (drawn in foreground).  This means that overlapping
- *  sections of foreground/background are drawn twice,
- *  first in background then in foreground.  The double-draw
- *  occurs even when the function uses the destination values
- *  (e.g. xor mode).  This is the same way the wide-line
- *  code works and should be "fixed".
- *
- */
-
-#undef max
-#undef min
-
-#if defined (__GNUC__) && defined (__STDC__) && !defined (__STRICT_ANSI__)
-#define USE_INLINE
-#endif
-
-struct bound {
-       double  min, max;
-};
-
-struct ibound {
-       int     min, max;
-};
-
-#define boundedLe(value, bounds)\
-       ((bounds).min <= (value) && (value) <= (bounds).max)
-
-struct line {
-       double  m, b;
-       int     valid;
-};
-
-#define intersectLine(y,line) (line.m * (y) + line.b)
-
-/*
- * these are all y value bounds
- */
-
-struct arc_bound {
-       struct bound    ellipse;
-       struct bound    inner;
-       struct bound    outer;
-       struct bound    right;
-       struct bound    left;
-       struct ibound   inneri;
-       struct ibound   outeri;
-};
-
-struct accelerators {
-       double          tail_y;
-       double          h2;
-       double          w2;
-       double          h4;
-       double          w4;
-       double          h2mw2;
-       double          h2l;
-       double          w2l;
-       double          fromIntX;
-       double          fromIntY;
-       struct line     left, right;
-       int             yorgu;
-       int             yorgl;
-       int             xorg;
-};
-
-struct arc_def {
-       double  w, h, l;
-       double  a0, a1;
-};
-
-# define todeg(xAngle) (((double) (xAngle)) / 64.0)
-
-# define RIGHT_END     0
-# define LEFT_END      1
-
-typedef struct _miArcJoin {
-       int     arcIndex0, arcIndex1;
-       int     phase0, phase1;
-       int     end0, end1;
-} miArcJoinRec, *miArcJoinPtr;
-
-typedef struct _miArcCap {
-       int             arcIndex;
-       int             end;            
-} miArcCapRec, *miArcCapPtr;
-
-typedef struct _miArcFace {
-       SppPointRec     clock;
-       SppPointRec     center;
-       SppPointRec     counterClock;
-} miArcFaceRec, *miArcFacePtr;
-
-typedef struct _miArcData {
-       miArc           arc;
-       int             render;         /* non-zero means render after drawing */
-       int             join;           /* related join */
-       int             cap;            /* related cap */
-       int             selfJoin;       /* final dash meets first dash */
-       miArcFaceRec    bounds[2];
-       double          x0, y0, x1, y1;
-} miArcDataRec, *miArcDataPtr;
-
-/*
- * This is an entire sequence of arcs, computed and categorized according
- * to operation.  miDashArcs generates either one or two of these.
- */
-
-typedef struct _miPolyArc {
-       int             narcs;
-       miArcDataPtr    arcs;
-       int             ncaps;
-       miArcCapPtr     caps;
-       int             njoins;
-       miArcJoinPtr    joins;
-} miPolyArcRec, *miPolyArcPtr;
-
-typedef struct {
-    short lx, lw, rx, rw;
-} miArcSpan;
-
-typedef struct {
-    miArcSpan *spans;
-    int count1, count2, k;
-    char top, bot, hole;
-} miArcSpanData;
-
-typedef struct {
-    unsigned long lrustamp;
-    unsigned short lw;
-    unsigned short width, height;
-    miArcSpanData *spdata;
-} arcCacheRec;
-
-# define DASH_MAP_SIZE 91
-
-typedef struct {
-       double  map[DASH_MAP_SIZE];
-} dashMap;
-
-static void fillSpans(GdkDrawable *pDrawable, GdkGC *pGC);
-static void newFinalSpan(int y, int xmin, int xmax);
-static void drawArc (miArc *tarc, int l, int a0, int a1, miArcFacePtr right, miArcFacePtr left);
-static void drawQuadrant(struct arc_def *def, struct accelerators *acc,
-                        int a0, int a1, int mask, miArcFacePtr right, miArcFacePtr left,
-                        miArcSpanData *spdata);
-static void drawZeroArc(GdkDrawable *pDraw, GdkGC *pGC, miArc *tarc, int lw, miArcFacePtr right, miArcFacePtr left);
-static void miArcJoin(GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pRight, miArcFacePtr pLeft, int xOrgRight, int yOrgRight,
-                     double xFtransRight, double yFtransRight,
-                     int xOrgLeft, int yOrgLeft,
-                     double xFtransLeft, double yFtransLeft);
-static void miArcCap(GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pFace, int end, int xOrg, int yOrg,
-                    double xFtrans, double yFtrans);
-static void miRoundCap(GdkDrawable *pDraw, GdkGC *pGC, SppPointRec pCenter, SppPointRec pEnd, SppPointRec pCorner,
-                      SppPointRec pOtherCorner, int fLineEnd, int xOrg, int yOrg,
-                      double xFtrans, double yFtrans);
-static void miFreeArcs(miPolyArcPtr arcs, GdkGC *pGC);
-static int computeAngleFromPath(int startAngle, int endAngle, dashMap *map, int *lenp, int backwards);
-static miPolyArcPtr miComputeArcs (miArc *parcs, int narcs, GdkGC *gc);
-static int miGetArcPts(SppArcPtr parc, int cpt, SppPointPtr *ppPts);
-
-# define CUBED_ROOT_2  1.2599210498948732038115849718451499938964
-# define CUBED_ROOT_4  1.5874010519681993173435330390930175781250
-
-/*
- * draw one segment of the arc using the arc spans generation routines
- */
-
-static void
-miArcSegment(GdkDrawable *pDraw, GdkGC *pGC, miArc tarc, miArcFacePtr right, miArcFacePtr left)
-{
-    int l = GDK_GC_FBDATA(pGC)->values.line_width;
-    int a0, a1, startAngle, endAngle;
-    miArcFacePtr       temp;
-
-    if (!l)
-       l = 1;
-
-    if (tarc.width == 0 || tarc.height == 0) {
-       drawZeroArc (pDraw, pGC, &tarc, l, left, right);
-       return;
-    }
-
-    a0 = tarc.angle1;
-    a1 = tarc.angle2;
-    if (a1 > FULLCIRCLE)
-       a1 = FULLCIRCLE;
-    else if (a1 < -FULLCIRCLE)
-       a1 = -FULLCIRCLE;
-    if (a1 < 0) {
-       startAngle = a0 + a1;
-       endAngle = a0;
-       temp = right;
-       right = left;
-       left = temp;
-    } else {
-       startAngle = a0;
-       endAngle = a0 + a1;
-    }
-    /*
-     * bounds check the two angles
-     */
-    if (startAngle < 0)
-       startAngle = FULLCIRCLE - (-startAngle) % FULLCIRCLE;
-    if (startAngle >= FULLCIRCLE)
-       startAngle = startAngle % FULLCIRCLE;
-    if (endAngle < 0)
-       endAngle = FULLCIRCLE - (-endAngle) % FULLCIRCLE;
-    if (endAngle > FULLCIRCLE)
-       endAngle = (endAngle-1) % FULLCIRCLE + 1;
-    if ((startAngle == endAngle) && a1) {
-       startAngle = 0;
-       endAngle = FULLCIRCLE;
-    }
-
-    drawArc (&tarc, l, startAngle, endAngle, right, left);
-}
-
-/*
-
-Three equations combine to describe the boundaries of the arc
-
-x^2/w^2 + y^2/h^2 = 1                  ellipse itself
-(X-x)^2 + (Y-y)^2 = r^2                        circle at (x, y) on the ellipse
-(Y-y) = (X-x)*w^2*y/(h^2*x)            normal at (x, y) on the ellipse
-
-These lead to a quartic relating Y and y
-
-y^4 - (2Y)y^3 + (Y^2 + (h^4 - w^2*r^2)/(w^2 - h^2))y^2
-    - (2Y*h^4/(w^2 - h^2))y + (Y^2*h^4)/(w^2 - h^2) = 0
-
-The reducible cubic obtained from this quartic is
-
-z^3 - (3N)z^2 - 2V = 0
-
-where
-
-N = (Y^2 + (h^4 - w^2*r^2/(w^2 - h^2)))/6
-V = w^2*r^2*Y^2*h^4/(4 *(w^2 - h^2)^2)
-
-Let
-
-t = z - N
-p = -N^2
-q = -N^3 - V
-
-Then we get
-
-t^3 + 3pt + 2q = 0
-
-The discriminant of this cubic is
-
-D = q^2 + p^3
-
-When D > 0, a real root is obtained as
-
-z = N + cbrt(-q+sqrt(D)) + cbrt(-q-sqrt(D))
-
-When D < 0, a real root is obtained as
-
-z = N - 2m*cos(acos(-q/m^3)/3)
-
-where
-
-m = sqrt(|p|) * sign(q)
-
-Given a real root Z of the cubic, the roots of the quartic are the roots
-of the two quadratics
-
-y^2 + ((b+A)/2)y + (Z + (bZ - d)/A) = 0
-
-where 
-
-A = +/- sqrt(8Z + b^2 - 4c)
-b, c, d are the cubic, quadratic, and linear coefficients of the quartic
-
-Some experimentation is then required to determine which solutions
-correspond to the inner and outer boundaries.
-
-*/
-
-#define CACHESIZE 25
-
-static arcCacheRec arcCache[CACHESIZE];
-static unsigned long lrustamp;
-static arcCacheRec *lastCacheHit = &arcCache[0];
-
-#if 0
-static RESTYPE cacheType;
-
-/*
- * External so it can be called when low on memory.
- * Call with a zero ID in that case.
- */
-/*ARGSUSED*/
-int
-miFreeArcCache (data, id)
-    gpointer       data;
-    guint                  id;
-{
-    int k;
-    arcCacheRec *cent;
-
-    if (id)
-       cacheType = 0;
-
-    for (k = CACHESIZE, cent = &arcCache[0]; --k >= 0; cent++)
-    {
-       if (cent->spdata)
-       {
-           cent->lrustamp = 0;
-           cent->lw = 0;
-           g_free(cent->spdata);
-           cent->spdata = NULL;
-       }
-    }
-    lrustamp = 0;
-    return TRUE;
-}
-#endif
-
-static void
-miComputeCircleSpans(int lw, miArc *parc, miArcSpanData *spdata)
-{
-    register miArcSpan *span;
-    int doinner;
-    register int x, y, e;
-    int xk, yk, xm, ym, dx, dy;
-    register int slw, inslw;
-    int inx = 0, iny, ine = 0;
-    int inxk = 0, inyk = 0, inxm = 0, inym = 0;
-
-    doinner = -lw;
-    slw = parc->width - doinner;
-    y = parc->height >> 1;
-    dy = parc->height & 1;
-    dx = 1 - dy;
-    MIWIDEARCSETUP(x, y, dy, slw, e, xk, xm, yk, ym);
-    inslw = parc->width + doinner;
-    if (inslw > 0)
-    {
-       spdata->hole = spdata->top;
-       MIWIDEARCSETUP(inx, iny, dy, inslw, ine, inxk, inxm, inyk, inym);
-    }
-    else
-    {
-       spdata->hole = FALSE;
-       doinner = -y;
-    }
-    spdata->count1 = -doinner - spdata->top;
-    spdata->count2 = y + doinner;
-    span = spdata->spans;
-    while (y)
-    {
-       MIFILLARCSTEP(slw);
-       span->lx = dy - x;
-       if (++doinner <= 0)
-       {
-           span->lw = slw;
-           span->rx = 0;
-           span->rw = span->lx + slw;
-       }
-       else
-       {
-           MIFILLINARCSTEP(inslw);
-           span->lw = x - inx;
-           span->rx = dy - inx + inslw;
-           span->rw = inx - x + slw - inslw;
-       }
-       span++;
-    }
-    if (spdata->bot)
-    {
-       if (spdata->count2)
-           spdata->count2--;
-       else
-       {
-           if (lw > (int)parc->height)
-               span[-1].rx = span[-1].rw = -((lw - (int)parc->height) >> 1);
-           else
-               span[-1].rw = 0;
-           spdata->count1--;
-       }
-    }
-}
-
-static void
-miComputeEllipseSpans(int lw, miArc *parc, miArcSpanData *spdata)
-{
-    register miArcSpan *span;
-    double w, h, r, xorg;
-    double Hs, Hf, WH, K, Vk, Nk, Fk, Vr, N, Nc, Z, rs;
-    double A, T, b, d, x, y, t, inx, outx = 0.0, hepp, hepm;
-    int flip, solution;
-
-    w = (double)parc->width / 2.0;
-    h = (double)parc->height / 2.0;
-    r = lw / 2.0;
-    rs = r * r;
-    Hs = h * h;
-    WH = w * w - Hs;
-    Nk = w * r;
-    Vk = (Nk * Hs) / (WH + WH);
-    Hf = Hs * Hs;
-    Nk = (Hf - Nk * Nk) / WH;
-    Fk = Hf / WH;
-    hepp = h + EPSILON;
-    hepm = h - EPSILON;
-    K = h + ((lw - 1) >> 1);
-    span = spdata->spans;
-    if (parc->width & 1)
-       xorg = .5;
-    else
-       xorg = 0.0;
-    if (spdata->top)
-    {
-       span->lx = 0;
-       span->lw = 1;
-       span++;
-    }
-    spdata->count1 = 0;
-    spdata->count2 = 0;
-    spdata->hole = (spdata->top &&
-                (int)parc->height * lw <= (int)(parc->width * parc->width) &&
-                   lw < (int)parc->height);
-    for (; K > 0.0; K -= 1.0)
-    {
-       N = (K * K + Nk) / 6.0;
-       Nc = N * N * N;
-       Vr = Vk * K;
-       t = Nc + Vr * Vr;
-       d = Nc + t;
-       if (d < 0.0) {
-           d = Nc;
-           b = N;
-           if ( (b < 0.0) == (t < 0.0) )
-           {
-               b = -b;
-               d = -d;
-           }
-           Z = N - 2.0 * b * cos(acos(-t / d) / 3.0);
-           if ( (Z < 0.0) == (Vr < 0.0) )
-               flip = 2;
-           else
-               flip = 1;
-       }
-       else
-       {
-           d = Vr * sqrt(d);
-           Z = N + cbrt(t + d) + cbrt(t - d);
-           flip = 0;
-       }
-       A = sqrt((Z + Z) - Nk);
-       T = (Fk - Z) * K / A;
-       inx = 0.0;
-       solution = FALSE;
-       b = -A + K;
-       d = b * b - 4 * (Z + T);
-       if (d >= 0)
-       {
-           d = sqrt(d);
-           y = (b + d) / 2;
-           if ((y >= 0.0) && (y < hepp))
-           {
-               solution = TRUE;
-               if (y > hepm)
-                   y = h;
-               t = y / h;
-               x = w * sqrt(1 - (t * t));
-               t = K - y;
-               if (rs - (t * t) >= 0)
-                  t = sqrt(rs - (t * t));
-               else
-                  t = 0;
-               if (flip == 2)
-                   inx = x - t;
-               else
-                   outx = x + t;
-           }
-       }
-       b = A + K;
-       d = b * b - 4 * (Z - T);
-       /* Because of the large magnitudes involved, we lose enough precision
-        * that sometimes we end up with a negative value near the axis, when
-        * it should be positive.  This is a workaround.
-        */
-       if (d < 0 && !solution)
-           d = 0.0;
-       if (d >= 0) {
-           d = sqrt(d);
-           y = (b + d) / 2;
-           if (y < hepp)
-           {
-               if (y > hepm)
-                   y = h;
-               t = y / h;
-               x = w * sqrt(1 - (t * t));
-               t = K - y;
-               if (rs - (t * t) >= 0)
-                  inx = x - sqrt(rs - (t * t));
-               else
-                  inx = x;
-           }
-           y = (b - d) / 2;
-           if (y >= 0.0)
-           {
-               if (y > hepm)
-                   y = h;
-               t = y / h;
-               x = w * sqrt(1 - (t * t));
-               t = K - y;
-               if (rs - (t * t) >= 0)
-                  t = sqrt(rs - (t * t));
-               else 
-                  t = 0;
-               if (flip == 1)
-                   inx = x - t;
-               else
-                   outx = x + t;
-           }
-       }
-       span->lx = ICEIL(xorg - outx);
-       if (inx <= 0.0)
-       {
-           spdata->count1++;
-           span->lw = ICEIL(xorg + outx) - span->lx;
-           span->rx = ICEIL(xorg + inx);
-           span->rw = -ICEIL(xorg - inx);
-       }
-       else
-       {
-           spdata->count2++;
-           span->lw = ICEIL(xorg - inx) - span->lx;
-           span->rx = ICEIL(xorg + inx);
-           span->rw = ICEIL(xorg + outx) - span->rx;
-       }
-       span++;
-    }
-    if (spdata->bot)
-    {
-       outx = w + r;
-       if (r >= h && r <= w)
-           inx = 0.0;
-       else if (Nk < 0.0 && -Nk < Hs)
-       {
-           inx = w * sqrt(1 + Nk / Hs) - sqrt(rs + Nk);
-           if (inx > w - r)
-               inx = w - r;
-       }
-       else
-           inx = w - r;
-       span->lx = ICEIL(xorg - outx);
-       if (inx <= 0.0)
-       {
-           span->lw = ICEIL(xorg + outx) - span->lx;
-           span->rx = ICEIL(xorg + inx);
-           span->rw = -ICEIL(xorg - inx);
-       }
-       else
-       {
-           span->lw = ICEIL(xorg - inx) - span->lx;
-           span->rx = ICEIL(xorg + inx);
-           span->rw = ICEIL(xorg + outx) - span->rx;
-       }
-    }
-    if (spdata->hole)
-    {
-       span = &spdata->spans[spdata->count1];
-       span->lw = -span->lx;
-       span->rx = 1;
-       span->rw = span->lw;
-       spdata->count1--;
-       spdata->count2++;
-    }
-}
-
-static double
-tailX(double K, struct arc_def *def, struct arc_bound *bounds, struct accelerators *acc)
-{
-    double w, h, r;
-    double Hs, Hf, WH, Vk, Nk, Fk, Vr, N, Nc, Z, rs;
-    double A, T, b, d, x, y, t, hepp, hepm;
-    int flip, solution;
-    double xs[2];
-    double *xp;
-
-    w = def->w;
-    h = def->h;
-    r = def->l;
-    rs = r * r;
-    Hs = acc->h2;
-    WH = -acc->h2mw2;
-    Nk = def->w * r;
-    Vk = (Nk * Hs) / (WH + WH);
-    Hf = acc->h4;
-    Nk = (Hf - Nk * Nk) / WH;
-    if (K == 0.0) {
-       if (Nk < 0.0 && -Nk < Hs) {
-           xs[0] = w * sqrt(1 + Nk / Hs) - sqrt(rs + Nk);
-           xs[1] = w - r;
-           if (acc->left.valid && boundedLe(K, bounds->left) &&
-               !boundedLe(K, bounds->outer) && xs[0] >= 0.0 && xs[1] >= 0.0)
-               return xs[1];
-           if (acc->right.valid && boundedLe(K, bounds->right) &&
-               !boundedLe(K, bounds->inner) && xs[0] <= 0.0 && xs[1] <= 0.0)
-               return xs[1];
-           return xs[0];
-       }
-       return w - r;
-    }
-    Fk = Hf / WH;
-    hepp = h + EPSILON;
-    hepm = h - EPSILON;
-    N = (K * K + Nk) / 6.0;
-    Nc = N * N * N;
-    Vr = Vk * K;
-    xp = xs;
-    xs[0] = 0.0;
-    t = Nc + Vr * Vr;
-    d = Nc + t;
-    if (d < 0.0) {
-       d = Nc;
-       b = N;
-       if ( (b < 0.0) == (t < 0.0) )
-       {
-           b = -b;
-           d = -d;
-       }
-       Z = N - 2.0 * b * cos(acos(-t / d) / 3.0);
-       if ( (Z < 0.0) == (Vr < 0.0) )
-           flip = 2;
-       else
-           flip = 1;
-    }
-    else
-    {
-       d = Vr * sqrt(d);
-       Z = N + cbrt(t + d) + cbrt(t - d);
-       flip = 0;
-    }
-    A = sqrt((Z + Z) - Nk);
-    T = (Fk - Z) * K / A;
-    solution = FALSE;
-    b = -A + K;
-    d = b * b - 4 * (Z + T);
-    if (d >= 0 && flip == 2)
-    {
-       d = sqrt(d);
-       y = (b + d) / 2;
-       if ((y >= 0.0) && (y < hepp))
-       {
-           solution = TRUE;
-           if (y > hepm)
-               y = h;
-           t = y / h;
-           x = w * sqrt(1 - (t * t));
-           t = K - y;
-           if (rs - (t * t) >= 0)
-              t = sqrt(rs - (t * t));
-           else
-              t = 0;
-           *xp++ = x - t;
-       }
-    }
-    b = A + K;
-    d = b * b - 4 * (Z - T);
-    /* Because of the large magnitudes involved, we lose enough precision
-     * that sometimes we end up with a negative value near the axis, when
-     * it should be positive.  This is a workaround.
-     */
-    if (d < 0 && !solution)
-       d = 0.0;
-    if (d >= 0) {
-       d = sqrt(d);
-       y = (b + d) / 2;
-       if (y < hepp)
-       {
-           if (y > hepm)
-               y = h;
-           t = y / h;
-           x = w * sqrt(1 - (t * t));
-           t = K - y;
-           if (rs - (t * t) >= 0)
-              *xp++ = x - sqrt(rs - (t * t));
-           else
-              *xp++ = x;
-       }
-       y = (b - d) / 2;
-       if (y >= 0.0 && flip == 1)
-       {
-           if (y > hepm)
-               y = h;
-           t = y / h;
-           x = w * sqrt(1 - (t * t));
-           t = K - y;
-           if (rs - (t * t) >= 0)
-              t = sqrt(rs - (t * t));
-           else
-              t = 0;
-           *xp++ = x - t;
-       }
-    }
-    if (xp > &xs[1]) {
-       if (acc->left.valid && boundedLe(K, bounds->left) &&
-           !boundedLe(K, bounds->outer) && xs[0] >= 0.0 && xs[1] >= 0.0)
-           return xs[1];
-       if (acc->right.valid && boundedLe(K, bounds->right) &&
-           !boundedLe(K, bounds->inner) && xs[0] <= 0.0 && xs[1] <= 0.0)
-           return xs[1];
-    }
-    return xs[0];
-}
-
-static miArcSpanData *
-miComputeWideEllipse(int lw, miArc *parc, gboolean *mustFree)
-{
-    register miArcSpanData *spdata;
-    register arcCacheRec *cent, *lruent;
-    register int k;
-    arcCacheRec fakeent;
-
-    if (!lw)
-       lw = 1;
-    if (parc->height <= 1500)
-    {
-       *mustFree = FALSE;
-       cent = lastCacheHit;
-       if (cent->lw == lw &&
-           cent->width == parc->width && cent->height == parc->height)
-       {
-           cent->lrustamp = ++lrustamp;
-           return cent->spdata;
-       }
-       lruent = &arcCache[0];
-       for (k = CACHESIZE, cent = lruent; --k >= 0; cent++)
-       {
-           if (cent->lw == lw &&
-               cent->width == parc->width && cent->height == parc->height)
-           {
-               cent->lrustamp = ++lrustamp;
-               lastCacheHit = cent;
-               return cent->spdata;
-           }
-           if (cent->lrustamp < lruent->lrustamp)
-               lruent = cent;
-       }
-#if 0
-       if (!cacheType)
-       {
-           cacheType = CreateNewResourceType(miFreeArcCache);
-           (void) AddResource(FakeClientID(0), cacheType, NULL);
-       }
-#endif 
-    } else {
-       lruent = &fakeent;
-       lruent->spdata = NULL;
-       *mustFree = TRUE;
-    }
-    k = (parc->height >> 1) + ((lw - 1) >> 1);
-    spdata = lruent->spdata;
-    if (!spdata || spdata->k != k)
-    {
-       g_free(spdata);
-       spdata = (miArcSpanData *)g_malloc(sizeof(miArcSpanData) +
-                                        sizeof(miArcSpan) * (k + 2));
-       lruent->spdata = spdata;
-       if (!spdata)
-       {
-           lruent->lrustamp = 0;
-           lruent->lw = 0;
-           return spdata;
-       }
-       spdata->spans = (miArcSpan *)(spdata + 1);
-       spdata->k = k;
-    }
-    spdata->top = !(lw & 1) && !(parc->width & 1);
-    spdata->bot = !(parc->height & 1);
-    lruent->lrustamp = ++lrustamp;
-    lruent->lw = lw;
-    lruent->width = parc->width;
-    lruent->height = parc->height;
-    if (lruent != &fakeent)
-       lastCacheHit = lruent;
-    if (parc->width == parc->height)
-       miComputeCircleSpans(lw, parc, spdata);
-    else
-       miComputeEllipseSpans(lw, parc, spdata);
-    return spdata;
-}
-
-static void
-miFillWideEllipse(GdkDrawable *pDraw, GdkGC *pGC, miArc *parc)
-{
-    GdkSpan* points;
-    register GdkSpan* pts;
-    miArcSpanData *spdata;
-    gboolean mustFree;
-    register miArcSpan *span;
-    register int xorg, yorgu, yorgl;
-    register int n;
-
-    yorgu = parc->height + GDK_GC_FBDATA(pGC)->values.line_width;
-    points = ALLOCATE_LOCAL(sizeof(GdkSpan) * yorgu * 2);
-    spdata = miComputeWideEllipse(GDK_GC_FBDATA(pGC)->values.line_width, parc, &mustFree);
-    if (!spdata)
-    {
-       DEALLOCATE_LOCAL(points);
-       return;
-    }
-    pts = points;
-    span = spdata->spans;
-    xorg = parc->x + (parc->width >> 1);
-    yorgu = parc->y + (parc->height >> 1);
-    yorgl = yorgu + (parc->height & 1);
-    yorgu -= spdata->k;
-    yorgl += spdata->k;
-    if (spdata->top)
-    {
-       pts->x = xorg;
-       pts->y = yorgu - 1;
-       pts->width = 1;
-       pts++;
-       span++;
-    }
-    for (n = spdata->count1; --n >= 0; )
-    {
-       pts[0].x = xorg + span->lx;
-       pts[0].y = yorgu;
-       pts[0].width = span->lw;
-       pts[1] = pts[0];
-       pts[1].y = yorgl;
-       yorgu++;
-       yorgl--;
-       pts += 2;
-       span++;
-    }
-    if (spdata->hole)
-    {
-       pts[0].x = xorg;
-       pts[0].y = yorgl;
-       pts[0].width = 1;
-       pts++;
-    }
-    for (n = spdata->count2; --n >= 0; )
-    {
-       pts[0].x = xorg + span->lx;
-       pts[0].y = yorgu;
-       pts[0].width = span->lw;
-
-       pts[1].x = xorg + span->rx;
-       pts[1].y = pts[0].y;
-       pts[1].width = span->rw;
-
-       pts[2].x = pts[0].x;
-       pts[2].y = yorgl;
-       pts[2].width = pts[0].width;
-
-       pts[3].x = pts[1].x;
-       pts[3].y = pts[2].y;
-       pts[3].width = pts[1].width;
-
-       yorgu++;
-       yorgl--;
-       pts += 4;
-       span++;
-    }
-    if (spdata->bot)
-    {
-       if (span->rw <= 0)
-       {
-           pts[0].x = xorg + span->lx;
-           pts[0].y = yorgu;
-           pts[0].width = span->lw;
-           pts++;
-       }
-       else
-       {
-           pts[0].x = xorg + span->lx;
-           pts[0].y = yorgu;
-           pts[0].width = span->lw;
-           pts[1].x = xorg + span->rx;
-           pts[1].y = pts[0].y;
-           pts[1].width = span->rw;
-           pts += 2;
-       }
-    }
-    if (mustFree)
-       g_free(spdata);
-
-    gdk_fb_fill_spans(pDraw, pGC, points, pts - points, FALSE);
-
-    DEALLOCATE_LOCAL(points);
-}
-
-/*
- * miPolyArc strategy:
- *
- * If arc is zero width and solid, we don't have to worry about the rasterop
- * or join styles.  For wide solid circles, we use a fast integer algorithm.
- * For wide solid ellipses, we use special case floating point code.
- * Otherwise, we set up pDrawTo and pGCTo according to the rasterop, then
- * draw using pGCTo and pDrawTo.  If the raster-op was "tricky," that is,
- * if it involves the destination, then we use PushPixels to move the bits
- * from the scratch drawable to pDraw. (See the wide line code for a
- * fuller explanation of this.)
- */
-
-void
-miPolyArc(GdkDrawable *pDraw, GdkGC *pGC, int narcs, miArc *parcs)
-{
-    register int               i;
-    miArc                      *parc;
-    int                                xMin, xMax, yMin, yMax;
-    int                                pixmapWidth = 0, pixmapHeight = 0;
-    int                                xOrg = 0, yOrg = 0;
-    int                                width;
-    gboolean                   fTricky;
-    GdkDrawable*               pDrawTo;
-    GdkColor                   fg, bg;
-    GdkGC*                     pGCTo;
-    miPolyArcPtr               polyArcs;
-    int                                cap[2], join[2];
-    int                                iphase;
-    int                                halfWidth;
-    GdkGCValues gcv;
-
-    width = GDK_GC_FBDATA(pGC)->values.line_width;
-    if(width == 0 && GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_SOLID)
-    {
-       for(i = narcs, parc = parcs; --i >= 0; parc++)
-           miArcSegment( pDraw, pGC, *parc,
-           (miArcFacePtr) 0, (miArcFacePtr) 0 );
-       fillSpans (pDraw, pGC);
-    }
-    else 
-    {
-       if ((GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_SOLID) && narcs)
-       {
-           while (parcs->width && parcs->height &&
-                  (parcs->angle2 >= FULLCIRCLE ||
-                   parcs->angle2 <= -FULLCIRCLE))
-           {
-               miFillWideEllipse(pDraw, pGC, parcs);
-               if (!--narcs)
-                   return;
-               parcs++;
-           }
-       }
-
-       /* Set up pDrawTo and pGCTo based on the rasterop */
-       switch(GDK_GC_FBDATA(pGC)->alu)
-       {
-         case GDK_CLEAR:               /* 0 */
-         case GDK_COPY:                /* src */
-         case GDK_COPY_INVERT: /* NOT src */
-         case GDK_SET:         /* 1 */
-           fTricky = FALSE;
-           pDrawTo = pDraw;
-           pGCTo = pGC;
-           break;
-         default:
-           fTricky = TRUE;
-
-           /* find bounding box around arcs */
-           xMin = yMin = SHRT_MAX;
-           xMax = yMax = SHRT_MIN;
-
-           for(i = narcs, parc = parcs; --i >= 0; parc++)
-           {
-               xMin = MIN (xMin, parc->x);
-               yMin = MIN (yMin, parc->y);
-               xMax = MAX (xMax, (parc->x + (int) parc->width));
-               yMax = MAX (yMax, (parc->y + (int) parc->height));
-           }
-
-           /* expand box to deal with line widths */
-           halfWidth = (width + 1)/2;
-           xMin -= halfWidth;
-           yMin -= halfWidth;
-           xMax += halfWidth;
-           yMax += halfWidth;
-
-           /* compute pixmap size; limit it to size of drawable */
-           xOrg = MAX(xMin, 0);
-           yOrg = MAX(yMin, 0);
-           pixmapWidth = MIN(xMax, GDK_DRAWABLE_FBDATA(pDraw)->width) - xOrg;
-           pixmapHeight = MIN(yMax, GDK_DRAWABLE_FBDATA(pDraw)->height) - yOrg;
-
-           /* if nothing left, return */
-           if ( (pixmapWidth <= 0) || (pixmapHeight <= 0) ) return;
-
-           for(i = narcs, parc = parcs; --i >= 0; parc++)
-           {
-               parc->x -= xOrg;
-               parc->y -= yOrg;
-           }
-
-           /* set up scratch GC */
-           /* allocate a 1 bit deep pixmap of the appropriate size, and
-            * validate it */
-           pDrawTo = gdk_pixmap_new(NULL, pixmapWidth, pixmapHeight, 1);
-           if (!pDrawTo)
-             return;
-
-           pGCTo = gdk_gc_new(pDrawTo);
-           if (!pGCTo)
-             {
-               gdk_pixmap_unref(pDrawTo);
-               return;
-             }
-           gdk_gc_set_function(pGCTo, GDK_COPY);
-           memset(&gcv.background, 0, sizeof(GdkColor));
-           gcv.foreground.pixel = 1;
-           gcv.foreground.red = gcv.foreground.green = gcv.foreground.blue = 1;
-           gdk_gc_set_foreground(pGCTo, &gcv.foreground);
-           gdk_gc_set_background(pGCTo, &gcv.background);
-           gdk_gc_set_line_attributes(pGCTo,
-                                      GDK_GC_FBDATA(pGC)->values.line_width,
-                                      GDK_GC_FBDATA(pGC)->values.line_style,
-                                      GDK_GC_FBDATA(pGC)->values.cap_style,
-                                      GDK_GC_FBDATA(pGC)->values.join_style);
-           gdk_fb_drawable_clear(pDrawTo);
-       }
-
-       fg = GDK_GC_FBDATA(pGC)->values.foreground;
-       bg = GDK_GC_FBDATA(pGC)->values.background;
-       if ((GDK_GC_FBDATA(pGC)->values.fill == GDK_TILED) ||
-           (GDK_GC_FBDATA(pGC)->values.fill == GDK_OPAQUE_STIPPLED))
-           bg = fg; /* the protocol sez these don't cause color changes */
-
-       polyArcs = miComputeArcs (parcs, narcs, pGC);
-
-       if (!polyArcs)
-       {
-           if (fTricky) {
-             gdk_pixmap_unref(pDrawTo);
-             gdk_gc_unref(pGCTo);
-           }
-           return;
-       }
-
-       cap[0] = cap[1] = 0;
-       join[0] = join[1] = 0;
-       for (iphase = ((GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH) ? 1 : 0);
-            iphase >= 0;
-            iphase--)
-       {
-           if (iphase == 1)
-             gdk_gc_set_foreground(pGC, &bg);
-           else if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH)
-             gdk_gc_set_foreground(pGC, &fg);
-           for (i = 0; i < polyArcs[iphase].narcs; i++) {
-               miArcDataPtr    arcData;
-
-               arcData = &polyArcs[iphase].arcs[i];
-               miArcSegment(pDrawTo, pGCTo, arcData->arc,
-                            &arcData->bounds[RIGHT_END],
-                            &arcData->bounds[LEFT_END]);
-               if (polyArcs[iphase].arcs[i].render) {
-                   fillSpans (pDrawTo, pGCTo);
-                   /*
-                    * don't cap self-joining arcs
-                    */
-                   if (polyArcs[iphase].arcs[i].selfJoin &&
-                       cap[iphase] < polyArcs[iphase].arcs[i].cap)
-                       cap[iphase]++;
-                   while (cap[iphase] < polyArcs[iphase].arcs[i].cap) {
-                       int     arcIndex, end;
-                       miArcDataPtr    arcData0;
-
-                       arcIndex = polyArcs[iphase].caps[cap[iphase]].arcIndex;
-                       end = polyArcs[iphase].caps[cap[iphase]].end;
-                       arcData0 = &polyArcs[iphase].arcs[arcIndex];
-                       miArcCap (pDrawTo, pGCTo,
-                                 &arcData0->bounds[end], end,
-                                 arcData0->arc.x, arcData0->arc.y,
-                                 (double) arcData0->arc.width / 2.0,
-                                 (double) arcData0->arc.height / 2.0);
-                       ++cap[iphase];
-                   }
-                   while (join[iphase] < polyArcs[iphase].arcs[i].join) {
-                       int     arcIndex0, arcIndex1, end0, end1;
-                       int     phase0, phase1;
-                       miArcDataPtr    arcData0, arcData1;
-                       miArcJoinPtr    joinp;
-
-                       joinp = &polyArcs[iphase].joins[join[iphase]];
-                       arcIndex0 = joinp->arcIndex0;
-                       end0 = joinp->end0;
-                       arcIndex1 = joinp->arcIndex1;
-                       end1 = joinp->end1;
-                       phase0 = joinp->phase0;
-                       phase1 = joinp->phase1;
-                       arcData0 = &polyArcs[phase0].arcs[arcIndex0];
-                       arcData1 = &polyArcs[phase1].arcs[arcIndex1];
-                       miArcJoin (pDrawTo, pGCTo,
-                                 &arcData0->bounds[end0],
-                                 &arcData1->bounds[end1],
-                                 arcData0->arc.x, arcData0->arc.y,
-                                 (double) arcData0->arc.width / 2.0,
-                                 (double) arcData0->arc.height / 2.0,
-                                 arcData1->arc.x, arcData1->arc.y,
-                                 (double) arcData1->arc.width / 2.0,
-                                 (double) arcData1->arc.height / 2.0);
-                       ++join[iphase];
-                   }
-                   if (fTricky) {
-                     gdk_fb_draw_drawable(pDraw, pGC, pDrawTo, 0, 0, xOrg, yOrg, pixmapWidth, pixmapHeight);
-                     gdk_fb_drawable_clear(pDrawTo);
-                   }
-               }
-           }
-       }
-       miFreeArcs(polyArcs, pGC);
-
-       if(fTricky)
-       {
-         gdk_pixmap_unref(pDrawTo);
-         gdk_gc_unref(pGCTo);
-       }
-    }
-}
-
-static double
-angleBetween (SppPointRec center, SppPointRec point1, SppPointRec point2)
-{
-       double  a1, a2, a;
-       
-       /*
-        * reflect from X coordinates back to ellipse
-        * coordinates -- y increasing upwards
-        */
-       a1 = miDatan2 (- (point1.y - center.y), point1.x - center.x);
-       a2 = miDatan2 (- (point2.y - center.y), point2.x - center.x);
-       a = a2 - a1;
-       if (a <= -180.0)
-               a += 360.0;
-       else if (a > 180.0)
-               a -= 360.0;
-       return a;
-}
-
-static void
-translateBounds (miArcFacePtr b, int x, int y, double fx, double fy)
-{
-       fx += x;
-       fy += y;
-       b->clock.x -= fx;
-       b->clock.y -= fy;
-       b->center.x -= fx;
-       b->center.y -= fy;
-       b->counterClock.x -= fx;
-       b->counterClock.y -= fy;
-}
-
-static void
-miArcJoin (GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pLeft, miArcFacePtr pRight,
-          int xOrgLeft, int yOrgLeft, double xFtransLeft, double yFtransLeft,
-          int xOrgRight, int yOrgRight, double xFtransRight, double yFtransRight)
-{
-       SppPointRec     center, corner, otherCorner;
-       SppPointRec     poly[5], e;
-       SppPointPtr     pArcPts;
-       int             cpt;
-       SppArcRec       arc;
-       miArcFaceRec    Right, Left;
-       int             polyLen = 0;
-       int             xOrg, yOrg;
-       double          xFtrans, yFtrans;
-       double          a;
-       double          ae, ac2, ec2, bc2, de;
-       double          width;
-       
-       xOrg = (xOrgRight + xOrgLeft) / 2;
-       yOrg = (yOrgRight + yOrgLeft) / 2;
-       xFtrans = (xFtransLeft + xFtransRight) / 2;
-       yFtrans = (yFtransLeft + yFtransRight) / 2;
-       Right = *pRight;
-       translateBounds (&Right, xOrg - xOrgRight, yOrg - yOrgRight,
-                                xFtrans - xFtransRight, yFtrans - yFtransRight);
-       Left = *pLeft;
-       translateBounds (&Left, xOrg - xOrgLeft, yOrg - yOrgLeft,
-                                xFtrans - xFtransLeft, yFtrans - yFtransLeft);
-       pRight = &Right;
-       pLeft = &Left;
-
-       if (pRight->clock.x == pLeft->counterClock.x &&
-           pRight->clock.y == pLeft->counterClock.y)
-               return;
-       center = pRight->center;
-       if (0 <= (a = angleBetween (center, pRight->clock, pLeft->counterClock))
-           && a <= 180.0)
-       {
-               corner = pRight->clock;
-               otherCorner = pLeft->counterClock;
-       } else {
-               a = angleBetween (center, pLeft->clock, pRight->counterClock);
-               corner = pLeft->clock;
-               otherCorner = pRight->counterClock;
-       }
-       switch (GDK_GC_FBDATA(pGC)->values.join_style) {
-       case GDK_JOIN_ROUND:
-               width = (GDK_GC_FBDATA(pGC)->values.line_width ? (double)GDK_GC_FBDATA(pGC)->values.line_width : (double)1);
-
-               arc.x = center.x - width/2;
-               arc.y = center.y - width/2;
-               arc.width = width;
-               arc.height = width;
-               arc.angle1 = -miDatan2 (corner.y - center.y, corner.x - center.x);
-               arc.angle2 = a;
-               pArcPts = (SppPointPtr) g_malloc (3 * sizeof (SppPointRec));
-               if (!pArcPts)
-                   return;
-               pArcPts[0].x = otherCorner.x;
-               pArcPts[0].y = otherCorner.y;
-               pArcPts[1].x = center.x;
-               pArcPts[1].y = center.y;
-               pArcPts[2].x = corner.x;
-               pArcPts[2].y = corner.y;
-               if( (cpt = miGetArcPts(&arc, 3, &pArcPts)) )
-               {
-                       /* by drawing with miFillSppPoly and setting the endpoints of the arc
-                        * to be the corners, we assure that the cap will meet up with the
-                        * rest of the line */
-                       miFillSppPoly(pDraw, pGC, cpt, pArcPts, xOrg, yOrg, xFtrans, yFtrans);
-               }
-               g_free(pArcPts);
-               return;
-       case GDK_JOIN_MITER:
-               /*
-                * don't miter arcs with less than 11 degrees between them
-                */
-               if (a < 169.0) {
-                       poly[0] = corner;
-                       poly[1] = center;
-                       poly[2] = otherCorner;
-                       bc2 = (corner.x - otherCorner.x) * (corner.x - otherCorner.x) +
-                             (corner.y - otherCorner.y) * (corner.y - otherCorner.y);
-                       ec2 = bc2 / 4;
-                       ac2 = (corner.x - center.x) * (corner.x - center.x) +
-                             (corner.y - center.y) * (corner.y - center.y);
-                       ae = sqrt (ac2 - ec2);
-                       de = ec2 / ae;
-                       e.x = (corner.x + otherCorner.x) / 2;
-                       e.y = (corner.y + otherCorner.y) / 2;
-                       poly[3].x = e.x + de * (e.x - center.x) / ae;
-                       poly[3].y = e.y + de * (e.y - center.y) / ae;
-                       poly[4] = corner;
-                       polyLen = 5;
-                       break;
-               }
-       case GDK_JOIN_BEVEL:
-               poly[0] = corner;
-               poly[1] = center;
-               poly[2] = otherCorner;
-               poly[3] = corner;
-               polyLen = 4;
-               break;
-       }
-       miFillSppPoly (pDraw, pGC, polyLen, poly, xOrg, yOrg, xFtrans, yFtrans);
-}
-
-/*ARGSUSED*/
-static void
-miArcCap (GdkDrawable *pDraw, GdkGC *pGC, miArcFacePtr pFace, int end,
-          int xOrg, int yOrg, double xFtrans, double yFtrans)
-{
-       SppPointRec     corner, otherCorner, center, endPoint, poly[5];
-
-       corner = pFace->clock;
-       otherCorner = pFace->counterClock;
-       center = pFace->center;
-       switch (GDK_GC_FBDATA(pGC)->values.cap_style) {
-       case GDK_CAP_PROJECTING:
-               poly[0].x = otherCorner.x;
-               poly[0].y = otherCorner.y;
-               poly[1].x = corner.x;
-               poly[1].y = corner.y;
-               poly[2].x = corner.x -
-                               (center.y - corner.y);
-               poly[2].y = corner.y +
-                               (center.x - corner.x);
-               poly[3].x = otherCorner.x -
-                               (otherCorner.y - center.y);
-               poly[3].y = otherCorner.y +
-                               (otherCorner.x - center.x);
-               poly[4].x = otherCorner.x;
-               poly[4].y = otherCorner.y;
-               miFillSppPoly (pDraw, pGC, 5, poly, xOrg, yOrg, xFtrans, yFtrans);
-               break;
-       case GDK_CAP_ROUND:
-               /*
-                * miRoundCap just needs these to be unequal.
-                */
-               endPoint = center;
-               endPoint.x = endPoint.x + 100;
-               miRoundCap (pDraw, pGC, center, endPoint, corner, otherCorner, 0,
-                           -xOrg, -yOrg, xFtrans, yFtrans);
-               break;
-       default:
-         break;
-       }
-}
-
-/* MIROUNDCAP -- a private helper function
- * Put Rounded cap on end. pCenter is the center of this end of the line
- * pEnd is the center of the other end of the line. pCorner is one of the
- * two corners at this end of the line.  
- * NOTE:  pOtherCorner must be counter-clockwise from pCorner.
- */
-/*ARGSUSED*/
-static void miRoundCap(GdkDrawable *pDraw, GdkGC *pGC, SppPointRec pCenter, SppPointRec pEnd, SppPointRec pCorner,
-                      SppPointRec pOtherCorner, int fLineEnd, int xOrg, int yOrg,
-                      double xFtrans, double yFtrans)
-{
-    int                cpt;
-    double     width;
-    SppArcRec  arc;
-    SppPointPtr        pArcPts;
-
-    width = (GDK_GC_FBDATA(pGC)->values.line_width ? (double)GDK_GC_FBDATA(pGC)->values.line_width : (double)1);
-
-    arc.x = pCenter.x - width/2;
-    arc.y = pCenter.y - width/2;
-    arc.width = width;
-    arc.height = width;
-    arc.angle1 = -(miDatan2 (pCorner.y - pCenter.y, pCorner.x - pCenter.x));
-    if(PTISEQUAL(pCenter, pEnd))
-       arc.angle2 = - 180.0;
-    else {
-       arc.angle2 = -miDatan2 (pOtherCorner.y - pCenter.y, pOtherCorner.x - pCenter.x) - arc.angle1;
-       if (arc.angle2 < 0)
-           arc.angle2 += 360.0;
-    }
-    pArcPts = (SppPointPtr) NULL;
-    if( (cpt = miGetArcPts(&arc, 0, &pArcPts)) )
-    {
-       /* by drawing with miFillSppPoly and setting the endpoints of the arc
-        * to be the corners, we assure that the cap will meet up with the
-        * rest of the line */
-       miFillSppPoly(pDraw, pGC, cpt, pArcPts, -xOrg, -yOrg, xFtrans, yFtrans);
-    }
-    g_free(pArcPts);
-}
-
-/*
- * To avoid inaccuracy at the cardinal points, use trig functions
- * which are exact for those angles
- */
-
-#ifndef M_PI
-#define M_PI   3.14159265358979323846
-#endif
-#ifndef M_PI_2
-#define M_PI_2 1.57079632679489661923
-#endif
-
-# define Dsin(d)       ((d) == 0.0 ? 0.0 : ((d) == 90.0 ? 1.0 : sin(d*M_PI/180.0)))
-# define Dcos(d)       ((d) == 0.0 ? 1.0 : ((d) == 90.0 ? 0.0 : cos(d*M_PI/180.0)))
-# define mod(a,b)      ((a) >= 0 ? (a) % (b) : (b) - (-a) % (b))
-
-static double
-miDcos (double a)
-{
-       int     i;
-
-       if (floor (a/90) == a/90) {
-               i = (int) (a/90.0);
-               switch (mod (i, 4)) {
-               case 0: return 1;
-               case 1: return 0;
-               case 2: return -1;
-               case 3: return 0;
-               }
-       }
-       return cos (a * M_PI / 180.0);
-}
-
-static double
-miDsin (double a)
-{
-       int     i;
-
-       if (floor (a/90) == a/90) {
-               i = (int) (a/90.0);
-               switch (mod (i, 4)) {
-               case 0: return 0;
-               case 1: return 1;
-               case 2: return 0;
-               case 3: return -1;
-               }
-       }
-       return sin (a * M_PI / 180.0);
-}
-
-static double
-miDasin (double v)
-{
-    if (v == 0)
-       return 0.0;
-    if (v == 1.0)
-       return 90.0;
-    if (v == -1.0)
-       return -90.0;
-    return asin(v) * (180.0 / M_PI);
-}
-
-static double
-miDatan2 (double dy, double dx)
-{
-    if (dy == 0) {
-       if (dx >= 0)
-           return 0.0;
-       return 180.0;
-    } else if (dx == 0) {
-       if (dy > 0)
-           return 90.0;
-       return -90.0;
-    } else if (fabs (dy) == fabs (dx)) {
-       if (dy > 0) {
-           if (dx > 0)
-               return 45.0;
-           return 135.0;
-       } else {
-           if (dx > 0)
-               return 315.0;
-           return 225.0;
-       }
-    } else {
-       return atan2 (dy, dx) * (180.0 / M_PI);
-    }
-}
-
-/* MIGETARCPTS -- Converts an arc into a set of line segments -- a helper
- * routine for filled arc and line (round cap) code.
- * Returns the number of points in the arc.  Note that it takes a pointer
- * to a pointer to where it should put the points and an index (cpt).
- * This procedure allocates the space necessary to fit the arc points.
- * Sometimes it's convenient for those points to be at the end of an existing
- * array. (For example, if we want to leave a spare point to make sectors
- * instead of segments.)  So we pass in the g_malloc()ed chunk that contains the
- * array and an index saying where we should start stashing the points.
- * If there isn't an array already, we just pass in a null pointer and 
- * count on g_realloc() to handle the null pointer correctly.
- */
-static int
-miGetArcPts(SppArcPtr parc, int cpt, SppPointPtr *ppPts)
-#if 0
-    SppArcPtr  parc;   /* points to an arc */
-    int                cpt;    /* number of points already in arc list */
-    SppPointPtr        *ppPts; /* pointer to pointer to arc-list -- modified */
-#endif
-{
-    double     st,     /* Start Theta, start angle */
-                et,    /* End Theta, offset from start theta */
-               dt,     /* Delta Theta, angle to sweep ellipse */
-               cdt,    /* Cos Delta Theta, actually 2 cos(dt) */
-               x0, y0, /* the recurrence formula needs two points to start */
-               x1, y1,
-               x2, y2, /* this will be the new point generated */
-               xc, yc; /* the center point */
-    int                count, i;
-    SppPointPtr        poly;
-    GdkPoint last;             /* last point on integer boundaries */
-
-    /* The spec says that positive angles indicate counterclockwise motion.
-     * Given our coordinate system (with 0,0 in the upper left corner), 
-     * the screen appears flipped in Y.  The easiest fix is to negate the
-     * angles given */
-    
-    st = - parc->angle1;
-
-    et = - parc->angle2;
-
-    /* Try to get a delta theta that is within 1/2 pixel.  Then adjust it
-     * so that it divides evenly into the total.
-     * I'm just using cdt 'cause I'm lazy.
-     */
-    cdt = parc->width;
-    if (parc->height > cdt)
-       cdt = parc->height;
-    cdt /= 2.0;
-    if(cdt <= 0)
-       return 0;
-    if (cdt < 1.0)
-       cdt = 1.0;
-    dt = miDasin ( 1.0 / cdt ); /* minimum step necessary */
-    count = et/dt;
-    count = abs(count) + 1;
-    dt = et/count;     
-    count++;
-
-    cdt = 2 * miDcos(dt);
-    if (!(poly = (SppPointPtr) g_realloc((gpointer)*ppPts,
-                                       (cpt + count) * sizeof(SppPointRec))))
-       return(0);
-    *ppPts = poly;
-
-    xc = parc->width/2.0;              /* store half width and half height */
-    yc = parc->height/2.0;
-    
-    x0 = xc * miDcos(st);
-    y0 = yc * miDsin(st);
-    x1 = xc * miDcos(st + dt);
-    y1 = yc * miDsin(st + dt);
-    xc += parc->x;             /* by adding initial point, these become */
-    yc += parc->y;             /* the center point */
-
-    poly[cpt].x = (xc + x0);
-    poly[cpt].y = (yc + y0);
-    last.x = ROUNDTOINT( poly[cpt + 1].x = (xc + x1) );
-    last.y = ROUNDTOINT( poly[cpt + 1].y = (yc + y1) );
-
-    for(i = 2; i < count; i++)
-    {
-       x2 = cdt * x1 - x0;
-       y2 = cdt * y1 - y0;
-
-       poly[cpt + i].x = (xc + x2);
-       poly[cpt + i].y = (yc + y2);
-
-       x0 = x1; y0 = y1;
-       x1 = x2; y1 = y2;
-    }
-    /* adjust the last point */
-    if (fabs(parc->angle2) >= 360.0)
-       poly[cpt +i -1] = poly[0];
-    else {
-       poly[cpt +i -1].x = (miDcos(st + et) * parc->width/2.0 + xc);
-       poly[cpt +i -1].y = (miDsin(st + et) * parc->height/2.0 + yc);
-    }
-
-    return(count);
-}
-
-struct arcData {
-       double  x0, y0, x1, y1;
-       int     selfJoin;
-};
-
-# define ADD_REALLOC_STEP      20
-
-static void
-addCap (miArcCapPtr *capsp, int *ncapsp, int *sizep, int end, int arcIndex)
-{
-       int newsize;
-       miArcCapPtr     cap;
-
-       if (*ncapsp == *sizep)
-       {
-           newsize = *sizep + ADD_REALLOC_STEP;
-           cap = (miArcCapPtr) g_realloc (*capsp,
-                                         newsize * sizeof (**capsp));
-           if (!cap)
-               return;
-           *sizep = newsize;
-           *capsp = cap;
-       }
-       cap = &(*capsp)[*ncapsp];
-       cap->end = end;
-       cap->arcIndex = arcIndex;
-       ++*ncapsp;
-}
-
-static void
-addJoin (miArcJoinPtr *joinsp, int *njoinsp, int *sizep, int end0, int index0,
-         int phase0, int end1, int index1, int phase1)
-{
-       int newsize;
-       miArcJoinPtr    join;
-
-       if (*njoinsp == *sizep)
-       {
-           newsize = *sizep + ADD_REALLOC_STEP;
-           join = (miArcJoinPtr) g_realloc (*joinsp,
-                                           newsize * sizeof (**joinsp));
-           if (!join)
-               return;
-           *sizep = newsize;
-           *joinsp = join;
-       }
-       join = &(*joinsp)[*njoinsp];
-       join->end0 = end0;
-       join->arcIndex0 = index0;
-       join->phase0 = phase0;
-       join->end1 = end1;
-       join->arcIndex1 = index1;
-       join->phase1 = phase1;
-       ++*njoinsp;
-}
-
-static miArcDataPtr
-addArc (miArcDataPtr *arcsp, int *narcsp, int *sizep, miArc *xarc)
-{
-       int newsize;
-       miArcDataPtr    arc;
-
-       if (*narcsp == *sizep)
-       {
-           newsize = *sizep + ADD_REALLOC_STEP;
-           arc = (miArcDataPtr) g_realloc (*arcsp,
-                                          newsize * sizeof (**arcsp));
-           if (!arc)
-               return (miArcDataPtr)NULL;
-           *sizep = newsize;
-           *arcsp = arc;
-       }
-       arc = &(*arcsp)[*narcsp];
-       arc->arc = *xarc;
-       ++*narcsp;
-       return arc;
-}
-
-static void
-miFreeArcs(miPolyArcPtr arcs, GdkGC *pGC)
-{
-       int iphase;
-
-       for (iphase = ((GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH) ? 1 : 0);
-            iphase >= 0;
-            iphase--)
-       {
-           if (arcs[iphase].narcs > 0)
-               g_free(arcs[iphase].arcs);
-           if (arcs[iphase].njoins > 0)
-               g_free(arcs[iphase].joins);
-           if (arcs[iphase].ncaps > 0)
-               g_free(arcs[iphase].caps);
-       }
-       g_free(arcs);
-}
-
-/*
- * map angles to radial distance.  This only deals with the first quadrant
- */
-
-/*
- * a polygonal approximation to the arc for computing arc lengths
- */
-
-# define dashIndexToAngle(di)  ((((double) (di)) * 90.0) / ((double) DASH_MAP_SIZE - 1))
-# define xAngleToDashIndex(xa) ((((long) (xa)) * (DASH_MAP_SIZE - 1)) / (90 * 64))
-# define dashIndexToXAngle(di) ((((long) (di)) * (90 * 64)) / (DASH_MAP_SIZE - 1))
-# define dashXAngleStep        (((double) (90 * 64)) / ((double) (DASH_MAP_SIZE - 1)))
-
-static void
-computeDashMap (miArc *arcp, dashMap *map)
-{
-       int     di;
-       double  a, x, y, prevx = 0.0, prevy = 0.0, dist;
-
-       for (di = 0; di < DASH_MAP_SIZE; di++) {
-               a = dashIndexToAngle (di);
-               x = ((double) arcp->width / 2.0) * miDcos (a);
-               y = ((double) arcp->height / 2.0) * miDsin (a);
-               if (di == 0) {
-                       map->map[di] = 0.0;
-               } else {
-                       dist = hypot (x - prevx, y - prevy);
-                       map->map[di] = map->map[di - 1] + dist;
-               }
-               prevx = x;
-               prevy = y;
-       }
-}
-
-typedef enum {HORIZONTAL, VERTICAL, OTHER} arcTypes;
-
-/* this routine is a bit gory */
-
-static miPolyArcPtr
-miComputeArcs (miArc *parcs, int narcs, GdkGC *pGC)
-{
-       int             isDashed, isDoubleDash;
-       int             dashOffset;
-       miPolyArcPtr    arcs;
-       int             start, i, j, k = 0, nexti, nextk = 0;
-       int             joinSize[2];
-       int             capSize[2];
-       int             arcSize[2];
-       int             angle2;
-       double          a0, a1;
-       struct arcData  *data;
-       miArcDataPtr    arc;
-       miArc           xarc;
-       int             iphase, prevphase = 0, joinphase;
-       int             arcsJoin;
-       int             selfJoin;
-
-       int             iDash = 0, dashRemaining;
-       int             iDashStart = 0, dashRemainingStart = 0, iphaseStart;
-       int             startAngle, spanAngle, endAngle, backwards = 0;
-       int             prevDashAngle, dashAngle;
-       dashMap         map;
-
-       isDashed = !(GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_SOLID);
-       isDoubleDash = (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH);
-       dashOffset = GDK_GC_FBDATA(pGC)->dash_offset;
-
-       data = (struct arcData *) ALLOCATE_LOCAL (narcs * sizeof (struct arcData));
-       if (!data)
-           return (miPolyArcPtr)NULL;
-       arcs = (miPolyArcPtr) g_malloc (sizeof (*arcs) * (isDoubleDash ? 2 : 1));
-       if (!arcs)
-       {
-           DEALLOCATE_LOCAL(data);
-           return (miPolyArcPtr)NULL;
-       }
-       for (i = 0; i < narcs; i++) {
-               a0 = todeg (parcs[i].angle1);
-               angle2 = parcs[i].angle2;
-               if (angle2 > FULLCIRCLE)
-                       angle2 = FULLCIRCLE;
-               else if (angle2 < -FULLCIRCLE)
-                       angle2 = -FULLCIRCLE;
-               data[i].selfJoin = angle2 == FULLCIRCLE || angle2 == -FULLCIRCLE;
-               a1 = todeg (parcs[i].angle1 + angle2);
-               data[i].x0 = parcs[i].x + (double) parcs[i].width / 2 * (1 + miDcos (a0));
-               data[i].y0 = parcs[i].y + (double) parcs[i].height / 2 * (1 - miDsin (a0));
-               data[i].x1 = parcs[i].x + (double) parcs[i].width / 2 * (1 + miDcos (a1));
-               data[i].y1 = parcs[i].y + (double) parcs[i].height / 2 * (1 - miDsin (a1));
-       }
-
-       for (iphase = 0; iphase < (isDoubleDash ? 2 : 1); iphase++) {
-               arcs[iphase].njoins = 0;
-               arcs[iphase].joins = NULL;
-               joinSize[iphase] = 0;
-               
-               arcs[iphase].ncaps = 0;
-               arcs[iphase].caps = NULL;
-               capSize[iphase] = 0;
-               
-               arcs[iphase].narcs = 0;
-               arcs[iphase].arcs = NULL;
-               arcSize[iphase] = 0;
-       }
-
-       iphase = 0;
-       if (isDashed) {
-               iDash = 0;
-               dashRemaining = GDK_GC_FBDATA(pGC)->dash_list[0];
-               while (dashOffset > 0) {
-                       if (dashOffset >= dashRemaining) {
-                               dashOffset -= dashRemaining;
-                               iphase = iphase ? 0 : 1;
-                               iDash++;
-                               if (iDash == GDK_GC_FBDATA(pGC)->dash_list_len)
-                                   iDash = 0;
-                               dashRemaining = GDK_GC_FBDATA(pGC)->dash_list[iDash];
-                       } else {
-                               dashRemaining -= dashOffset;
-                               dashOffset = 0;
-                       }
-               }
-               iDashStart = iDash;
-               dashRemainingStart = dashRemaining;
-       }
-       iphaseStart = iphase;
-
-       for (i = narcs - 1; i >= 0; i--) {
-               j = i + 1;
-               if (j == narcs)
-                       j = 0;
-               if (data[i].selfJoin || i == j ||
-                    (UNEQUAL (data[i].x1, data[j].x0) ||
-                     UNEQUAL (data[i].y1, data[j].y0)))
-               {
-                       if (iphase == 0 || isDoubleDash)
-                               addCap (&arcs[iphase].caps, &arcs[iphase].ncaps,
-                                       &capSize[iphase], RIGHT_END, 0);
-                       break;
-               }
-       }
-       start = i + 1;
-       if (start == narcs)
-               start = 0;
-       i = start;
-       for (;;) {
-               j = i + 1;
-               if (j == narcs)
-                       j = 0;
-               nexti = i+1;
-               if (nexti == narcs)
-                       nexti = 0;
-               if (isDashed) {
-                       /*
-                       ** deal with dashed arcs.  Use special rules for certain 0 area arcs.
-                       ** Presumably, the other 0 area arcs still aren't done right.
-                       */
-                       arcTypes        arcType = OTHER;
-                       guint16         thisLength;
-
-                       if (parcs[i].height == 0
-                           && (parcs[i].angle1 % FULLCIRCLE) == 0x2d00
-                           && parcs[i].angle2 == 0x2d00) 
-                               arcType = HORIZONTAL;
-                       else if (parcs[i].width == 0
-                           && (parcs[i].angle1 % FULLCIRCLE) == 0x1680
-                           && parcs[i].angle2 == 0x2d00)
-                               arcType = VERTICAL;
-                       if (arcType == OTHER) {
-                               /*
-                                * precompute an approximation map
-                                */
-                               computeDashMap (&parcs[i], &map);
-                               /*
-                                * compute each individual dash segment using the path
-                                * length function
-                                */
-                               startAngle = parcs[i].angle1;
-                               spanAngle = parcs[i].angle2;
-                               if (spanAngle > FULLCIRCLE)
-                                       spanAngle = FULLCIRCLE;
-                               else if (spanAngle < -FULLCIRCLE)
-                                       spanAngle = -FULLCIRCLE;
-                               if (startAngle < 0)
-                                       startAngle = FULLCIRCLE - (-startAngle) % FULLCIRCLE;
-                               if (startAngle >= FULLCIRCLE)
-                                       startAngle = startAngle % FULLCIRCLE;
-                               endAngle = startAngle + spanAngle;
-                               backwards = spanAngle < 0;
-                       } else {
-                               xarc = parcs[i];
-                               if (arcType == VERTICAL) {
-                                       xarc.angle1 = 0x1680;
-                                       startAngle = parcs[i].y;
-                                       endAngle = startAngle + parcs[i].height;
-                               } else {
-                                       xarc.angle1 = 0x2d00;
-                                       startAngle = parcs[i].x;
-                                       endAngle = startAngle + parcs[i].width;
-                               }
-                       }
-                       dashAngle = startAngle;
-                       selfJoin = data[i].selfJoin &&
-                                   (iphase == 0 || isDoubleDash);
-                       /*
-                        * add dashed arcs to each bucket
-                        */
-                       arc = NULL;
-                       while (dashAngle != endAngle) {
-                               prevDashAngle = dashAngle;
-                               if (arcType == OTHER) {
-                                       dashAngle = computeAngleFromPath (prevDashAngle, endAngle,
-                                                               &map, &dashRemaining, backwards);
-                                       /* avoid troubles with huge arcs and small dashes */
-                                       if (dashAngle == prevDashAngle) {
-                                               if (backwards)
-                                                       dashAngle--;
-                                               else
-                                                       dashAngle++;
-                                       }
-                               } else {
-                                       thisLength = (dashAngle + dashRemaining <= endAngle) ? 
-                                           dashRemaining : endAngle - dashAngle;
-                                       if (arcType == VERTICAL) {
-                                               xarc.y = dashAngle;
-                                               xarc.height = thisLength;
-                                       } else {
-                                               xarc.x = dashAngle;
-                                               xarc.width = thisLength;
-                                       }
-                                       dashAngle += thisLength;
-                                       dashRemaining -= thisLength;
-                               }
-                               if (iphase == 0 || isDoubleDash) {
-                                       if (arcType == OTHER) {
-                                               xarc = parcs[i];
-                                               spanAngle = prevDashAngle;
-                                               if (spanAngle < 0)
-                                                   spanAngle = FULLCIRCLE - (-spanAngle) % FULLCIRCLE;
-                                               if (spanAngle >= FULLCIRCLE)
-                                                   spanAngle = spanAngle % FULLCIRCLE;
-                                               xarc.angle1 = spanAngle;
-                                               spanAngle = dashAngle - prevDashAngle;
-                                               if (backwards) {
-                                                       if (dashAngle > prevDashAngle)
-                                                               spanAngle = - FULLCIRCLE + spanAngle;
-                                               } else {
-                                                       if (dashAngle < prevDashAngle)
-                                                               spanAngle = FULLCIRCLE + spanAngle;
-                                               }
-                                               if (spanAngle > FULLCIRCLE)
-                                                   spanAngle = FULLCIRCLE;
-                                               if (spanAngle < -FULLCIRCLE)
-                                                   spanAngle = -FULLCIRCLE;
-                                               xarc.angle2 = spanAngle;
-                                       }
-                                       arc = addArc (&arcs[iphase].arcs, &arcs[iphase].narcs,
-                                                       &arcSize[iphase], &xarc);
-                                       if (!arc)
-                                           goto arcfail;
-                                       /*
-                                        * cap each end of an on/off dash
-                                        */
-                                       if (!isDoubleDash) {
-                                               if (prevDashAngle != startAngle) {
-                                                       addCap (&arcs[iphase].caps,
-                                                               &arcs[iphase].ncaps,
-                                                               &capSize[iphase], RIGHT_END,
-                                                               arc - arcs[iphase].arcs);
-                                                       
-                                               }
-                                               if (dashAngle != endAngle) {
-                                                       addCap (&arcs[iphase].caps,
-                                                               &arcs[iphase].ncaps,
-                                                               &capSize[iphase], LEFT_END,
-                                                               arc - arcs[iphase].arcs);
-                                               }
-                                       }
-                                       arc->cap = arcs[iphase].ncaps;
-                                       arc->join = arcs[iphase].njoins;
-                                       arc->render = 0;
-                                       arc->selfJoin = 0;
-                                       if (dashAngle == endAngle)
-                                               arc->selfJoin = selfJoin;
-                               }
-                               prevphase = iphase;
-                               if (dashRemaining <= 0) {
-                                       ++iDash;
-                                       if (iDash == GDK_GC_FBDATA(pGC)->dash_list_len)
-                                               iDash = 0;
-                                       iphase = iphase ? 0:1;
-                                       dashRemaining = GDK_GC_FBDATA(pGC)->dash_list[iDash];
-                               }
-                       }
-                       /*
-                        * make sure a place exists for the position data when
-                        * drawing a zero-length arc
-                        */
-                       if (startAngle == endAngle) {
-                               prevphase = iphase;
-                               if (!isDoubleDash && iphase == 1)
-                                       prevphase = 0;
-                               arc = addArc (&arcs[prevphase].arcs, &arcs[prevphase].narcs,
-                                             &arcSize[prevphase], &parcs[i]);
-                               if (!arc)
-                                   goto arcfail;
-                               arc->join = arcs[prevphase].njoins;
-                               arc->cap = arcs[prevphase].ncaps;
-                               arc->selfJoin = data[i].selfJoin;
-                       }
-               } else {
-                       arc = addArc (&arcs[iphase].arcs, &arcs[iphase].narcs,
-                                     &arcSize[iphase], &parcs[i]);
-                       if (!arc)
-                           goto arcfail;
-                       arc->join = arcs[iphase].njoins;
-                       arc->cap = arcs[iphase].ncaps;
-                       arc->selfJoin = data[i].selfJoin;
-                       prevphase = iphase;
-               }
-               if (prevphase == 0 || isDoubleDash)
-                       k = arcs[prevphase].narcs - 1;
-               if (iphase == 0 || isDoubleDash)
-                       nextk = arcs[iphase].narcs;
-               if (nexti == start) {
-                       nextk = 0;
-                       if (isDashed) {
-                               iDash = iDashStart;
-                               iphase = iphaseStart;
-                               dashRemaining = dashRemainingStart;
-                       }
-               }
-               arcsJoin = narcs > 1 && i != j &&
-                           ISEQUAL (data[i].x1, data[j].x0) &&
-                           ISEQUAL (data[i].y1, data[j].y0) &&
-                           !data[i].selfJoin && !data[j].selfJoin;
-               if (arc)
-               {
-                       if (arcsJoin)
-                               arc->render = 0;
-                       else
-                               arc->render = 1;
-               }
-               if (arcsJoin &&
-                   (prevphase == 0 || isDoubleDash) &&
-                   (iphase == 0 || isDoubleDash))
-               {
-                       joinphase = iphase;
-                       if (isDoubleDash) {
-                               if (nexti == start)
-                                       joinphase = iphaseStart;
-                               /*
-                                * if the join is right at the dash,
-                                * draw the join in foreground
-                                * This is because the foreground
-                                * arcs are computed second, the results
-                                * of which are needed to draw the join
-                                */
-                               if (joinphase != prevphase)
-                                       joinphase = 0;
-                       }
-                       if (joinphase == 0 || isDoubleDash) {
-                               addJoin (&arcs[joinphase].joins,
-                                        &arcs[joinphase].njoins,
-                                        &joinSize[joinphase],
-                                        LEFT_END, k, prevphase,
-                                        RIGHT_END, nextk, iphase);
-                               arc->join = arcs[prevphase].njoins;
-                       }
-               } else {
-                       /*
-                        * cap the left end of this arc
-                        * unless it joins itself
-                        */
-                       if ((prevphase == 0 || isDoubleDash) &&
-                           !arc->selfJoin)
-                       {
-                               addCap (&arcs[prevphase].caps, &arcs[prevphase].ncaps,
-                                       &capSize[prevphase], LEFT_END, k);
-                               arc->cap = arcs[prevphase].ncaps;
-                       }
-                       if (isDashed && !arcsJoin) {
-                               iDash = iDashStart;
-                               iphase = iphaseStart;
-                               dashRemaining = dashRemainingStart;
-                       }
-                       nextk = arcs[iphase].narcs;
-                       if (nexti == start) {
-                               nextk = 0;
-                               iDash = iDashStart;
-                               iphase = iphaseStart;
-                               dashRemaining = dashRemainingStart;
-                       }
-                       /*
-                        * cap the right end of the next arc.  If the
-                        * next arc is actually the first arc, only
-                        * cap it if it joins with this arc.  This
-                        * case will occur when the final dash segment
-                        * of an on/off dash is off.  Of course, this
-                        * cap will be drawn at a strange time, but that
-                        * hardly matters...
-                        */
-                       if ((iphase == 0 || isDoubleDash) &&
-                           (nexti != start || (arcsJoin && isDashed)))
-                               addCap (&arcs[iphase].caps, &arcs[iphase].ncaps,
-                                       &capSize[iphase], RIGHT_END, nextk);
-               }
-               i = nexti;
-               if (i == start)
-                       break;
-       }
-       /*
-        * make sure the last section is rendered
-        */
-       for (iphase = 0; iphase < (isDoubleDash ? 2 : 1); iphase++)
-               if (arcs[iphase].narcs > 0) {
-                       arcs[iphase].arcs[arcs[iphase].narcs-1].render = 1;
-                       arcs[iphase].arcs[arcs[iphase].narcs-1].join =
-                                arcs[iphase].njoins;
-                       arcs[iphase].arcs[arcs[iphase].narcs-1].cap =
-                                arcs[iphase].ncaps;
-               }
-       DEALLOCATE_LOCAL(data);
-       return arcs;
-arcfail:
-       miFreeArcs(arcs, pGC);
-       DEALLOCATE_LOCAL(data);
-       return (miPolyArcPtr)NULL;
-}
-
-static double
-angleToLength (int angle, dashMap *map)
-{
-       double  len, excesslen, sidelen = map->map[DASH_MAP_SIZE - 1], totallen;
-       int     di;
-       int     excess;
-       gboolean        oddSide = FALSE;
-
-       totallen = 0;
-       if (angle >= 0) {
-               while (angle >= 90 * 64) {
-                       angle -= 90 * 64;
-                       totallen += sidelen;
-                       oddSide = !oddSide;
-               }
-       } else {
-               while (angle < 0) {
-                       angle += 90 * 64;
-                       totallen -= sidelen;
-                       oddSide = !oddSide;
-               }
-       }
-       if (oddSide)
-               angle = 90 * 64 - angle;
-               
-       di = xAngleToDashIndex (angle);
-       excess = angle - dashIndexToXAngle (di);
-
-       len = map->map[di];
-       /*
-        * linearly interpolate between this point and the next
-        */
-       if (excess > 0) {
-               excesslen = (map->map[di + 1] - map->map[di]) *
-                               ((double) excess) / dashXAngleStep;
-               len += excesslen;
-       }
-       if (oddSide)
-               totallen += (sidelen - len);
-       else
-               totallen += len;
-       return totallen;
-}
-
-/*
- * len is along the arc, but may be more than one rotation
- */
-
-static int
-lengthToAngle (double len, dashMap *map)
-{
-       double  sidelen = map->map[DASH_MAP_SIZE - 1];
-       int     angle, angleexcess;
-       gboolean        oddSide = FALSE;
-       int     a0, a1, a;
-
-       angle = 0;
-       /*
-        * step around the ellipse, subtracting sidelens and
-        * adding 90 degrees.  oddSide will tell if the
-        * map should be interpolated in reverse
-        */
-       if (len >= 0) {
-               if (sidelen == 0)
-                       return 2 * FULLCIRCLE;  /* infinity */
-               while (len >= sidelen) {
-                       angle += 90 * 64;
-                       len -= sidelen;
-                       oddSide = !oddSide;
-               }
-       } else {
-               if (sidelen == 0)
-                       return -2 * FULLCIRCLE; /* infinity */
-               while (len < 0) {
-                       angle -= 90 * 64;
-                       len += sidelen;
-                       oddSide = !oddSide;
-               }
-       }
-       if (oddSide)
-               len = sidelen - len;
-       a0 = 0;
-       a1 = DASH_MAP_SIZE - 1;
-       /*
-        * binary search for the closest pre-computed length
-        */
-       while (a1 - a0 > 1) {
-               a = (a0 + a1) / 2;
-               if (len > map->map[a])
-                       a0 = a;
-               else
-                       a1 = a;
-       }
-       angleexcess = dashIndexToXAngle (a0);
-       /*
-        * linearly interpolate to the next point
-        */
-       angleexcess += (len - map->map[a0]) /
-                       (map->map[a0+1] - map->map[a0]) * dashXAngleStep;
-       if (oddSide)
-               angle += (90 * 64) - angleexcess;
-       else
-               angle += angleexcess;
-       return angle;
-}
-
-/*
- * compute the angle of an ellipse which cooresponds to
- * the given path length.  Note that the correct solution
- * to this problem is an eliptic integral, we'll punt and
- * approximate (it's only for dashes anyway).  This
- * approximation uses a polygon.
- *
- * The remaining portion of len is stored in *lenp -
- * this will be negative if the arc extends beyond
- * len and positive if len extends beyond the arc.
- */
-
-static int computeAngleFromPath(int startAngle, int endAngle, dashMap *map, int *lenp, int backwards)
-/*     int     startAngle, endAngle;   *//* normalized absolute angles in *64 degrees */
-{
-       int     a0, a1, a;
-       double  len0;
-       int     len;
-
-       a0 = startAngle;
-       a1 = endAngle;
-       len = *lenp;
-       if (backwards) {
-               /*
-                * flip the problem around to always be
-                * forwards
-                */
-               a0 = FULLCIRCLE - a0;
-               a1 = FULLCIRCLE - a1;
-       }
-       if (a1 < a0)
-               a1 += FULLCIRCLE;
-       len0 = angleToLength (a0, map);
-       a = lengthToAngle (len0 + len, map);
-       if (a > a1) {
-               a = a1;
-               len -= angleToLength (a1, map) - len0;
-       } else
-               len = 0;
-       if (backwards)
-               a = FULLCIRCLE - a;
-       *lenp = len;
-       return a;
-}
-
-/*
- * scan convert wide arcs.
- */
-
-/*
- * draw zero width/height arcs
- */
-
-static void
-drawZeroArc (GdkDrawable *pDraw, GdkGC *pGC, miArc *tarc, int lw,
-             miArcFacePtr left, miArcFacePtr right)
-{
-       double  x0 = 0.0, y0 = 0.0, x1 = 0.0, y1 = 0.0, w, h, x, y;
-       double  xmax, ymax, xmin, ymin;
-       int     a0, a1;
-       double  a, startAngle, endAngle;
-       double  l, lx, ly;
-
-       l = lw / 2.0;
-       a0 = tarc->angle1;
-       a1 = tarc->angle2;
-       if (a1 > FULLCIRCLE)
-               a1 = FULLCIRCLE;
-       else if (a1 < -FULLCIRCLE)
-               a1 = -FULLCIRCLE;
-       w = (double)tarc->width / 2.0;
-       h = (double)tarc->height / 2.0;
-       /*
-        * play in X coordinates right away
-        */
-       startAngle = - ((double) a0 / 64.0);
-       endAngle = - ((double) (a0 + a1) / 64.0);
-       
-       xmax = -w;
-       xmin = w;
-       ymax = -h;
-       ymin = h;
-       a = startAngle;
-       for (;;)
-       {
-               x = w * miDcos(a);
-               y = h * miDsin(a);
-               if (a == startAngle)
-               {
-                       x0 = x;
-                       y0 = y;
-               }
-               if (a == endAngle)
-               {
-                       x1 = x;
-                       y1 = y;
-               }
-               if (x > xmax)
-                       xmax = x;
-               if (x < xmin)
-                       xmin = x;
-               if (y > ymax)
-                       ymax = y;
-               if (y < ymin)
-                       ymin = y;
-               if (a == endAngle)
-                       break;
-               if (a1 < 0)     /* clockwise */
-               {
-                       if (floor (a / 90.0) == floor (endAngle / 90.0))
-                               a = endAngle;
-                       else
-                               a = 90 * (floor (a/90.0) + 1);
-               }
-               else
-               {
-                       if (ceil (a / 90.0) == ceil (endAngle / 90.0))
-                               a = endAngle;
-                       else
-                               a = 90 * (ceil (a/90.0) - 1);
-               }
-       }
-       lx = ly = l;
-       if ((x1 - x0) + (y1 - y0) < 0)
-           lx = ly = -l;
-       if (h)
-       {
-           ly = 0.0;
-           lx = -lx;
-       }
-       else
-           lx = 0.0;
-       if (right)
-       {
-           right->center.x = x0;
-           right->center.y = y0;
-           right->clock.x = x0 - lx;
-           right->clock.y = y0 - ly;
-           right->counterClock.x = x0 + lx;
-           right->counterClock.y = y0 + ly;
-       }
-       if (left)
-       {
-           left->center.x = x1;
-           left->center.y = y1;
-           left->clock.x = x1 + lx;
-           left->clock.y = y1 + ly;
-           left->counterClock.x = x1 - lx;
-           left->counterClock.y = y1 - ly;
-       }
-       
-       x0 = xmin;
-       x1 = xmax;
-       y0 = ymin;
-       y1 = ymax;
-       if (ymin != y1) {
-               xmin = -l;
-               xmax = l;
-       } else {
-               ymin = -l;
-               ymax = l;
-       }
-       if (xmax != xmin && ymax != ymin) {
-               int     minx, maxx, miny, maxy;
-
-               minx = ICEIL (xmin + w) + tarc->x;
-               maxx = ICEIL (xmax + w) + tarc->x;
-               miny = ICEIL (ymin + h) + tarc->y;
-               maxy = ICEIL (ymax + h) + tarc->y;
-
-               gdk_fb_draw_rectangle(pDraw, pGC, TRUE, minx, miny, maxx - minx, maxy - miny);
-       }
-}
-
-/*
- * this computes the ellipse y value associated with the
- * bottom of the tail.
- */
-
-static void
-tailEllipseY (struct arc_def *def, struct accelerators *acc)
-{
-       double          t;
-
-       acc->tail_y = 0.0;
-       if (def->w == def->h)
-           return;
-       t = def->l * def->w;
-       if (def->w > def->h) {
-           if (t < acc->h2)
-               return;
-       } else {
-           if (t > acc->h2)
-               return;
-       }
-       t = 2.0 * def->h * t;
-       t = (CUBED_ROOT_4 * acc->h2 - cbrt(t * t)) / acc->h2mw2;
-       if (t > 0.0)
-           acc->tail_y = def->h / CUBED_ROOT_2 * sqrt(t);
-}
-
-/*
- * inverse functions -- compute edge coordinates
- * from the ellipse
- */
-
-static double
-outerXfromXY (double x, double y,
-              struct arc_def *def, struct accelerators *acc)
-{
-       return x + (x * acc->h2l) / sqrt (x*x * acc->h4 + y*y * acc->w4);
-}
-
-static double
-outerYfromXY (double x, double y,
-              struct arc_def *def, struct accelerators *acc)
-{
-       return y + (y * acc->w2l) / sqrt (x*x * acc->h4 + y*y * acc->w4);
-}
-
-static double
-innerXfromXY (double x, double y,
-              struct arc_def *def, struct accelerators *acc)
-{
-       return x - (x * acc->h2l) / sqrt (x*x * acc->h4 + y*y * acc->w4);
-}
-
-static double
-innerYfromXY (double x, double y,
-              struct arc_def *def, struct accelerators *acc)
-{
-       return y - (y * acc->w2l) / sqrt (x*x * acc->h4 + y*y * acc->w4);
-}
-
-static double
-innerYfromY (double y, struct arc_def *def, struct accelerators *acc)
-{
-       double  x;
-
-       x = (def->w / def->h) * sqrt (acc->h2 - y*y);
-
-       return y - (y * acc->w2l) / sqrt (x*x * acc->h4 + y*y * acc->w4);
-}
-
-static void
-computeLine (double x1, double y1, double x2, double y2, struct line *line)
-{
-       if (y1 == y2)
-               line->valid = 0;
-       else {
-               line->m = (x1 - x2) / (y1 - y2);
-               line->b = x1  - y1 * line->m;
-               line->valid = 1;
-       }
-}
-
-/*
- * compute various accelerators for an ellipse.  These
- * are simply values that are used repeatedly in
- * the computations
- */
-
-static void
-computeAcc (miArc *tarc, int lw, struct arc_def *def, struct accelerators *acc)
-{
-       def->w = ((double) tarc->width) / 2.0;
-       def->h = ((double) tarc->height) / 2.0;
-       def->l = ((double) lw) / 2.0;
-       acc->h2 = def->h * def->h;
-       acc->w2 = def->w * def->w;
-       acc->h4 = acc->h2 * acc->h2;
-       acc->w4 = acc->w2 * acc->w2;
-       acc->h2l = acc->h2 * def->l;
-       acc->w2l = acc->w2 * def->l;
-       acc->h2mw2 = acc->h2 - acc->w2;
-       acc->fromIntX = (tarc->width & 1) ? 0.5 : 0.0;
-       acc->fromIntY = (tarc->height & 1) ? 0.5 : 0.0;
-       acc->xorg = tarc->x + (tarc->width >> 1);
-       acc->yorgu = tarc->y + (tarc->height >> 1);
-       acc->yorgl = acc->yorgu + (tarc->height & 1);
-       tailEllipseY (def, acc);
-}
-               
-/*
- * compute y value bounds of various portions of the arc,
- * the outer edge, the ellipse and the inner edge.
- */
-
-static void
-computeBound (struct arc_def *def, struct arc_bound *bound,
-              struct accelerators *acc, miArcFacePtr right, miArcFacePtr left)
-{
-       double          t;
-       double          innerTaily;
-       double          tail_y;
-       struct bound    innerx, outerx;
-       struct bound    ellipsex;
-
-       bound->ellipse.min = Dsin (def->a0) * def->h;
-       bound->ellipse.max = Dsin (def->a1) * def->h;
-       if (def->a0 == 45 && def->w == def->h)
-               ellipsex.min = bound->ellipse.min;
-       else
-               ellipsex.min = Dcos (def->a0) * def->w;
-       if (def->a1 == 45 && def->w == def->h)
-               ellipsex.max = bound->ellipse.max;
-       else
-               ellipsex.max = Dcos (def->a1) * def->w;
-       bound->outer.min = outerYfromXY (ellipsex.min, bound->ellipse.min, def, acc);
-       bound->outer.max = outerYfromXY (ellipsex.max, bound->ellipse.max, def, acc);
-       bound->inner.min = innerYfromXY (ellipsex.min, bound->ellipse.min, def, acc);
-       bound->inner.max = innerYfromXY (ellipsex.max, bound->ellipse.max, def, acc);
-
-       outerx.min = outerXfromXY (ellipsex.min, bound->ellipse.min, def, acc);
-       outerx.max = outerXfromXY (ellipsex.max, bound->ellipse.max, def, acc);
-       innerx.min = innerXfromXY (ellipsex.min, bound->ellipse.min, def, acc);
-       innerx.max = innerXfromXY (ellipsex.max, bound->ellipse.max, def, acc);
-       
-       /*
-        * save the line end points for the
-        * cap code to use.  Careful here, these are
-        * in cartesean coordinates (y increasing upwards)
-        * while the cap code uses inverted coordinates
-        * (y increasing downwards)
-        */
-
-       if (right) {
-               right->counterClock.y = bound->outer.min;
-               right->counterClock.x = outerx.min;
-               right->center.y = bound->ellipse.min;
-               right->center.x = ellipsex.min;
-               right->clock.y = bound->inner.min;
-               right->clock.x = innerx.min;
-       }
-
-       if (left) {
-               left->clock.y = bound->outer.max;
-               left->clock.x = outerx.max;
-               left->center.y = bound->ellipse.max;
-               left->center.x = ellipsex.max;
-               left->counterClock.y = bound->inner.max;
-               left->counterClock.x = innerx.max;
-       }
-
-       bound->left.min = bound->inner.max;
-       bound->left.max = bound->outer.max;
-       bound->right.min = bound->inner.min;
-       bound->right.max = bound->outer.min;
-
-       computeLine (innerx.min, bound->inner.min, outerx.min, bound->outer.min,
-                     &acc->right);
-       computeLine (innerx.max, bound->inner.max, outerx.max, bound->outer.max,
-                    &acc->left);
-
-       if (bound->inner.min > bound->inner.max) {
-               t = bound->inner.min;
-               bound->inner.min = bound->inner.max;
-               bound->inner.max = t;
-       }
-       tail_y = acc->tail_y;
-       if (tail_y > bound->ellipse.max)
-               tail_y = bound->ellipse.max;
-       else if (tail_y < bound->ellipse.min)
-               tail_y = bound->ellipse.min;
-       innerTaily = innerYfromY (tail_y, def, acc);
-       if (bound->inner.min > innerTaily)
-               bound->inner.min = innerTaily;
-       if (bound->inner.max < innerTaily)
-               bound->inner.max = innerTaily;
-       bound->inneri.min = ICEIL(bound->inner.min - acc->fromIntY);
-       bound->inneri.max = floor(bound->inner.max - acc->fromIntY);
-       bound->outeri.min = ICEIL(bound->outer.min - acc->fromIntY);
-       bound->outeri.max = floor(bound->outer.max - acc->fromIntY);
-}
-
-/*
- * this section computes the x value of the span at y 
- * intersected with the specified face of the ellipse.
- *
- * this is the min/max X value over the set of normal
- * lines to the entire ellipse,  the equation of the
- * normal lines is:
- *
- *     ellipse_x h^2                   h^2
- * x = ------------ y + ellipse_x (1 - --- )
- *     ellipse_y w^2                   w^2
- *
- * compute the derivative with-respect-to ellipse_y and solve
- * for zero:
- *    
- *       (w^2 - h^2) ellipse_y^3 + h^4 y
- * 0 = - ----------------------------------
- *       h w ellipse_y^2 sqrt (h^2 - ellipse_y^2)
- *
- *             (   h^4 y     )
- * ellipse_y = ( ----------  ) ^ (1/3)
- *             ( (h^2 - w^2) )
- *
- * The other two solutions to the equation are imaginary.
- *
- * This gives the position on the ellipse which generates
- * the normal with the largest/smallest x intersection point.
- *
- * Now compute the second derivative to check whether
- * the intersection is a minimum or maximum:
- *
- *    h (y0^3 (w^2 - h^2) + h^2 y (3y0^2 - 2h^2))
- * -  -------------------------------------------
- *          w y0^3 (sqrt (h^2 - y^2)) ^ 3
- *
- * as we only care about the sign,
- *
- * - (y0^3 (w^2 - h^2) + h^2 y (3y0^2 - 2h^2))
- *
- * or (to use accelerators),
- *
- * y0^3 (h^2 - w^2) - h^2 y (3y0^2 - 2h^2) 
- *
- */
-
-/*
- * computes the position on the ellipse whose normal line
- * intersects the given scan line maximally
- */
-
-static double
-hookEllipseY (double scan_y, struct arc_bound *bound,
-              struct accelerators *acc, int left)
-{
-       double  ret;
-
-       if (acc->h2mw2 == 0) {
-               if ( (scan_y > 0 && !left) || (scan_y < 0 && left) )
-                       return bound->ellipse.min;
-               return bound->ellipse.max;
-       }
-       ret = (acc->h4 * scan_y) / (acc->h2mw2);
-       if (ret >= 0)
-               return cbrt (ret);
-       else
-               return -cbrt (-ret);
-}
-
-/*
- * computes the X value of the intersection of the
- * given scan line with the right side of the lower hook
- */
-
-static double
-hookX (double scan_y, struct arc_def *def,
-       struct arc_bound *bound, struct accelerators *acc, int left)
-{
-       double  ellipse_y, x;
-       double  maxMin;
-
-       if (def->w != def->h) {
-               ellipse_y = hookEllipseY (scan_y, bound, acc, left);
-               if (boundedLe (ellipse_y, bound->ellipse)) {
-                       /*
-                        * compute the value of the second
-                        * derivative
-                        */
-                       maxMin = ellipse_y*ellipse_y*ellipse_y * acc->h2mw2 -
-                        acc->h2 * scan_y * (3 * ellipse_y*ellipse_y - 2*acc->h2);
-                       if ((left && maxMin > 0) || (!left && maxMin < 0)) {
-                               if (ellipse_y == 0)
-                                       return def->w + left ? -def->l : def->l;
-                               x = (acc->h2 * scan_y - ellipse_y * acc->h2mw2) *
-                                       sqrt (acc->h2 - ellipse_y * ellipse_y) /
-                                       (def->h * def->w * ellipse_y);
-                               return x;
-                       }
-               }
-       }
-       if (left) {
-               if (acc->left.valid && boundedLe (scan_y, bound->left)) {
-                       x = intersectLine (scan_y, acc->left);
-               } else {
-                       if (acc->right.valid)
-                               x = intersectLine (scan_y, acc->right);
-                       else
-                               x = def->w - def->l;
-               }
-       } else {
-               if (acc->right.valid && boundedLe (scan_y, bound->right)) {
-                       x = intersectLine (scan_y, acc->right);
-               } else {
-                       if (acc->left.valid)
-                               x = intersectLine (scan_y, acc->left);
-                       else
-                               x = def->w - def->l;
-               }
-       }
-       return x;
-}
-
-/*
- * generate the set of spans with
- * the given y coordinate
- */
-
-static void
-arcSpan (int y, int lx, int lw, int rx, int rw,
-         struct arc_def *def, struct arc_bound *bounds,
-         struct accelerators *acc, int mask)
-{
-       int linx, loutx, rinx, routx;
-       double x, altx;
-
-       if (boundedLe (y, bounds->inneri)) {
-           linx = -(lx + lw);
-           rinx = rx;
-       } else {
-           /*
-            * intersection with left face
-            */
-           x = hookX (y + acc->fromIntY, def, bounds, acc, 1);
-           if (acc->right.valid &&
-               boundedLe (y + acc->fromIntY, bounds->right))
-           {
-               altx = intersectLine (y + acc->fromIntY, acc->right);
-               if (altx < x)
-                   x = altx;
-           }
-           linx = -ICEIL(acc->fromIntX - x);
-           rinx = ICEIL(acc->fromIntX + x);
-       }
-       if (boundedLe (y, bounds->outeri)) {
-           loutx = -lx;
-           routx = rx + rw;
-       } else {
-           /*
-            * intersection with right face
-            */
-           x = hookX (y + acc->fromIntY, def, bounds, acc, 0);
-           if (acc->left.valid &&
-               boundedLe (y + acc->fromIntY, bounds->left))
-           {
-               altx = x;
-               x = intersectLine (y + acc->fromIntY, acc->left);
-               if (x < altx)
-                   x = altx;
-           }
-           loutx = -ICEIL(acc->fromIntX - x);
-           routx = ICEIL(acc->fromIntX + x);
-       }
-       if (routx > rinx) {
-           if (mask & 1)
-               newFinalSpan (acc->yorgu - y,
-                             acc->xorg + rinx, acc->xorg + routx);
-           if (mask & 8)
-               newFinalSpan (acc->yorgl + y,
-                             acc->xorg + rinx, acc->xorg + routx);
-       }
-       if (loutx > linx) {
-           if (mask & 2)
-               newFinalSpan (acc->yorgu - y,
-                             acc->xorg - loutx, acc->xorg - linx);
-           if (mask & 4)
-               newFinalSpan (acc->yorgl + y,
-                             acc->xorg - loutx, acc->xorg - linx);
-       }
-}
-
-static void
-arcSpan0 (int lx, int lw, int rx, int rw,
-          struct arc_def *def, struct arc_bound *bounds,
-          struct accelerators *acc, int mask)
-{
-    double x;
-
-    if (boundedLe (0, bounds->inneri) &&
-       acc->left.valid && boundedLe (0, bounds->left) &&
-       acc->left.b > 0)
-    {
-       x = def->w - def->l;
-       if (acc->left.b < x)
-           x = acc->left.b;
-       lw = ICEIL(acc->fromIntX - x) - lx;
-       rw += rx;
-       rx = ICEIL(acc->fromIntX + x);
-       rw -= rx;
-    }
-    arcSpan (0, lx, lw, rx, rw, def, bounds, acc, mask);
-}
-
-static void
-tailSpan (int y, int lw, int rw,
-          struct arc_def *def, struct arc_bound *bounds,
-          struct accelerators *acc, int mask)
-{
-    double yy, xalt, x, lx, rx;
-    int n;
-
-    if (boundedLe(y, bounds->outeri))
-       arcSpan (y, 0, lw, -rw, rw, def, bounds, acc, mask);
-    else if (def->w != def->h) {
-       yy = y + acc->fromIntY;
-       x = tailX(yy, def, bounds, acc);
-       if (yy == 0.0 && x == -rw - acc->fromIntX)
-           return;
-       if (acc->right.valid && boundedLe (yy, bounds->right)) {
-           rx = x;
-           lx = -x;
-           xalt = intersectLine (yy, acc->right);
-           if (xalt >= -rw - acc->fromIntX && xalt <= rx)
-               rx = xalt;
-           n = ICEIL(acc->fromIntX + lx);
-           if (lw > n) {
-               if (mask & 2)
-                   newFinalSpan (acc->yorgu - y,
-                                 acc->xorg + n, acc->xorg + lw);
-               if (mask & 4)
-                   newFinalSpan (acc->yorgl + y,
-                                 acc->xorg + n, acc->xorg + lw);
-           }
-           n = ICEIL(acc->fromIntX + rx);
-           if (n > -rw) {
-               if (mask & 1)
-                   newFinalSpan (acc->yorgu - y,
-                                 acc->xorg - rw, acc->xorg + n);
-               if (mask & 8)
-                   newFinalSpan (acc->yorgl + y,
-                                 acc->xorg - rw, acc->xorg + n);
-           }
-       }
-       arcSpan (y,
-                ICEIL(acc->fromIntX - x), 0,
-                ICEIL(acc->fromIntX + x), 0,
-                def, bounds, acc, mask);
-    }
-}
-
-/*
- * create whole arcs out of pieces.  This code is
- * very bad.
- */
-
-static struct finalSpan        **finalSpans = NULL;
-static int             finalMiny = 0, finalMaxy = -1;
-static int             finalSize = 0;
-
-static int             nspans = 0;     /* total spans, not just y coords */
-
-struct finalSpan {
-       struct finalSpan        *next;
-       int                     min, max;       /* x values */
-};
-
-static struct finalSpan    *freeFinalSpans, *tmpFinalSpan;
-
-# define allocFinalSpan()   (freeFinalSpans ?\
-                               ((tmpFinalSpan = freeFinalSpans), \
-                                (freeFinalSpans = freeFinalSpans->next), \
-                                (tmpFinalSpan->next = NULL), \
-                                tmpFinalSpan) : \
-                            realAllocSpan ())
-
-# define SPAN_CHUNK_SIZE    128
-
-struct finalSpanChunk {
-       struct finalSpan        data[SPAN_CHUNK_SIZE];
-       struct finalSpanChunk   *next;
-};
-
-static struct finalSpanChunk   *chunks;
-
-struct finalSpan *
-realAllocSpan (void)
-{
-       register struct finalSpanChunk  *newChunk;
-       register struct finalSpan       *span;
-       register int                    i;
-
-       newChunk = (struct finalSpanChunk *) g_malloc (sizeof (struct finalSpanChunk));
-       if (!newChunk)
-               return (struct finalSpan *) NULL;
-       newChunk->next = chunks;
-       chunks = newChunk;
-       freeFinalSpans = span = newChunk->data + 1;
-       for (i = 1; i < SPAN_CHUNK_SIZE-1; i++) {
-               span->next = span+1;
-               span++;
-       }
-       span->next = NULL;
-       span = newChunk->data;
-       span->next = NULL;
-       return span;
-}
-
-static void
-disposeFinalSpans (void)
-{
-       struct finalSpanChunk   *chunk, *next;
-
-       for (chunk = chunks; chunk; chunk = next) {
-               next = chunk->next;
-               g_free (chunk);
-       }
-       chunks = NULL;
-       freeFinalSpans = NULL;
-       g_free(finalSpans);
-       finalSpans = NULL;
-}
-
-static void
-fillSpans (GdkDrawable *pDrawable, GdkGC *pGC)
-{
-       register struct finalSpan       *span;
-       register GdkSpan*               xSpan;
-       register int                    i;
-       register struct finalSpan       **f;
-       register int                    spany;
-       GdkSpan*                        xSpans;
-
-       if (nspans == 0)
-               return;
-       xSpan = xSpans = (GdkSpan*) ALLOCATE_LOCAL (nspans * sizeof (GdkSpan));
-       if (xSpans)
-       {
-           i = 0;
-           f = finalSpans;
-           for (spany = finalMiny; spany <= finalMaxy; spany++, f++) {
-                   for (span = *f; span; span=span->next) {
-                           if (span->max <= span->min)
-                                   continue;
-                           xSpan->x = span->min;
-                           xSpan->y = spany;
-                           xSpan->width = span->max - span->min;
-                           ++xSpan;
-                           ++i;
-                   }
-           }
-
-           gdk_fb_fill_spans(pDrawable, pGC, xSpans, i, TRUE);
-       }
-       disposeFinalSpans ();
-       if (xSpans)
-           DEALLOCATE_LOCAL (xSpans);
-       finalMiny = 0;
-       finalMaxy = -1;
-       finalSize = 0;
-       nspans = 0;
-}
-
-# define SPAN_REALLOC  100
-
-# define findSpan(y) ((finalMiny <= (y) && (y) <= finalMaxy) ? \
-                         &finalSpans[(y) - finalMiny] : \
-                         realFindSpan (y))
-
-static struct finalSpan **
-realFindSpan (int y)
-{
-       struct finalSpan        **newSpans;
-       int                     newSize, newMiny, newMaxy;
-       int                     change;
-       int                     i;
-
-       if (y < finalMiny || y > finalMaxy) {
-               if (!finalSize) {
-                       finalMiny = y;
-                       finalMaxy = y - 1;
-               }
-               if (y < finalMiny)
-                       change = finalMiny - y;
-               else
-                       change = y - finalMaxy;
-               if (change >= SPAN_REALLOC)
-                       change += SPAN_REALLOC;
-               else
-                       change = SPAN_REALLOC;
-               newSize = finalSize + change;
-               newSpans = (struct finalSpan **) g_malloc
-                                       (newSize * sizeof (struct finalSpan *));
-               if (!newSpans)
-                   return (struct finalSpan **)NULL;
-               newMiny = finalMiny;
-               newMaxy = finalMaxy;
-               if (y < finalMiny)
-                       newMiny = finalMiny - change;
-               else
-                       newMaxy = finalMaxy + change;
-               if (finalSpans) {
-                       g_memmove(((char *) newSpans) + (finalMiny-newMiny) * sizeof (struct finalSpan *),
-                                 (char *) finalSpans,
-                              finalSize * sizeof (struct finalSpan *));
-                       g_free (finalSpans);
-               }
-               if ((i = finalMiny - newMiny) > 0)
-                       memset ((char *)newSpans, 0, i * sizeof (struct finalSpan *));
-               if ((i = newMaxy - finalMaxy) > 0)
-                       memset ((char *)(newSpans + newSize - i), 0,
-                              i * sizeof (struct finalSpan *));
-               finalSpans = newSpans;
-               finalMaxy = newMaxy;
-               finalMiny = newMiny;
-               finalSize = newSize;
-       }
-       return &finalSpans[y - finalMiny];
-}
-
-static void
-newFinalSpan (int y, register int xmin, register int xmax)
-{
-       register struct finalSpan       *x;
-       register struct finalSpan       **f;
-       struct finalSpan                *oldx;
-       struct finalSpan                *prev;
-
-       f = findSpan (y);
-       if (!f)
-           return;
-       oldx = NULL;
-       for (;;) {
-               prev = NULL;
-               for (x = *f; x; x=x->next) {
-                       if (x == oldx) {
-                               prev = x;
-                               continue;
-                       }
-                       if (x->min <= xmax && xmin <= x->max) {
-                               if (oldx) {
-                                       oldx->min = MIN (x->min, xmin);
-                                       oldx->max = MAX (x->max, xmax);
-                                       if (prev)
-                                               prev->next = x->next;
-                                       else
-                                               *f = x->next;
-                                       --nspans;
-                               } else {
-                                       x->min = MIN (x->min, xmin);
-                                       x->max = MAX (x->max, xmax);
-                                       oldx = x;
-                               }
-                               xmin = oldx->min;
-                               xmax = oldx->max;
-                               break;
-                       }
-                       prev = x;
-               }
-               if (!x)
-                       break;
-       }
-       if (!oldx) {
-               x = allocFinalSpan ();
-               if (x)
-               {
-                   x->min = xmin;
-                   x->max = xmax;
-                   x->next = *f;
-                   *f = x;
-                   ++nspans;
-               }
-       }
-}
-
-static void
-mirrorSppPoint (int quadrant, SppPointPtr sppPoint)
-{
-       switch (quadrant) {
-       case 0:
-               break;
-       case 1:
-               sppPoint->x = -sppPoint->x;
-               break;
-       case 2:
-               sppPoint->x = -sppPoint->x;
-               sppPoint->y = -sppPoint->y;
-               break;
-       case 3:
-               sppPoint->y = -sppPoint->y;
-               break;
-       }
-       /*
-        * and translate to X coordinate system
-        */
-       sppPoint->y = -sppPoint->y;
-}
-
-/*
- * split an arc into pieces which are scan-converted
- * in the first-quadrant and mirrored into position.
- * This is necessary as the scan-conversion code can
- * only deal with arcs completely contained in the
- * first quadrant.
- */
-
-static void
-drawArc (miArc *tarc, int l, int a0, int a1, miArcFacePtr right, miArcFacePtr left)
-     /*        miArcFacePtr    right, left;    */ /* save end line points */
-{
-       struct arc_def          def;
-       struct accelerators     acc;
-       int                     startq, endq, curq;
-       int                     rightq, leftq = 0, righta = 0, lefta = 0;
-       miArcFacePtr            passRight, passLeft;
-       int                     q0 = 0, q1 = 0, mask;
-       struct band {
-               int     a0, a1;
-               int     mask;
-       }       band[5], sweep[20];
-       int                     bandno, sweepno;
-       int                     i, j;
-       int                     flipRight = 0, flipLeft = 0;                    
-       int                     copyEnd = 0;
-       miArcSpanData           *spdata;
-       gboolean                        mustFree;
-
-       spdata = miComputeWideEllipse(l, tarc, &mustFree);
-       if (!spdata)
-           return;
-
-       if (a1 < a0)
-               a1 += 360 * 64;
-       startq = a0 / (90 * 64);
-       if (a0 == a1)
-           endq = startq;
-       else
-           endq = (a1-1) / (90 * 64);
-       bandno = 0;
-       curq = startq;
-       rightq = -1;
-       for (;;) {
-               switch (curq) {
-               case 0:
-                       if (a0 > 90 * 64)
-                               q0 = 0;
-                       else
-                               q0 = a0;
-                       if (a1 < 360 * 64)
-                               q1 = MIN (a1, 90 * 64);
-                       else
-                               q1 = 90 * 64;
-                       if (curq == startq && a0 == q0 && rightq < 0) {
-                               righta = q0;
-                               rightq = curq;
-                       }
-                       if (curq == endq && a1 == q1) {
-                               lefta = q1;
-                               leftq = curq;
-                       }
-                       break;
-               case 1:
-                       if (a1 < 90 * 64)
-                               q0 = 0;
-                       else
-                               q0 = 180 * 64 - MIN (a1, 180 * 64);
-                       if (a0 > 180 * 64)
-                               q1 = 90 * 64;
-                       else
-                               q1 = 180 * 64 - MAX (a0, 90 * 64);
-                       if (curq == startq && 180 * 64 - a0 == q1) {
-                               righta = q1;
-                               rightq = curq;
-                       }
-                       if (curq == endq && 180 * 64 - a1 == q0) {
-                               lefta = q0;
-                               leftq = curq;
-                       }
-                       break;
-               case 2:
-                       if (a0 > 270 * 64)
-                               q0 = 0;
-                       else
-                               q0 = MAX (a0, 180 * 64) - 180 * 64;
-                       if (a1 < 180 * 64)
-                               q1 = 90 * 64;
-                       else
-                               q1 = MIN (a1, 270 * 64) - 180 * 64;
-                       if (curq == startq && a0 - 180*64 == q0) {
-                               righta = q0;
-                               rightq = curq;
-                       }
-                       if (curq == endq && a1 - 180 * 64 == q1) {
-                               lefta = q1;
-                               leftq = curq;
-                       }
-                       break;
-               case 3:
-                       if (a1 < 270 * 64)
-                               q0 = 0;
-                       else
-                               q0 = 360 * 64 - MIN (a1, 360 * 64);
-                       q1 = 360 * 64 - MAX (a0, 270 * 64);
-                       if (curq == startq && 360 * 64 - a0 == q1) {
-                               righta = q1;
-                               rightq = curq;
-                       }
-                       if (curq == endq && 360 * 64 - a1 == q0) {
-                               lefta = q0;
-                               leftq = curq;
-                       }
-                       break;
-               }
-               band[bandno].a0 = q0;
-               band[bandno].a1 = q1;
-               band[bandno].mask = 1 << curq;
-               bandno++;
-               if (curq == endq)
-                       break;
-               curq++;
-               if (curq == 4) {
-                       a0 = 0;
-                       a1 -= 360 * 64;
-                       curq = 0;
-                       endq -= 4;
-               }
-       }
-       sweepno = 0;
-       for (;;) {
-               q0 = 90 * 64;
-               mask = 0;
-               /*
-                * find left-most point
-                */
-               for (i = 0; i < bandno; i++)
-                       if (band[i].a0 <= q0) {
-                               q0 = band[i].a0;
-                               q1 = band[i].a1;
-                               mask = band[i].mask;
-                       }
-               if (!mask)
-                       break;
-               /*
-                * locate next point of change
-                */
-               for (i = 0; i < bandno; i++)
-                       if (!(mask & band[i].mask)) {
-                               if (band[i].a0 == q0) {
-                                       if (band[i].a1 < q1)
-                                               q1 = band[i].a1;
-                                       mask |= band[i].mask;
-                               } else if (band[i].a0 < q1)
-                                       q1 = band[i].a0;
-                       }
-               /*
-                * create a new sweep
-                */
-               sweep[sweepno].a0 = q0;
-               sweep[sweepno].a1 = q1;
-               sweep[sweepno].mask = mask;
-               sweepno++;
-               /*
-                * subtract the sweep from the affected bands
-                */
-               for (i = 0; i < bandno; i++)
-                       if (band[i].a0 == q0) {
-                               band[i].a0 = q1;
-                               /*
-                                * check if this band is empty
-                                */
-                               if (band[i].a0 == band[i].a1)
-                                       band[i].a1 = band[i].a0 = 90 * 64 + 1;
-                       }
-       }
-       computeAcc (tarc, l, &def, &acc);
-       for (j = 0; j < sweepno; j++) {
-               mask = sweep[j].mask;
-               passRight = passLeft = NULL;
-               if (mask & (1 << rightq)) {
-                       if (sweep[j].a0 == righta)
-                               passRight = right;
-                       else if (sweep[j].a1 == righta) {
-                               passLeft = right;
-                               flipRight = 1;
-                       }
-               }
-               if (mask & (1 << leftq)) {
-                       if (sweep[j].a1 == lefta)
-                       {
-                               if (passLeft)
-                                       copyEnd = 1;
-                               passLeft = left;
-                       }
-                       else if (sweep[j].a0 == lefta) {
-                               if (passRight)
-                                       copyEnd = 1;
-                               passRight = left;
-                               flipLeft = 1;
-                       }
-               }
-               drawQuadrant (&def, &acc, sweep[j].a0, sweep[j].a1, mask, 
-                             passRight, passLeft, spdata);
-       }
-       /*
-        * when copyEnd is set, both ends of the arc were computed
-        * at the same time; drawQuadrant only takes one end though,
-        * so the left end will be the only one holding the data.  Copy
-        * it from there.
-        */
-       if (copyEnd)
-               *right = *left;
-       /*
-        * mirror the coordinates generated for the
-        * faces of the arc
-        */
-       if (right) {
-               mirrorSppPoint (rightq, &right->clock);
-               mirrorSppPoint (rightq, &right->center);
-               mirrorSppPoint (rightq, &right->counterClock);
-               if (flipRight) {
-                       SppPointRec     temp;
-
-                       temp = right->clock;
-                       right->clock = right->counterClock;
-                       right->counterClock = temp;
-               }
-       }
-       if (left) {
-               mirrorSppPoint (leftq,  &left->counterClock);
-               mirrorSppPoint (leftq,  &left->center);
-               mirrorSppPoint (leftq,  &left->clock);
-               if (flipLeft) {
-                       SppPointRec     temp;
-
-                       temp = left->clock;
-                       left->clock = left->counterClock;
-                       left->counterClock = temp;
-               }
-       }
-       if (mustFree)
-           g_free(spdata);
-}
-
-static void
-drawQuadrant (struct arc_def *def, struct accelerators *acc,
-              int a0, int a1, int mask, miArcFacePtr right,
-              miArcFacePtr left, miArcSpanData *spdata)
-{
-       struct arc_bound        bound;
-       double                  yy, x, xalt;
-       int                     y, miny, maxy;
-       int                     n;
-       miArcSpan               *span;
-
-       def->a0 = ((double) a0) / 64.0;
-       def->a1 = ((double) a1) / 64.0;
-       computeBound (def, &bound, acc, right, left);
-       yy = bound.inner.min;
-       if (bound.outer.min < yy)
-           yy = bound.outer.min;
-       miny = ICEIL(yy - acc->fromIntY);
-       yy = bound.inner.max;
-       if (bound.outer.max > yy)
-           yy = bound.outer.max;
-       maxy = floor(yy - acc->fromIntY);
-       y = spdata->k;
-       span = spdata->spans;
-       if (spdata->top)
-       {
-           if (a1 == 90 * 64 && (mask & 1))
-               newFinalSpan (acc->yorgu - y - 1, acc->xorg, acc->xorg + 1);
-           span++;
-       }
-       for (n = spdata->count1; --n >= 0; )
-       {
-           if (y < miny)
-               return;
-           if (y <= maxy) {
-               arcSpan (y,
-                        span->lx, -span->lx, 0, span->lx + span->lw,
-                        def, &bound, acc, mask);
-               if (span->rw + span->rx)
-                   tailSpan (y, -span->rw, -span->rx, def, &bound, acc, mask);
-           }
-           y--;
-           span++;
-       }
-       if (y < miny)
-           return;
-       if (spdata->hole)
-       {
-           if (y <= maxy)
-               arcSpan (y, 0, 0, 0, 1, def, &bound, acc, mask & 0xc);
-       }
-       for (n = spdata->count2; --n >= 0; )
-       {
-           if (y < miny)
-               return;
-           if (y <= maxy)
-               arcSpan (y, span->lx, span->lw, span->rx, span->rw,
-                        def, &bound, acc, mask);
-           y--;
-           span++;
-       }
-       if (spdata->bot && miny <= y && y <= maxy)
-       {
-           n = mask;
-           if (y == miny)
-               n &= 0xc;
-           if (span->rw <= 0) {
-               arcSpan0 (span->lx, -span->lx, 0, span->lx + span->lw,
-                         def, &bound, acc, n);
-               if (span->rw + span->rx)
-                   tailSpan (y, -span->rw, -span->rx, def, &bound, acc, n);
-           }
-           else
-               arcSpan0 (span->lx, span->lw, span->rx, span->rw,
-                         def, &bound, acc, n);
-           y--;
-       }
-       while (y >= miny) {
-           yy = y + acc->fromIntY;
-           if (def->w == def->h) {
-               xalt = def->w - def->l;
-               x = -sqrt(xalt * xalt - yy * yy);
-           } else {
-               x = tailX(yy, def, &bound, acc);
-               if (acc->left.valid && boundedLe (yy, bound.left)) {
-                   xalt = intersectLine (yy, acc->left);
-                   if (xalt < x)
-                       x = xalt;
-               }
-               if (acc->right.valid && boundedLe (yy, bound.right)) {
-                   xalt = intersectLine (yy, acc->right);
-                   if (xalt < x)
-                       x = xalt;
-               }
-           }
-           arcSpan (y,
-                    ICEIL(acc->fromIntX - x), 0,
-                    ICEIL(acc->fromIntX + x), 0,
-                    def, &bound, acc, mask);
-           y--;
-       }
-}
diff --git a/gdk/linux-fb/midash.c b/gdk/linux-fb/midash.c
deleted file mode 100644 (file)
index 0e90516..0000000
+++ /dev/null
@@ -1,310 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: midash.c /main/14 1998/02/09 14:46:34 kaleb $ */
-
-#include <config.h>
-#include "mi.h"
-
-static miDashPtr
-CheckDashStorage(miDashPtr *ppseg, int nseg, int *pnsegMax);
-
-/* return a list of DashRec.  there will be an extra
-entry at the end holding the last point of the polyline.
-   this means that the code that actually draws dashes can
-get a pair of points for every dash.  only the point in the last
-dash record is useful; the other fields are not used.
-   nseg is the number of segments, not the number of points.
-
-example:
-
-   dash1.start
-   dash2.start
-   dash3.start
-   last-point
-
-defines a list of segments
-   (dash1.pt, dash2.pt)
-   (dash2.pt, dash3.pt)
-   (dash3.pt, last-point)
-and nseg == 3.
-
-NOTE:
-    EVEN_DASH == ~ODD_DASH
-
-NOTE ALSO:
-    miDashLines may return 0 segments, going from pt[0] to pt[0] with one dash.
-*/
-
-enum { EVEN_DASH=0, ODD_DASH=1 };
-
-#define sign(x) ((x)>0)?1:( ((x)<0)?-1:0 )
-
-miDashPtr
-miDashLine(int npt, GdkPoint *ppt, unsigned int nDash,
-           unsigned char *pDash, unsigned int offset, int *pnseg)
-{
-    GdkPoint pt1, pt2;
-    int lenCur;                /* npt used from this dash */
-    int lenMax;                /* npt in this dash */
-    int iDash = 0;     /* index of current dash */
-    int which;         /* EVEN_DASH or ODD_DASH */
-    miDashPtr pseg;    /* list of dash segments */
-    miDashPtr psegBase;        /* start of list */
-    int nseg = 0;      /* number of dashes so far */
-    int nsegMax = 0;   /* num segs we can fit in this list */
-
-    int x, y, len;
-    int adx, ady, signdx, signdy;
-    int du, dv, e1, e2, e, base_e = 0;
-
-    lenCur = offset;
-    which = EVEN_DASH;
-    while(lenCur >= pDash[iDash])
-    {
-       lenCur -= pDash[iDash];
-       iDash++;
-       if (iDash >= nDash)
-           iDash = 0;
-       which = ~which;
-    }
-    lenMax = pDash[iDash];
-
-    psegBase = (miDashPtr)NULL;
-    pt2 = ppt[0];              /* just in case there is only one point */
-
-    while(--npt)
-    {
-       if (PtEqual(ppt[0], ppt[1]))
-       {
-           ppt++;
-           continue;           /* no duplicated points in polyline */
-       }
-       pt1 = *ppt++;
-       pt2 = *ppt;
-
-       adx = pt2.x - pt1.x;
-       ady = pt2.y - pt1.y;
-       signdx = sign(adx);
-       signdy = sign(ady);
-       adx = abs(adx);
-       ady = abs(ady);
-
-       if (adx > ady)
-       {
-           du = adx;
-           dv = ady;
-           len = adx;
-       }
-       else
-       {
-           du = ady;
-           dv = adx;
-           len = ady;
-       }
-
-       e1 = dv * 2;
-       e2 = e1 - 2*du;
-       e = e1 - du;
-       x = pt1.x;
-       y = pt1.y;
-
-       nseg++;
-       pseg = CheckDashStorage(&psegBase, nseg, &nsegMax);
-       if (!pseg)
-           return (miDashPtr)NULL;
-       pseg->pt = pt1;
-       pseg->e1 = e1;
-       pseg->e2 = e2;
-       base_e = pseg->e = e;
-       pseg->which = which;
-       pseg->newLine = 1;
-
-       while (len--)
-       {
-           if (adx > ady)
-           {
-               /* X_AXIS */
-               if (((signdx > 0) && (e < 0)) ||
-                   ((signdx <=0) && (e <=0))
-                  )
-               {
-                   e += e1;
-               }
-               else
-               {
-                   y += signdy;
-                   e += e2;
-               }
-               x += signdx;
-           }
-           else
-           {
-               /* Y_AXIS */
-               if (((signdx > 0) && (e < 0)) ||
-                   ((signdx <=0) && (e <=0))
-                  )
-               {
-                   e +=e1;
-               }
-               else
-               {
-                   x += signdx;
-                   e += e2;
-               }
-               y += signdy;
-           }
-
-           lenCur++;
-           if (lenCur >= lenMax && (len || npt <= 1))
-           {
-               nseg++;
-               pseg = CheckDashStorage(&psegBase, nseg, &nsegMax);
-               if (!pseg)
-                   return (miDashPtr)NULL;
-               pseg->pt.x = x;
-               pseg->pt.y = y;
-               pseg->e1 = e1;
-               pseg->e2 = e2;
-               pseg->e = e;
-               which = ~which;
-               pseg->which = which;
-               pseg->newLine = 0;
-
-               /* move on to next dash */
-               iDash++;
-               if (iDash >= nDash)
-                   iDash = 0;
-               lenMax = pDash[iDash];
-               lenCur = 0;
-           }
-       } /* while len-- */
-    } /* while --npt */
-
-    if (lenCur == 0 && nseg != 0)
-    {
-       nseg--;
-       which = ~which;
-    }
-    *pnseg = nseg;
-    pseg = CheckDashStorage(&psegBase, nseg+1, &nsegMax);
-    if (!pseg)
-       return (miDashPtr)NULL;
-    pseg->pt = pt2;
-    pseg->e = base_e;
-    pseg->which = which;
-    pseg->newLine = 0;
-    return psegBase;
-} 
-
-
-#define NSEGDELTA 16
-
-/* returns a pointer to the pseg[nseg-1], growing the storage as
-necessary.  this interface seems unnecessarily cumbersome.
-
-*/
-
-static miDashPtr
-CheckDashStorage(miDashPtr *ppseg, int nseg, int *pnsegMax)
-#if 0
-miDashPtr *ppseg;              /* base pointer */
-int nseg;                      /* number of segment we want to write to */
-int *pnsegMax;                 /* size (in segments) of list so far */
-#endif
-{
-    if (nseg > *pnsegMax)
-    {
-       miDashPtr newppseg;
-
-       *pnsegMax += NSEGDELTA;
-       newppseg = (miDashPtr)g_realloc(*ppseg,
-                                      (*pnsegMax)*sizeof(miDashRec));
-       if (!newppseg)
-       {
-           g_free(*ppseg);
-           return (miDashPtr)NULL;
-       }
-       *ppseg = newppseg;
-    }
-    return(*ppseg+(nseg-1));
-}
-
-void
-miStepDash (int dist, int *pDashIndex, unsigned char *pDash,
-            int numInDashList, int *pDashOffset)
-#if 0
-    int dist;                  /* distance to step */
-    int *pDashIndex;           /* current dash */
-    unsigned char *pDash;      /* dash list */
-    int numInDashList;         /* total length of dash list */
-    int *pDashOffset;          /* offset into current dash */
-#endif
-{
-    int        dashIndex, dashOffset;
-    int totallen;
-    int        i;
-    
-    dashIndex = *pDashIndex;
-    dashOffset = *pDashOffset;
-    if (dist < pDash[dashIndex] - dashOffset)
-    {
-       *pDashOffset = dashOffset + dist;
-       return;
-    }
-    dist -= pDash[dashIndex] - dashOffset;
-    if (++dashIndex == numInDashList)
-       dashIndex = 0;
-    totallen = 0;
-    for (i = 0; i < numInDashList; i++)
-       totallen += pDash[i];
-    if (totallen <= dist)
-       dist = dist % totallen;
-    while (dist >= pDash[dashIndex])
-    {
-       dist -= pDash[dashIndex];
-       if (++dashIndex == numInDashList)
-           dashIndex = 0;
-    }
-    *pDashIndex = dashIndex;
-    *pDashOffset = dist;
-}
diff --git a/gdk/linux-fb/mifillarc.c b/gdk/linux-fb/mifillarc.c
deleted file mode 100644 (file)
index 5f12067..0000000
+++ /dev/null
@@ -1,707 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mifillarc.c,v 3.4 1999/04/11 13:11:20 dawes Exp $ */
-/************************************************************
-
-Copyright 1989, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-Author:  Bob Scheifler, MIT X Consortium
-
-********************************************************/
-
-/* $TOG: mifillarc.c /main/20 1998/02/09 14:46:52 kaleb $ */
-
-#include <config.h>
-#include <math.h>
-#include "mi.h"
-#include "mifillarc.h"
-#include "gdkprivate-fb.h"
-
-#define QUADRANT (90 * 64)
-#define HALFCIRCLE (180 * 64)
-#define QUADRANT3 (270 * 64)
-
-#ifndef M_PI
-#define M_PI   3.14159265358979323846
-#endif
-
-#define Dsin(d)        sin((double)d*(M_PI/11520.0))
-#define Dcos(d)        cos((double)d*(M_PI/11520.0))
-
-void
-miFillArcSetup(register miArc *arc, register miFillArcRec *info)
-{
-    info->y = arc->height >> 1;
-    info->dy = arc->height & 1;
-    info->yorg = arc->y + info->y;
-    info->dx = arc->width & 1;
-    info->xorg = arc->x + (arc->width >> 1) + info->dx;
-    info->dx = 1 - info->dx;
-    if (arc->width == arc->height)
-    {
-       /* (2x - 2xorg)^2 = d^2 - (2y - 2yorg)^2 */
-       /* even: xorg = yorg = 0   odd:  xorg = .5, yorg = -.5 */
-       info->ym = 8;
-       info->xm = 8;
-       info->yk = info->y << 3;
-       if (!info->dx)
-       {
-           info->xk = 0;
-           info->e = -1;
-       }
-       else
-       {
-           info->y++;
-           info->yk += 4;
-           info->xk = -4;
-           info->e = - (info->y << 3);
-       }
-    }
-    else
-    {
-       /* h^2 * (2x - 2xorg)^2 = w^2 * h^2 - w^2 * (2y - 2yorg)^2 */
-       /* even: xorg = yorg = 0   odd:  xorg = .5, yorg = -.5 */
-       info->ym = (arc->width * arc->width) << 3;
-       info->xm = (arc->height * arc->height) << 3;
-       info->yk = info->y * info->ym;
-       if (!info->dy)
-           info->yk -= info->ym >> 1;
-       if (!info->dx)
-       {
-           info->xk = 0;
-           info->e = - (info->xm >> 3);
-       }
-       else
-       {
-           info->y++;
-           info->yk += info->ym;
-           info->xk = -(info->xm >> 1);
-           info->e = info->xk - info->yk;
-       }
-    }
-}
-
-void
-miFillArcDSetup(register miArc *arc, register miFillArcDRec *info)
-{
-    /* h^2 * (2x - 2xorg)^2 = w^2 * h^2 - w^2 * (2y - 2yorg)^2 */
-    /* even: xorg = yorg = 0   odd:  xorg = .5, yorg = -.5 */
-    info->y = arc->height >> 1;
-    info->dy = arc->height & 1;
-    info->yorg = arc->y + info->y;
-    info->dx = arc->width & 1;
-    info->xorg = arc->x + (arc->width >> 1) + info->dx;
-    info->dx = 1 - info->dx;
-    info->ym = ((double)arc->width) * (arc->width * 8);
-    info->xm = ((double)arc->height) * (arc->height * 8);
-    info->yk = info->y * info->ym;
-    if (!info->dy)
-       info->yk -= info->ym / 2.0;
-    if (!info->dx)
-    {
-       info->xk = 0;
-       info->e = - (info->xm / 8.0);
-    }
-    else
-    {
-       info->y++;
-       info->yk += info->ym;
-       info->xk = -info->xm / 2.0;
-       info->e = info->xk - info->yk;
-    }
-}
-
-static void
-miGetArcEdge(register miArc *arc, register miSliceEdgePtr edge, int k,
-             gboolean top, gboolean left)
-{
-    register int xady, y;
-
-    y = arc->height >> 1;
-    if (!(arc->width & 1))
-       y++;
-    if (!top)
-    {
-       y = -y;
-       if (arc->height & 1)
-           y--;
-    }
-    xady = k + y * edge->dx;
-    if (xady <= 0)
-       edge->x = - ((-xady) / edge->dy + 1);
-    else
-       edge->x = (xady - 1) / edge->dy;
-    edge->e = xady - edge->x * edge->dy;
-    if ((top && (edge->dx < 0)) || (!top && (edge->dx > 0)))
-       edge->e = edge->dy - edge->e + 1;
-    if (left)
-       edge->x++;
-    edge->x += arc->x + (arc->width >> 1);
-    if (edge->dx > 0)
-    {
-       edge->deltax = 1;
-       edge->stepx = edge->dx / edge->dy;
-       edge->dx = edge->dx % edge->dy;
-    }
-    else
-    {
-       edge->deltax = -1;
-       edge->stepx = - ((-edge->dx) / edge->dy);
-       edge->dx = (-edge->dx) % edge->dy;
-    }
-    if (!top)
-    {
-       edge->deltax = -edge->deltax;
-       edge->stepx = -edge->stepx;
-    }
-}
-
-void
-miEllipseAngleToSlope (int angle, int width, int height, int *dxp, int *dyp,
-                       double *d_dxp, double *d_dyp)
-{
-    int            dx, dy;
-    double  d_dx, d_dy, scale;
-    gboolean    negative_dx, negative_dy;
-
-    switch (angle) {
-    case 0:
-       *dxp = -1;
-       *dyp = 0;
-       if (d_dxp) {
-           *d_dxp = width / 2.0;
-           *d_dyp = 0;
-       }
-       break;
-    case QUADRANT:
-       *dxp = 0;
-       *dyp = 1;
-       if (d_dxp) {
-           *d_dxp = 0;
-           *d_dyp = - height / 2.0;
-       }
-       break;
-    case HALFCIRCLE:
-       *dxp = 1;
-       *dyp = 0;
-       if (d_dxp) {
-           *d_dxp = - width / 2.0;
-           *d_dyp = 0;
-       }
-       break;
-    case QUADRANT3:
-       *dxp = 0;
-       *dyp = -1;
-       if (d_dxp) {
-           *d_dxp = 0;
-           *d_dyp = height / 2.0;
-       }
-       break;
-    default:
-       d_dx = Dcos(angle) * width;
-       d_dy = Dsin(angle) * height;
-       if (d_dxp) {
-           *d_dxp = d_dx / 2.0;
-           *d_dyp = - d_dy / 2.0;
-       }
-       negative_dx = FALSE;
-       if (d_dx < 0.0)
-       {
-           d_dx = -d_dx;
-           negative_dx = TRUE;
-       }
-       negative_dy = FALSE;
-       if (d_dy < 0.0)
-       {
-           d_dy = -d_dy;
-           negative_dy = TRUE;
-       }
-       scale = d_dx;
-       if (d_dy > d_dx)
-           scale = d_dy;
-       dx = floor ((d_dx * 32768) / scale + 0.5);
-       if (negative_dx)
-           dx = -dx;
-       *dxp = dx;
-       dy = floor ((d_dy * 32768) / scale + 0.5);
-       if (negative_dy)
-           dy = -dy;
-       *dyp = dy;
-       break;
-    }
-}
-
-static void
-miGetPieEdge(register miArc *arc, register int angle,
-             register miSliceEdgePtr edge, gboolean top, gboolean left)
-{
-    register int k;
-    int        dx, dy;
-
-    miEllipseAngleToSlope (angle, arc->width, arc->height, &dx, &dy, NULL, NULL);
-
-    if (dy == 0)
-    {
-       edge->x = left ? -65536 : 65536;
-       edge->stepx = 0;
-       edge->e = 0;
-       edge->dx = -1;
-       return;
-    }
-    if (dx == 0)
-    {
-       edge->x = arc->x + (arc->width >> 1);
-       if (left && (arc->width & 1))
-           edge->x++;
-       else if (!left && !(arc->width & 1))
-           edge->x--;
-       edge->stepx = 0;
-       edge->e = 0;
-       edge->dx = -1;
-       return;
-    }
-    if (dy < 0) {
-       dx = -dx;
-       dy = -dy;
-    }
-    k = (arc->height & 1) ? dx : 0;
-    if (arc->width & 1)
-       k += dy;
-    edge->dx = dx << 1;
-    edge->dy = dy << 1;
-    miGetArcEdge(arc, edge, k, top, left);
-}
-
-void
-miFillArcSliceSetup(register miArc *arc, register miArcSliceRec *slice,
-                    GdkGC *pGC)
-{
-    register int angle1, angle2;
-
-    angle1 = arc->angle1;
-    if (arc->angle2 < 0)
-    {
-       angle2 = angle1;
-       angle1 += arc->angle2;
-    }
-    else
-       angle2 = angle1 + arc->angle2;
-    while (angle1 < 0)
-       angle1 += FULLCIRCLE;
-    while (angle1 >= FULLCIRCLE)
-       angle1 -= FULLCIRCLE;
-    while (angle2 < 0)
-       angle2 += FULLCIRCLE;
-    while (angle2 >= FULLCIRCLE)
-       angle2 -= FULLCIRCLE;
-    slice->min_top_y = 0;
-    slice->max_top_y = arc->height >> 1;
-    slice->min_bot_y = 1 - (arc->height & 1);
-    slice->max_bot_y = slice->max_top_y - 1;
-    slice->flip_top = FALSE;
-    slice->flip_bot = FALSE;
-    if (1 /* pGC->arcMode == ArcPieSlice */)
-    {
-       slice->edge1_top = (angle1 < HALFCIRCLE);
-       slice->edge2_top = (angle2 <= HALFCIRCLE);
-       if ((angle2 == 0) || (angle1 == HALFCIRCLE))
-       {
-           if (angle2 ? slice->edge2_top : slice->edge1_top)
-               slice->min_top_y = slice->min_bot_y;
-           else
-               slice->min_top_y = arc->height;
-           slice->min_bot_y = 0;
-       }
-       else if ((angle1 == 0) || (angle2 == HALFCIRCLE))
-       {
-           slice->min_top_y = slice->min_bot_y;
-           if (angle1 ? slice->edge1_top : slice->edge2_top)
-               slice->min_bot_y = arc->height;
-           else
-               slice->min_bot_y = 0;
-       }
-       else if (slice->edge1_top == slice->edge2_top)
-       {
-           if (angle2 < angle1)
-           {
-               slice->flip_top = slice->edge1_top;
-               slice->flip_bot = !slice->edge1_top;
-           }
-           else if (slice->edge1_top)
-           {
-               slice->min_top_y = 1;
-               slice->min_bot_y = arc->height;
-           }
-           else
-           {
-               slice->min_bot_y = 0;
-               slice->min_top_y = arc->height;
-           }
-       }
-       miGetPieEdge(arc, angle1, &slice->edge1,
-                    slice->edge1_top, !slice->edge1_top);
-       miGetPieEdge(arc, angle2, &slice->edge2,
-                    slice->edge2_top, slice->edge2_top);
-    }
-    else
-    {
-       double w2, h2, x1, y1, x2, y2, dx, dy, scale;
-       int signdx, signdy, y, k;
-       gboolean isInt1 = TRUE, isInt2 = TRUE;
-
-       w2 = (double)arc->width / 2.0;
-       h2 = (double)arc->height / 2.0;
-       if ((angle1 == 0) || (angle1 == HALFCIRCLE))
-       {
-           x1 = angle1 ? -w2 : w2;
-           y1 = 0.0;
-       }
-       else if ((angle1 == QUADRANT) || (angle1 == QUADRANT3))
-       {
-           x1 = 0.0;
-           y1 = (angle1 == QUADRANT) ? h2 : -h2;
-       }
-       else
-       {
-           isInt1 = FALSE;
-           x1 = Dcos(angle1) * w2;
-           y1 = Dsin(angle1) * h2;
-       }
-       if ((angle2 == 0) || (angle2 == HALFCIRCLE))
-       {
-           x2 = angle2 ? -w2 : w2;
-           y2 = 0.0;
-       }
-       else if ((angle2 == QUADRANT) || (angle2 == QUADRANT3))
-       {
-           x2 = 0.0;
-           y2 = (angle2 == QUADRANT) ? h2 : -h2;
-       }
-       else
-       {
-           isInt2 = FALSE;
-           x2 = Dcos(angle2) * w2;
-           y2 = Dsin(angle2) * h2;
-       }
-       dx = x2 - x1;
-       dy = y2 - y1;
-       if (arc->height & 1)
-       {
-           y1 -= 0.5;
-           y2 -= 0.5;
-       }
-       if (arc->width & 1)
-       {
-           x1 += 0.5;
-           x2 += 0.5;
-       }
-       if (dy < 0.0)
-       {
-           dy = -dy;
-           signdy = -1;
-       }
-       else
-           signdy = 1;
-       if (dx < 0.0)
-       {
-           dx = -dx;
-           signdx = -1;
-       }
-       else
-           signdx = 1;
-       if (isInt1 && isInt2)
-       {
-           slice->edge1.dx = dx * 2;
-           slice->edge1.dy = dy * 2;
-       }
-       else
-       {
-           scale = (dx > dy) ? dx : dy;
-           slice->edge1.dx = floor((dx * 32768) / scale + .5);
-           slice->edge1.dy = floor((dy * 32768) / scale + .5);
-       }
-       if (!slice->edge1.dy)
-       {
-           if (signdx < 0)
-           {
-               y = floor(y1 + 1.0);
-               if (y >= 0)
-               {
-                   slice->min_top_y = y;
-                   slice->min_bot_y = arc->height;
-               }
-               else
-               {
-                   slice->max_bot_y = -y - (arc->height & 1);
-               }
-           }
-           else
-           {
-               y = floor(y1);
-               if (y >= 0)
-                   slice->max_top_y = y;
-               else
-               {
-                   slice->min_top_y = arc->height;
-                   slice->min_bot_y = -y - (arc->height & 1);
-               }
-           }
-           slice->edge1_top = TRUE;
-           slice->edge1.x = 65536;
-           slice->edge1.stepx = 0;
-           slice->edge1.e = 0;
-           slice->edge1.dx = -1;
-           slice->edge2 = slice->edge1;
-           slice->edge2_top = FALSE;
-       }
-       else if (!slice->edge1.dx)
-       {
-           if (signdy < 0)
-               x1 -= 1.0;
-           slice->edge1.x = ceil(x1);
-           slice->edge1_top = signdy < 0;
-           slice->edge1.x += arc->x + (arc->width >> 1);
-           slice->edge1.stepx = 0;
-           slice->edge1.e = 0;
-           slice->edge1.dx = -1;
-           slice->edge2_top = !slice->edge1_top;
-           slice->edge2 = slice->edge1;
-       }
-       else
-       {
-           if (signdx < 0)
-               slice->edge1.dx = -slice->edge1.dx;
-           if (signdy < 0)
-               slice->edge1.dx = -slice->edge1.dx;
-           k = ceil(((x1 + x2) * slice->edge1.dy - (y1 + y2) * slice->edge1.dx) / 2.0);
-           slice->edge2.dx = slice->edge1.dx;
-           slice->edge2.dy = slice->edge1.dy;
-           slice->edge1_top = signdy < 0;
-           slice->edge2_top = !slice->edge1_top;
-           miGetArcEdge(arc, &slice->edge1, k,
-                        slice->edge1_top, !slice->edge1_top);
-           miGetArcEdge(arc, &slice->edge2, k,
-                        slice->edge2_top, slice->edge2_top);
-       }
-    }
-}
-
-#define ADDSPANS() \
-    pts->x = xorg - x; \
-    pts->y = yorg - y; \
-    pts->width = slw; \
-    pts++; \
-    if (miFillArcLower(slw)) \
-    { \
-       pts->x = xorg - x; \
-       pts->y = yorg + y + dy; \
-        pts->width = slw; \
-       pts++; \
-    }
-
-static void
-miFillEllipseI(GdkDrawable *pDraw, GdkGC *pGC, miArc *arc)
-{
-    register int x, y, e;
-    int yk, xk, ym, xm, dx, dy, xorg, yorg;
-    int slw;
-    miFillArcRec info;
-    GdkSpan* points;
-    register GdkSpan* pts;
-
-    points = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * arc->height);
-    if (!points)
-       return;
-    miFillArcSetup(arc, &info);
-    MIFILLARCSETUP();
-    pts = points;
-    while (y > 0)
-    {
-       MIFILLARCSTEP(slw);
-       ADDSPANS();
-    }
-    gdk_fb_fill_spans(pDraw, pGC, points, pts - points, FALSE);
-
-    DEALLOCATE_LOCAL(points);
-}
-
-static void
-miFillEllipseD(GdkDrawable *pDraw, GdkGC *pGC, miArc *arc)
-{
-    register int x, y;
-    int xorg, yorg, dx, dy, slw;
-    double e, yk, xk, ym, xm;
-    miFillArcDRec info;
-    GdkSpan* points;
-    register GdkSpan* pts;
-
-    points = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * arc->height);
-    if (!points)
-       return;
-    miFillArcDSetup(arc, &info);
-    MIFILLARCSETUP();
-    pts = points;
-    while (y > 0)
-    {
-       MIFILLARCSTEP(slw);
-       ADDSPANS();
-    }
-    gdk_fb_fill_spans(pDraw, pGC, points, pts - points, FALSE);
-    DEALLOCATE_LOCAL(points);
-}
-
-#define ADDSPAN(l,r) \
-    if (r >= l) \
-    { \
-       pts->x = l; \
-       pts->y = ya; \
-        pts->width = r - l + 1; \
-       pts++; \
-    }
-
-#define ADDSLICESPANS(flip) \
-    if (!flip) \
-    { \
-       ADDSPAN(xl, xr); \
-    } \
-    else \
-    { \
-       xc = xorg - x; \
-       ADDSPAN(xc, xr); \
-       xc += slw - 1; \
-       ADDSPAN(xl, xc); \
-    }
-
-static void
-miFillArcSliceI(GdkDrawable *pDraw, GdkGC *pGC, miArc *arc)
-{
-    int yk, xk, ym, xm, dx, dy, xorg, yorg, slw;
-    register int x, y, e;
-    miFillArcRec info;
-    miArcSliceRec slice;
-    int ya, xl, xr, xc;
-    GdkSpan* points;
-    register GdkSpan* pts;
-
-    miFillArcSetup(arc, &info);
-    miFillArcSliceSetup(arc, &slice, pGC);
-    MIFILLARCSETUP();
-    slw = arc->height;
-    if (slice.flip_top || slice.flip_bot)
-       slw += (arc->height >> 1) + 1;
-    points = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * slw);
-    if (!points)
-       return;
-    pts = points;
-    while (y > 0)
-    {
-       MIFILLARCSTEP(slw);
-       MIARCSLICESTEP(slice.edge1);
-       MIARCSLICESTEP(slice.edge2);
-       if (miFillSliceUpper(slice))
-       {
-           ya = yorg - y;
-           MIARCSLICEUPPER(xl, xr, slice, slw);
-           ADDSLICESPANS(slice.flip_top);
-       }
-       if (miFillSliceLower(slice))
-       {
-           ya = yorg + y + dy;
-           MIARCSLICELOWER(xl, xr, slice, slw);
-           ADDSLICESPANS(slice.flip_bot);
-       }
-    }
-    
-    gdk_fb_fill_spans(pDraw, pGC, points, pts - points, FALSE);
-    DEALLOCATE_LOCAL(points);
-}
-
-static void
-miFillArcSliceD(GdkDrawable *pDraw, GdkGC *pGC, miArc *arc)
-{
-    register int x, y;
-    int dx, dy, xorg, yorg, slw;
-    double e, yk, xk, ym, xm;
-    miFillArcDRec info;
-    miArcSliceRec slice;
-    int ya, xl, xr, xc;
-    GdkSpan* points;
-    register GdkSpan* pts;
-
-    miFillArcDSetup(arc, &info);
-    miFillArcSliceSetup(arc, &slice, pGC);
-    MIFILLARCSETUP();
-    slw = arc->height;
-    if (slice.flip_top || slice.flip_bot)
-       slw += (arc->height >> 1) + 1;
-    points = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * slw);
-    if (!points)
-       return;
-    pts = points;
-    while (y > 0)
-    {
-       MIFILLARCSTEP(slw);
-       MIARCSLICESTEP(slice.edge1);
-       MIARCSLICESTEP(slice.edge2);
-       if (miFillSliceUpper(slice))
-       {
-           ya = yorg - y;
-           MIARCSLICEUPPER(xl, xr, slice, slw);
-           ADDSLICESPANS(slice.flip_top);
-       }
-       if (miFillSliceLower(slice))
-       {
-           ya = yorg + y + dy;
-           MIARCSLICELOWER(xl, xr, slice, slw);
-           ADDSLICESPANS(slice.flip_bot);
-       }
-    }
-    gdk_fb_fill_spans(pDraw, pGC, points, pts - points, FALSE);
-
-    DEALLOCATE_LOCAL(points);
-}
-
-/* MIPOLYFILLARC -- The public entry for the PolyFillArc request.
- * Since we don't have to worry about overlapping segments, we can just
- * fill each arc as it comes.
- */
-void
-miPolyFillArc(GdkDrawable *pDraw, GdkGC *pGC, int narcs, miArc *parcs)
-{
-    register int i;
-    register miArc *arc;
-
-    for(i = narcs, arc = parcs; --i >= 0; arc++)
-    {
-       if (miFillArcEmpty(arc))
-           continue;;
-       if ((arc->angle2 >= FULLCIRCLE) || (arc->angle2 <= -FULLCIRCLE))
-       {
-           if (miCanFillArc(arc))
-               miFillEllipseI(pDraw, pGC, arc);
-           else
-               miFillEllipseD(pDraw, pGC, arc);
-       }
-       else
-       {
-           if (miCanFillArc(arc))
-               miFillArcSliceI(pDraw, pGC, arc);
-           else
-               miFillArcSliceD(pDraw, pGC, arc);
-       }
-    }
-}
diff --git a/gdk/linux-fb/mifillarc.h b/gdk/linux-fb/mifillarc.h
deleted file mode 100644 (file)
index f11c53e..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mifillarc.h,v 3.3 1998/10/04 09:39:27 dawes Exp $ */
-/************************************************************
-
-Copyright 1989, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-********************************************************/
-
-/* $TOG: mifillarc.h /main/11 1998/02/09 14:46:57 kaleb $ */
-
-#ifndef MIFILLARC_H
-#define MIFILLARC_H 1
-
-#define FULLCIRCLE (360 * 64)
-
-typedef struct _miFillArc {
-    int xorg, yorg;
-    int y;
-    int dx, dy;
-    int e;
-    int ym, yk, xm, xk;
-} miFillArcRec;
-
-/* could use 64-bit integers */
-typedef struct _miFillArcD {
-    int xorg, yorg;
-    int y;
-    int dx, dy;
-    double e;
-    double ym, yk, xm, xk;
-} miFillArcDRec;
-
-#define miFillArcEmpty(arc) (!(arc)->angle2 || \
-                            !(arc)->width || !(arc)->height || \
-                            (((arc)->width == 1) && ((arc)->height & 1)))
-
-#define miCanFillArc(arc) (((arc)->width == (arc)->height) || \
-                          (((arc)->width <= 800) && ((arc)->height <= 800)))
-
-#define MIFILLARCSETUP() \
-    x = 0; \
-    y = info.y; \
-    e = info.e; \
-    xk = info.xk; \
-    xm = info.xm; \
-    yk = info.yk; \
-    ym = info.ym; \
-    dx = info.dx; \
-    dy = info.dy; \
-    xorg = info.xorg; \
-    yorg = info.yorg
-
-#define MIFILLARCSTEP(slw) \
-    e += yk; \
-    while (e >= 0) \
-    { \
-       x++; \
-       xk -= xm; \
-       e += xk; \
-    } \
-    y--; \
-    yk -= ym; \
-    slw = (x << 1) + dx; \
-    if ((e == xk) && (slw > 1)) \
-       slw--
-
-#define MIFILLCIRCSTEP(slw) MIFILLARCSTEP(slw)
-#define MIFILLELLSTEP(slw) MIFILLARCSTEP(slw)
-
-#define miFillArcLower(slw) (((y + dy) != 0) && ((slw > 1) || (e != xk)))
-
-typedef struct _miSliceEdge {
-    int            x;
-    int     stepx;
-    int            deltax;
-    int            e;
-    int            dy;
-    int            dx;
-} miSliceEdgeRec, *miSliceEdgePtr;
-
-typedef struct _miArcSlice {
-    miSliceEdgeRec edge1, edge2;
-    int min_top_y, max_top_y;
-    int min_bot_y, max_bot_y;
-    gboolean edge1_top, edge2_top;
-    gboolean flip_top, flip_bot;
-} miArcSliceRec;
-
-#define MIARCSLICESTEP(edge) \
-    edge.x -= edge.stepx; \
-    edge.e -= edge.dx; \
-    if (edge.e <= 0) \
-    { \
-       edge.x -= edge.deltax; \
-       edge.e += edge.dy; \
-    }
-
-#define miFillSliceUpper(slice) \
-               ((y >= slice.min_top_y) && (y <= slice.max_top_y))
-
-#define miFillSliceLower(slice) \
-               ((y >= slice.min_bot_y) && (y <= slice.max_bot_y))
-
-#define MIARCSLICEUPPER(xl,xr,slice,slw) \
-    xl = xorg - x; \
-    xr = xl + slw - 1; \
-    if (slice.edge1_top && (slice.edge1.x < xr)) \
-       xr = slice.edge1.x; \
-    if (slice.edge2_top && (slice.edge2.x > xl)) \
-       xl = slice.edge2.x;
-
-#define MIARCSLICELOWER(xl,xr,slice,slw) \
-    xl = xorg - x; \
-    xr = xl + slw - 1; \
-    if (!slice.edge1_top && (slice.edge1.x > xl)) \
-       xl = slice.edge1.x; \
-    if (!slice.edge2_top && (slice.edge2.x < xr)) \
-       xr = slice.edge2.x;
-
-#define MIWIDEARCSETUP(x,y,dy,slw,e,xk,xm,yk,ym) \
-    x = 0; \
-    y = slw >> 1; \
-    yk = y << 3; \
-    xm = 8; \
-    ym = 8; \
-    if (dy) \
-    { \
-       xk = 0; \
-       if (slw & 1) \
-           e = -1; \
-       else \
-           e = -(y << 2) - 2; \
-    } \
-    else \
-    { \
-       y++; \
-       yk += 4; \
-       xk = -4; \
-       if (slw & 1) \
-           e = -(y << 2) - 3; \
-       else \
-           e = - (y << 3); \
-    }
-
-#define MIFILLINARCSTEP(slw) \
-    ine += inyk; \
-    while (ine >= 0) \
-    { \
-       inx++; \
-       inxk -= inxm; \
-       ine += inxk; \
-    } \
-    iny--; \
-    inyk -= inym; \
-    slw = (inx << 1) + dx; \
-    if ((ine == inxk) && (slw > 1)) \
-       slw--
-
-#define miFillInArcLower(slw) (((iny + dy) != 0) && \
-                              ((slw > 1) || (ine != inxk)))
-
-extern int miFreeArcCache(gpointer data, guint id);
-
-extern struct finalSpan *realAllocSpan(void);
-
-extern void miFillArcSetup(miArc *arc, miFillArcRec *info);
-
-extern void miFillArcDSetup(miArc *arc, miFillArcDRec *info);
-
-extern void miEllipseAngleToSlope(int angle, int width, int height, int *dxp,
-                                  int *dyp, double *d_dxp, double *d_dyp);
-
-extern void miFillArcSliceSetup(miArc *arc, miArcSliceRec *slice, GdkGC* pGC);
-
-#endif
-
diff --git a/gdk/linux-fb/mifpoly.h b/gdk/linux-fb/mifpoly.h
deleted file mode 100644 (file)
index a405fd6..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* $TOG: mifpoly.h /main/10 1998/02/09 14:47:09 kaleb $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#ifndef MIFPOLY_H
-#define MIFPOLY_H 1
-
-#define EPSILON        0.000001
-#define ISEQUAL(a,b) (fabs((a) - (b)) <= EPSILON)
-#define UNEQUAL(a,b) (fabs((a) - (b)) > EPSILON)
-#define WITHINHALF(a, b) (((a) - (b) > 0.0) ? (a) - (b) < 0.5 : \
-                                            (b) - (a) <= 0.5)
-#define ROUNDTOINT(x)   ((int) (((x) > 0.0) ? ((x) + 0.5) : ((x) - 0.5)))
-#define ISZERO(x)      (fabs((x)) <= EPSILON)
-#define PTISEQUAL(a,b) (ISEQUAL(a.x,b.x) && ISEQUAL(a.y,b.y))
-#define PTUNEQUAL(a,b) (UNEQUAL(a.x,b.x) || UNEQUAL(a.y,b.y))
-#define PtEqual(a, b) (((a).x == (b).x) && ((a).y == (b).y))
-
-#define NotEnd         0
-#define FirstEnd       1
-#define SecondEnd      2
-
-#define SQSECANT 108.856472512142 /* 1/sin^2(11/2) - for 11o miter cutoff */
-#define D2SECANT 5.21671526231167 /* 1/2*sin(11/2) - max extension per width */
-
-#ifndef ICIEL
-#ifdef NOINLINEICEIL
-#define ICEIL(x) ((int)ceil(x))
-#else
-#ifdef __GNUC__
-#define ICEIL ICIEL
-static __inline int ICEIL(double x)
-{
-    int _cTmp = x;
-    return ((x == _cTmp) || (x < 0.0)) ? _cTmp : _cTmp+1;
-}
-#else
-#define ICEIL(x) ((((x) == (_cTmp = (x))) || ((x) < 0.0)) ? _cTmp : _cTmp+1)
-#define ICEILTEMPDECL static int _cTmp;
-#endif
-#endif
-#endif
-
-/* Point with sub-pixel positioning.  In this case we use doubles, but
- * see mifpolycon.c for other suggestions 
- */
-typedef struct _SppPoint {
-       double  x, y;
-} SppPointRec, *SppPointPtr;
-
-typedef struct _SppArc {
-       double  x, y, width, height;
-       double  angle1, angle2;
-} SppArcRec, *SppArcPtr;
-
-/* mifpolycon.c */
-
-extern void miFillSppPoly(
-    GdkDrawable* dst,
-    GdkGC* pgc,
-    int count,
-    SppPointPtr ptsIn,
-    int xTrans,
-    int yTrans,
-    double xFtrans,
-    double yFtrans
-);
-
-#endif /* MIFPOLY_H */
diff --git a/gdk/linux-fb/mifpolycon.c b/gdk/linux-fb/mifpolycon.c
deleted file mode 100644 (file)
index 70e4dcd..0000000
+++ /dev/null
@@ -1,257 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: mifpolycon.c /main/13 1998/02/09 14:47:05 kaleb $ */
-#include <config.h>
-#include <math.h>
-#include "mi.h"
-#include "mifpoly.h"
-
-static int
-GetFPolyYBounds(register SppPointPtr pts, int n, double yFtrans, int *by, int *ty);
-
-#ifdef ICEILTEMPDECL
-ICEILTEMPDECL
-#endif
-
-/*
- *     Written by Todd Newman; April. 1987.
- *
- *     Fill a convex polygon.  If the given polygon
- *     is not convex, then the result is undefined.
- *     The algorithm is to order the edges from smallest
- *     y to largest by partitioning the array into a left
- *     edge list and a right edge list.  The algorithm used
- *     to traverse each edge is digital differencing analyzer
- *     line algorithm with y as the major axis. There's some funny linear
- *     interpolation involved because of the subpixel postioning.
- */
-void
-miFillSppPoly(GdkDrawable *dst, GdkGC *pgc, int count, SppPointPtr ptsIn, int xTrans, int yTrans, double xFtrans, double yFtrans)
-#if 0
-    GdkDrawable*       dst;
-    GdkGC*             pgc;
-    int                        count;          /* number of points */
-    SppPointPtr        ptsIn;          /* the points */
-    int                        xTrans, yTrans; /* Translate each point by this */
-    double             xFtrans, yFtrans;       /* translate before conversion
-                                                  by this amount.  This provides
-                                                  a mechanism to match rounding
-                                                  errors with any shape that must
-                                                  meet the polygon exactly.
-                                                */
-#endif
-{
-    double             xl = 0.0, xr = 0.0,     /* x vals of left and right edges */
-                       ml = 0.0,       /* left edge slope */
-                       mr = 0.0,       /* right edge slope */
-                       dy,             /* delta y */
-                       i;              /* loop counter */
-    int                        y,              /* current scanline */
-                       j,
-                       imin,           /* index of vertex with smallest y */
-                       ymin,           /* y-extents of polygon */
-                       ymax,
-                       *Marked;        /* set if this vertex has been used */
-    register int       left, right,    /* indices to first endpoints */
-                       nextleft,
-                       nextright;      /* indices to second endpoints */
-    GdkSpan*           ptsOut,
-      *FirstPoint;     /* output buffer */
-
-    imin = GetFPolyYBounds(ptsIn, count, yFtrans, &ymin, &ymax);
-
-    y = ymax - ymin + 1;
-    if ((count < 3) || (y <= 0))
-       return;
-    ptsOut = FirstPoint = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * y);
-    Marked = (int *) ALLOCATE_LOCAL(sizeof(int) * count);
-
-    if(!ptsOut || !Marked)
-    {
-       if (Marked) DEALLOCATE_LOCAL(Marked);
-       if (ptsOut) DEALLOCATE_LOCAL(ptsOut);
-       return;
-    }
-
-    for(j = 0; j < count; j++)
-       Marked[j] = 0;
-    nextleft = nextright = imin;
-    Marked[imin] = -1;
-    y = ICEIL(ptsIn[nextleft].y + yFtrans);
-
-    /*
-     *  loop through all edges of the polygon
-     */
-    do
-    {
-        /* add a left edge if we need to */
-        if ((y > (ptsIn[nextleft].y + yFtrans) ||
-            ISEQUAL(y, ptsIn[nextleft].y + yFtrans)) &&
-            Marked[nextleft] != 1)
-       {
-           Marked[nextleft]++;
-            left = nextleft++;
-
-            /* find the next edge, considering the end conditions */
-            if (nextleft >= count)
-                nextleft = 0;
-
-            /* now compute the starting point and slope */
-           dy = ptsIn[nextleft].y - ptsIn[left].y;
-           if (dy != 0.0)
-           { 
-               ml = (ptsIn[nextleft].x - ptsIn[left].x) / dy;
-               dy = y - (ptsIn[left].y + yFtrans);
-               xl = (ptsIn[left].x + xFtrans) + ml * MAX(dy, 0); 
-           }
-        }
-
-        /* add a right edge if we need to */
-        if ((y > ptsIn[nextright].y + yFtrans) ||
-            (ISEQUAL(y, ptsIn[nextright].y + yFtrans)
-             && Marked[nextright] != 1))
-       {
-           Marked[nextright]++;
-            right = nextright--;
-
-            /* find the next edge, considering the end conditions */
-            if (nextright < 0)
-                nextright = count - 1;
-
-            /* now compute the starting point and slope */
-           dy = ptsIn[nextright].y - ptsIn[right].y;
-           if (dy != 0.0) 
-           { 
-               mr = (ptsIn[nextright].x - ptsIn[right].x) / dy;
-               dy = y - (ptsIn[right].y + yFtrans); 
-               xr = (ptsIn[right].x + xFtrans) + mr * MAX(dy, 0);
-           }
-        }
-
-
-        /*
-         *  generate scans to fill while we still have
-         *  a right edge as well as a left edge.
-         */
-        i = (MIN(ptsIn[nextleft].y, ptsIn[nextright].y) + yFtrans) - y;
-
-       if (i < EPSILON)
-       {
-           if(Marked[nextleft] && Marked[nextright])
-           {
-               /* Arrgh, we're trapped! (no more points) 
-                * Out, we've got to get out of here before this decadence saps
-                * our will completely! */
-               break;
-           }
-           continue;
-       }
-       else
-       {
-               j = (int) i;
-               if(!j)
-                   j++;
-       }
-        while (j > 0) 
-        {
-           int cxl, cxr;
-
-            ptsOut->y = (y) + yTrans;
-
-           cxl = ICEIL(xl);
-           cxr = ICEIL(xr);
-            /* reverse the edges if necessary */
-            if (xl < xr) 
-            {
-             ptsOut->width = cxr - cxl;
-             (ptsOut++)->x = cxl + xTrans;
-            }
-            else 
-            {
-             ptsOut->width = cxl - cxr;
-             (ptsOut++)->x = cxr + xTrans;
-            }
-            y++;
-
-            /* increment down the edges */
-           xl += ml;
-           xr += mr;
-           j--;
-        }
-    }  while (y <= ymax);
-
-    /* Finally, fill the spans we've collected */
-    gdk_fb_fill_spans(dst, pgc, FirstPoint, ptsOut-FirstPoint, TRUE);
-    DEALLOCATE_LOCAL(Marked);
-    DEALLOCATE_LOCAL(FirstPoint);
-}
-
-\f
-/* Find the index of the point with the smallest y.also return the
- * smallest and largest y */
-static int
-GetFPolyYBounds(register SppPointPtr pts, int n, double yFtrans, int *by, int *ty)
-{
-    register SppPointPtr       ptMin;
-    double                     ymin, ymax;
-    SppPointPtr                        ptsStart = pts;
-
-    ptMin = pts;
-    ymin = ymax = (pts++)->y;
-
-    while (--n > 0) {
-        if (pts->y < ymin)
-       {
-            ptMin = pts;
-            ymin = pts->y;
-        }
-       if(pts->y > ymax)
-            ymax = pts->y;
-
-        pts++;
-    }
-
-    *by = ICEIL(ymin + yFtrans);
-    *ty = ICEIL(ymax + yFtrans - 1);
-    return(ptMin-ptsStart);
-}
diff --git a/gdk/linux-fb/miline.h b/gdk/linux-fb/miline.h
deleted file mode 100644 (file)
index 4ac4695..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-/* $TOG: miline.h /main/7 1998/02/09 14:47:30 kaleb $ */
-
-/*
-
-Copyright 1994, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-*/
-/* $XFree86: xc/programs/Xserver/mi/miline.h,v 1.4 1999/10/13 22:33:11 dawes Exp $ */
-
-#ifndef MILINE_H
-
-/*
- * Public definitions used for configuring basic pixelization aspects
- * of the sample implementation line-drawing routines provided in
- * {mfb,mi,cfb*} at run-time.
- */
-
-#define XDECREASING    4
-#define YDECREASING    2
-#define YMAJOR         1
-
-#define OCTANT1                (1 << (YDECREASING))
-#define OCTANT2                (1 << (YDECREASING|YMAJOR))
-#define OCTANT3                (1 << (XDECREASING|YDECREASING|YMAJOR))
-#define OCTANT4                (1 << (XDECREASING|YDECREASING))
-#define OCTANT5                (1 << (XDECREASING))
-#define OCTANT6                (1 << (XDECREASING|YMAJOR))
-#define OCTANT7                (1 << (YMAJOR))
-#define OCTANT8                (1 << (0))
-
-#define XMAJOROCTANTS          (OCTANT1 | OCTANT4 | OCTANT5 | OCTANT8)
-
-#define DEFAULTZEROLINEBIAS    (OCTANT2 | OCTANT3 | OCTANT4 | OCTANT5)
-
-/*
- * Devices can configure the rendering of routines in mi, mfb, and cfb*
- * by specifying a thin line bias to be applied to a particular screen
- * using the following function.  The bias parameter is an OR'ing of
- * the appropriate OCTANT constants defined above to indicate which
- * octants to bias a line to prefer an axial step when the Bresenham
- * error term is exactly zero.  The octants are mapped as follows:
- *
- *   \    |    /
- *    \ 3 | 2 /
- *     \  |  /
- *    4 \ | / 1
- *       \|/
- *   -----------
- *       /|\
- *    5 / | \ 8
- *     /  |  \
- *    / 6 | 7 \
- *   /    |    \
- *
- * For more information, see "Ambiguities in Incremental Line Rastering,"
- * Jack E. Bresenham, IEEE CG&A, May 1987.
- */
-
-#if 0
-extern void miSetZeroLineBias(
-#if NeedFunctionPrototypes
-    ScreenPtr /* pScreen */,
-    unsigned int /* bias */
-#endif
-);
-#endif
-
-/*
- * Private definitions needed for drawing thin (zero width) lines
- * Used by the mi, mfb, and all cfb* components.
- */
-
-#define X_AXIS 0
-#define Y_AXIS 1
-
-#define OUT_LEFT  0x08
-#define OUT_RIGHT 0x04
-#define OUT_ABOVE 0x02
-#define OUT_BELOW 0x01
-
-#define OUTCODES(_result, _x, _y, _pbox) \
-    if     ( (_x) <  (_pbox)->x1) (_result) |= OUT_LEFT; \
-    else if ( (_x) >= (_pbox)->x2) (_result) |= OUT_RIGHT; \
-    if     ( (_y) <  (_pbox)->y1) (_result) |= OUT_ABOVE; \
-    else if ( (_y) >= (_pbox)->y2) (_result) |= OUT_BELOW;
-
-#define MIOUTCODES(outcode, x, y, xmin, ymin, xmax, ymax) \
-{\
-     if (x < xmin) outcode |= OUT_LEFT;\
-     if (x > xmax) outcode |= OUT_RIGHT;\
-     if (y < ymin) outcode |= OUT_ABOVE;\
-     if (y > ymax) outcode |= OUT_BELOW;\
-}
-  
-#define SWAPINT(i, j) \
-{  register int _t = i;  i = j;  j = _t; }
-
-#define SWAPPT(i, j) \
-{  GdkPoint _t; _t = i;  i = j; j = _t; }
-
-#define SWAPINT_PAIR(x1, y1, x2, y2)\
-{   int t = x1;  x1 = x2;  x2 = t;\
-        t = y1;  y1 = y2;  y2 = t;\
-}
-
-#if 0
-#define miGetZeroLineBias(_pScreen) \
-    ((miZeroLineScreenIndex < 0) ? \
-               0 : ((_pScreen)->devPrivates[miZeroLineScreenIndex].uval))
-#endif
-#define miGetZeroLineBias() DEFAULTZEROLINEBIAS
-
-#define CalcLineDeltas(_x1,_y1,_x2,_y2,_adx,_ady,_sx,_sy,_SX,_SY,_octant) \
-    (_octant) = 0;                             \
-    (_sx) = (_SX);                             \
-    if (((_adx) = (_x2) - (_x1)) < 0) {                \
-       (_adx) = -(_adx);                       \
-       (_sx = -(_sx));                         \
-       (_octant) |= XDECREASING;               \
-    }                                          \
-    (_sy) = (_SY);                             \
-    if (((_ady) = (_y2) - (_y1)) < 0) {                \
-       (_ady) = -(_ady);                       \
-       (_sy = -(_sy));                         \
-       (_octant) |= YDECREASING;               \
-    }
-
-#define SetYMajorOctant(_octant)       ((_octant) |= YMAJOR)
-
-#define FIXUP_ERROR(_e, _octant, _bias) \
-    (_e) -= (((_bias) >> (_octant)) & 1)
-
-#define IsXMajorOctant(_octant)                (!((_octant) & YMAJOR))
-#define IsYMajorOctant(_octant)                ((_octant) & YMAJOR)
-#define IsXDecreasingOctant(_octant)   ((_octant) & XDECREASING)
-#define IsYDecreasingOctant(_octant)   ((_octant) & YDECREASING)
-
-extern int miZeroLineScreenIndex;
-
-extern int miZeroClipLine(
-    int xmin,
-    int ymin,
-    int xmax,
-    int ymax,
-    int * new_x1,
-    int * new_y1,
-    int * new_x2,
-    int * new_y2,
-    unsigned int adx,
-    unsigned int ady,
-    int * pt1_clipped,
-    int * pt2_clipped,
-    int octant,
-    unsigned int bias,
-    int oc1,
-    int oc2
-);
-
-#endif /* MILINE_H */
diff --git a/gdk/linux-fb/mipoly.c b/gdk/linux-fb/mipoly.c
deleted file mode 100644 (file)
index fdb4b5e..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: mipoly.c /main/5 1998/02/09 14:48:16 kaleb $ */
-/*
- *  mipoly.c
- *
- *  Written by Brian Kelleher; June 1986
- *
- *  Draw polygons.  This routine translates the point by the
- *  origin if pGC->miTranslate is non-zero, and calls
- *  to the appropriate routine to actually scan convert the
- *  polygon.
- */
-#include <config.h>
-#include "mi.h"
-
-extern gboolean miFillGeneralPoly(GdkDrawable* dst, GdkGC* pgc,
-                                  int count, GdkPoint* ptsIn);
-
-void
-miFillPolygon(GdkDrawable *dst, register GdkGC *pgc, int shape,
-              int mode, register int count, GdkPoint *pPts)
-{
-    if (count == 0)
-       return;
-
-    miFillGeneralPoly(dst, pgc, count, pPts);
-}
diff --git a/gdk/linux-fb/mipoly.h b/gdk/linux-fb/mipoly.h
deleted file mode 100644 (file)
index 545aa00..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-/* $TOG: mipoly.h /main/6 1998/02/09 14:48:20 kaleb $ */
-/*
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#ifndef MIPOLY_H
-#define MIPOLY_H
-
-#include "miscanfill.h"
-
-/*
- *     fill.h
- *
- *     Created by Brian Kelleher; Oct 1985
- *
- *     Include file for filled polygon routines.
- *
- *     These are the data structures needed to scan
- *     convert regions.  Two different scan conversion
- *     methods are available -- the even-odd method, and
- *     the winding number method.
- *     The even-odd rule states that a point is inside
- *     the polygon if a ray drawn from that point in any
- *     direction will pass through an odd number of
- *     path segments.
- *     By the winding number rule, a point is decided
- *     to be inside the polygon if a ray drawn from that
- *     point in any direction passes through a different
- *     number of clockwise and counter-clockwise path
- *     segments.
- *
- *     These data structures are adapted somewhat from
- *     the algorithm in (Foley/Van Dam) for scan converting
- *     polygons.
- *     The basic algorithm is to start at the top (smallest y)
- *     of the polygon, stepping down to the bottom of
- *     the polygon by incrementing the y coordinate.  We
- *     keep a list of edges which the current scanline crosses,
- *     sorted by x.  This list is called the Active Edge Table (AET)
- *     As we change the y-coordinate, we update each entry in 
- *     in the active edge table to reflect the edges new xcoord.
- *     This list must be sorted at each scanline in case
- *     two edges intersect.
- *     We also keep a data structure known as the Edge Table (ET),
- *     which keeps track of all the edges which the current
- *     scanline has not yet reached.  The ET is basically a
- *     list of ScanLineList structures containing a list of
- *     edges which are entered at a given scanline.  There is one
- *     ScanLineList per scanline at which an edge is entered.
- *     When we enter a new edge, we move it from the ET to the AET.
- *
- *     From the AET, we can implement the even-odd rule as in
- *     (Foley/Van Dam).
- *     The winding number rule is a little trickier.  We also
- *     keep the EdgeTableEntries in the AET linked by the
- *     nextWETE (winding EdgeTableEntry) link.  This allows
- *     the edges to be linked just as before for updating
- *     purposes, but only uses the edges linked by the nextWETE
- *     link as edges representing spans of the polygon to
- *     drawn (as with the even-odd rule).
- */
-
-/*
- * for the winding number rule
- */
-#define CLOCKWISE          1
-#define COUNTERCLOCKWISE  -1 
-
-typedef struct _EdgeTableEntry {
-     int ymax;             /* ycoord at which we exit this edge. */
-     BRESINFO bres;        /* Bresenham info to run the edge     */
-     struct _EdgeTableEntry *next;       /* next in the list     */
-     struct _EdgeTableEntry *back;       /* for insertion sort   */
-     struct _EdgeTableEntry *nextWETE;   /* for winding num rule */
-     int ClockWise;        /* flag for winding number rule       */
-} EdgeTableEntry;
-
-
-typedef struct _ScanLineList{
-     int scanline;              /* the scanline represented */
-     EdgeTableEntry *edgelist;  /* header node              */
-     struct _ScanLineList *next;  /* next in the list       */
-} ScanLineList;
-
-
-typedef struct {
-     int ymax;                 /* ymax for the polygon     */
-     int ymin;                 /* ymin for the polygon     */
-     ScanLineList scanlines;   /* header node              */
-} EdgeTable;
-
-
-/*
- * Here is a struct to help with storage allocation
- * so we can allocate a big chunk at a time, and then take
- * pieces from this heap when we need to.
- */
-#define SLLSPERBLOCK 25
-
-typedef struct _ScanLineListBlock {
-     ScanLineList SLLs[SLLSPERBLOCK];
-     struct _ScanLineListBlock *next;
-} ScanLineListBlock;
-
-/*
- * number of points to buffer before sending them off
- * to scanlines() :  Must be an even number
- */
-#define NUMPTSTOBUFFER 200
-
-\f
-/*
- *
- *     a few macros for the inner loops of the fill code where
- *     performance considerations don't allow a procedure call.
- *
- *     Evaluate the given edge at the given scanline.
- *     If the edge has expired, then we leave it and fix up
- *     the active edge table; otherwise, we increment the
- *     x value to be ready for the next scanline.
- *     The winding number rule is in effect, so we must notify
- *     the caller when the edge has been removed so he
- *     can reorder the Winding Active Edge Table.
- */
-#define EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET) { \
-   if (pAET->ymax == y) {          /* leaving this edge */ \
-      pPrevAET->next = pAET->next; \
-      pAET = pPrevAET->next; \
-      fixWAET = 1; \
-      if (pAET) \
-         pAET->back = pPrevAET; \
-   } \
-   else { \
-      BRESINCRPGONSTRUCT(pAET->bres); \
-      pPrevAET = pAET; \
-      pAET = pAET->next; \
-   } \
-}
-
-
-/*
- *     Evaluate the given edge at the given scanline.
- *     If the edge has expired, then we leave it and fix up
- *     the active edge table; otherwise, we increment the
- *     x value to be ready for the next scanline.
- *     The even-odd rule is in effect.
- */
-#define EVALUATEEDGEEVENODD(pAET, pPrevAET, y) { \
-   if (pAET->ymax == y) {          /* leaving this edge */ \
-      pPrevAET->next = pAET->next; \
-      pAET = pPrevAET->next; \
-      if (pAET) \
-         pAET->back = pPrevAET; \
-   } \
-   else { \
-      BRESINCRPGONSTRUCT(pAET->bres); \
-      pPrevAET = pAET; \
-      pAET = pAET->next; \
-   } \
-}
-
-/* mipolyutil.c */
-
-extern gboolean miInsertEdgeInET(EdgeTable *ET, EdgeTableEntry *ETE, int scanline,
-                                 ScanLineListBlock **SLLBlock, int *iSLLBlock);
-
-extern gboolean miCreateETandAET(int count, GdkPoint* pts, EdgeTable *ET,
-                                 EdgeTableEntry *AET, EdgeTableEntry *pETEs,
-                                 ScanLineListBlock *pSLLBlock);
-
-extern void miloadAET(EdgeTableEntry *AET, EdgeTableEntry *ETEs);
-
-extern void micomputeWAET(EdgeTableEntry *AET);
-
-extern int miInsertionSort(EdgeTableEntry *AET);
-
-extern void miFreeStorage(ScanLineListBlock *pSLLBlock);
-
-#endif
diff --git a/gdk/linux-fb/mipolygen.c b/gdk/linux-fb/mipolygen.c
deleted file mode 100644 (file)
index bb7a4bb..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: mipolygen.c /main/9 1998/02/09 14:47:51 kaleb $ */
-#include <config.h>
-#include "mi.h"
-#include "mipoly.h"
-
-/*
- *
- *     Written by Brian Kelleher;  Oct. 1985
- *
- *     Routine to fill a polygon.  Two fill rules are
- *     supported: frWINDING and frEVENODD.
- *
- *     See fillpoly.h for a complete description of the algorithm.
- */
-
-gboolean
-miFillGeneralPoly(GdkDrawable *dst, GdkGC *pgc, int count, GdkPoint *ptsIn)
-{
-    register EdgeTableEntry *pAET;  /* the Active Edge Table   */
-    register int y;                 /* the current scanline    */
-    register int nPts = 0;          /* number of pts in buffer */
-    register EdgeTableEntry *pWETE; /* Winding Edge Table      */
-    register ScanLineList *pSLL;    /* Current ScanLineList    */
-    register GdkSpan* ptsOut;      /* ptr to output buffers   */
-    GdkSpan FirstPoint[NUMPTSTOBUFFER]; /* the output buffers */
-    EdgeTableEntry *pPrevAET;       /* previous AET entry      */
-    EdgeTable ET;                   /* Edge Table header node  */
-    EdgeTableEntry AET;             /* Active ET header node   */
-    EdgeTableEntry *pETEs;          /* Edge Table Entries buff */
-    ScanLineListBlock SLLBlock;     /* header for ScanLineList */
-    int fixWAET = 0;
-
-    if (count < 3)
-       return(TRUE);
-
-    if(!(pETEs = (EdgeTableEntry *)
-        ALLOCATE_LOCAL(sizeof(EdgeTableEntry) * count)))
-       return(FALSE);
-    ptsOut = FirstPoint;
-    if (!miCreateETandAET(count, ptsIn, &ET, &AET, pETEs, &SLLBlock))
-    {
-       DEALLOCATE_LOCAL(pETEs);
-       return(FALSE);
-    }
-    pSLL = ET.scanlines.next;
-
-    if (0 /* pgc->fillRule == EvenOddRule */)
-    {
-        /*
-         *  for each scanline
-         */
-        for (y = ET.ymin; y < ET.ymax; y++) 
-        {
-            /*
-             *  Add a new edge to the active edge table when we
-             *  get to the next edge.
-             */
-            if (pSLL && y == pSLL->scanline) 
-            {
-                miloadAET(&AET, pSLL->edgelist);
-                pSLL = pSLL->next;
-            }
-            pPrevAET = &AET;
-            pAET = AET.next;
-
-            /*
-             *  for each active edge
-             */
-            while (pAET) 
-            {
-                ptsOut->x = pAET->bres.minor;
-               ptsOut->width = pAET->next->bres.minor - pAET->bres.minor;
-               ptsOut++->y = y;
-                nPts++;
-
-                /*
-                 *  send out the buffer when its full
-                 */
-                if (nPts == NUMPTSTOBUFFER) 
-               {
-                 gdk_fb_fill_spans(dst, pgc, FirstPoint, nPts, TRUE);
-                 ptsOut = FirstPoint;
-                 nPts = 0;
-                }
-                EVALUATEEDGEEVENODD(pAET, pPrevAET, y)
-                EVALUATEEDGEEVENODD(pAET, pPrevAET, y);
-            }
-            miInsertionSort(&AET);
-        }
-    }
-    else      /* default to WindingNumber */
-    {
-        /*
-         *  for each scanline
-         */
-        for (y = ET.ymin; y < ET.ymax; y++) 
-        {
-            /*
-             *  Add a new edge to the active edge table when we
-             *  get to the next edge.
-             */
-            if (pSLL && y == pSLL->scanline) 
-            {
-                miloadAET(&AET, pSLL->edgelist);
-                micomputeWAET(&AET);
-                pSLL = pSLL->next;
-            }
-            pPrevAET = &AET;
-            pAET = AET.next;
-            pWETE = pAET;
-
-            /*
-             *  for each active edge
-             */
-            while (pAET) 
-            {
-                /*
-                 *  if the next edge in the active edge table is
-                 *  also the next edge in the winding active edge
-                 *  table.
-                 */
-                if (pWETE == pAET) 
-                {
-                    ptsOut->x = pAET->bres.minor;
-                   ptsOut->width = pAET->nextWETE->bres.minor - pAET->bres.minor;
-                   ptsOut++->y = y;
-                    nPts++;
-
-                    /*
-                     *  send out the buffer
-                     */
-                    if (nPts == NUMPTSTOBUFFER) 
-                    {
-                     gdk_fb_fill_spans(dst, pgc, FirstPoint, nPts, TRUE);
-                     ptsOut = FirstPoint;
-                     nPts = 0;
-                    }
-
-                    pWETE = pWETE->nextWETE;
-                    while (pWETE != pAET)
-                        EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET);
-                    pWETE = pWETE->nextWETE;
-                }
-                EVALUATEEDGEWINDING(pAET, pPrevAET, y, fixWAET);
-            }
-
-            /*
-             *  reevaluate the Winding active edge table if we
-             *  just had to resort it or if we just exited an edge.
-             */
-            if (miInsertionSort(&AET) || fixWAET) 
-            {
-                micomputeWAET(&AET);
-                fixWAET = 0;
-            }
-        }
-    }
-
-    /*
-     *     Get any spans that we missed by buffering
-     */
-    if(nPts > 0)
-      gdk_fb_fill_spans(dst, pgc, FirstPoint, nPts, TRUE);
-    DEALLOCATE_LOCAL(pETEs);
-    miFreeStorage(SLLBlock.next);
-    return(TRUE);
-}
diff --git a/gdk/linux-fb/mipolyutil.c b/gdk/linux-fb/mipolyutil.c
deleted file mode 100644 (file)
index 7f0a187..0000000
+++ /dev/null
@@ -1,381 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mipolyutil.c,v 1.7 1998/10/04 09:39:31 dawes Exp $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: mipolyutil.c /main/6 1998/02/09 14:48:12 kaleb $ */
-#include <config.h>
-#include <limits.h>
-#include "mi.h"
-#include "miscanfill.h"
-#include "mipoly.h"
-
-/*
- *     fillUtils.c
- *
- *     Written by Brian Kelleher;  Oct. 1985
- *
- *     This module contains all of the utility functions
- *     needed to scan convert a polygon.
- *
- */
-\f
-/*
- *     InsertEdgeInET
- *
- *     Insert the given edge into the edge table.
- *     First we must find the correct bucket in the
- *     Edge table, then find the right slot in the
- *     bucket.  Finally, we can insert it.
- *
- */
-gboolean
-miInsertEdgeInET(EdgeTable *ET, EdgeTableEntry *ETE, int scanline,
-                 ScanLineListBlock **SLLBlock, int *iSLLBlock)
-{
-    register EdgeTableEntry *start, *prev;
-    register ScanLineList *pSLL, *pPrevSLL;
-    ScanLineListBlock *tmpSLLBlock;
-
-    /*
-     * find the right bucket to put the edge into
-     */
-    pPrevSLL = &ET->scanlines;
-    pSLL = pPrevSLL->next;
-    while (pSLL && (pSLL->scanline < scanline)) 
-    {
-        pPrevSLL = pSLL;
-        pSLL = pSLL->next;
-    }
-
-    /*
-     * reassign pSLL (pointer to ScanLineList) if necessary
-     */
-    if ((!pSLL) || (pSLL->scanline > scanline)) 
-    {
-        if (*iSLLBlock > SLLSPERBLOCK-1) 
-        {
-            tmpSLLBlock = 
-                 (ScanLineListBlock *)g_malloc(sizeof(ScanLineListBlock));
-           if (!tmpSLLBlock)
-               return FALSE;
-            (*SLLBlock)->next = tmpSLLBlock;
-            tmpSLLBlock->next = (ScanLineListBlock *)NULL;
-            *SLLBlock = tmpSLLBlock;
-            *iSLLBlock = 0;
-        }
-        pSLL = &((*SLLBlock)->SLLs[(*iSLLBlock)++]);
-
-        pSLL->next = pPrevSLL->next;
-        pSLL->edgelist = (EdgeTableEntry *)NULL;
-        pPrevSLL->next = pSLL;
-    }
-    pSLL->scanline = scanline;
-
-    /*
-     * now insert the edge in the right bucket
-     */
-    prev = (EdgeTableEntry *)NULL;
-    start = pSLL->edgelist;
-    while (start && (start->bres.minor < ETE->bres.minor)) 
-    {
-        prev = start;
-        start = start->next;
-    }
-    ETE->next = start;
-
-    if (prev)
-        prev->next = ETE;
-    else
-        pSLL->edgelist = ETE;
-    return TRUE;
-}
-\f
-/*
- *     CreateEdgeTable
- *
- *     This routine creates the edge table for
- *     scan converting polygons. 
- *     The Edge Table (ET) looks like:
- *
- *    EdgeTable
- *     --------
- *    |  ymax  |        ScanLineLists
- *    |scanline|-->------------>-------------->...
- *     --------   |scanline|   |scanline|
- *                |edgelist|   |edgelist|
- *                ---------    ---------
- *                    |             |
- *                    |             |
- *                    V             V
- *              list of ETEs   list of ETEs
- *
- *     where ETE is an EdgeTableEntry data structure,
- *     and there is one ScanLineList per scanline at
- *     which an edge is initially entered.
- *
- */
-
-gboolean
-miCreateETandAET(register int count, register GdkPoint *pts, EdgeTable *ET,
-                 EdgeTableEntry *AET, register EdgeTableEntry *pETEs,
-                 ScanLineListBlock *pSLLBlock)
-{
-    register GdkPoint* top, *bottom;
-    register GdkPoint* PrevPt, *CurrPt;
-    int iSLLBlock = 0;
-
-    int dy;
-
-    if (count < 2)  return TRUE;
-
-    /*
-     *  initialize the Active Edge Table
-     */
-    AET->next = (EdgeTableEntry *)NULL;
-    AET->back = (EdgeTableEntry *)NULL;
-    AET->nextWETE = (EdgeTableEntry *)NULL;
-    AET->bres.minor = INT_MIN;
-
-    /*
-     *  initialize the Edge Table.
-     */
-    ET->scanlines.next = (ScanLineList *)NULL;
-    ET->ymax = INT_MIN;
-    ET->ymin = INT_MAX;
-    pSLLBlock->next = (ScanLineListBlock *)NULL;
-
-    PrevPt = &pts[count-1];
-
-    /*
-     *  for each vertex in the array of points.
-     *  In this loop we are dealing with two vertices at
-     *  a time -- these make up one edge of the polygon.
-     */
-    while (count--) 
-    {
-        CurrPt = pts++;
-
-        /*
-         *  find out which point is above and which is below.
-         */
-        if (PrevPt->y > CurrPt->y) 
-        {
-            bottom = PrevPt, top = CurrPt;
-            pETEs->ClockWise = 0;
-        }
-        else 
-        {
-            bottom = CurrPt, top = PrevPt;
-            pETEs->ClockWise = 1;
-        }
-
-        /*
-         * don't add horizontal edges to the Edge table.
-         */
-        if (bottom->y != top->y) 
-        {
-            pETEs->ymax = bottom->y-1;  /* -1 so we don't get last scanline */
-
-            /*
-             *  initialize integer edge algorithm
-             */
-            dy = bottom->y - top->y;
-            BRESINITPGONSTRUCT(dy, top->x, bottom->x, pETEs->bres);
-
-            if (!miInsertEdgeInET(ET, pETEs, top->y, &pSLLBlock, &iSLLBlock))
-           {
-               miFreeStorage(pSLLBlock->next);
-               return FALSE;
-           }
-
-            ET->ymax = MAX(ET->ymax, PrevPt->y);
-            ET->ymin = MIN(ET->ymin, PrevPt->y);
-            pETEs++;
-        }
-
-        PrevPt = CurrPt;
-    }
-    return TRUE;
-}
-\f
-/*
- *     loadAET
- *
- *     This routine moves EdgeTableEntries from the
- *     EdgeTable into the Active Edge Table,
- *     leaving them sorted by smaller x coordinate.
- *
- */
-
-void
-miloadAET(register EdgeTableEntry *AET, register EdgeTableEntry *ETEs)
-{
-    register EdgeTableEntry *pPrevAET;
-    register EdgeTableEntry *tmp;
-
-    pPrevAET = AET;
-    AET = AET->next;
-    while (ETEs) 
-    {
-        while (AET && (AET->bres.minor < ETEs->bres.minor)) 
-        {
-            pPrevAET = AET;
-            AET = AET->next;
-        }
-        tmp = ETEs->next;
-        ETEs->next = AET;
-        if (AET)
-            AET->back = ETEs;
-        ETEs->back = pPrevAET;
-        pPrevAET->next = ETEs;
-        pPrevAET = ETEs;
-
-        ETEs = tmp;
-    }
-}
-\f
-/*
- *     computeWAET
- *
- *     This routine links the AET by the
- *     nextWETE (winding EdgeTableEntry) link for
- *     use by the winding number rule.  The final 
- *     Active Edge Table (AET) might look something
- *     like:
- *
- *     AET
- *     ----------  ---------   ---------
- *     |ymax    |  |ymax    |  |ymax    | 
- *     | ...    |  |...     |  |...     |
- *     |next    |->|next    |->|next    |->...
- *     |nextWETE|  |nextWETE|  |nextWETE|
- *     ---------   ---------   ^--------
- *         |                   |       |
- *         V------------------->       V---> ...
- *
- */
-void
-micomputeWAET(register EdgeTableEntry *AET)
-{
-    register EdgeTableEntry *pWETE;
-    register int inside = 1;
-    register int isInside = 0;
-
-    AET->nextWETE = (EdgeTableEntry *)NULL;
-    pWETE = AET;
-    AET = AET->next;
-    while (AET) 
-    {
-        if (AET->ClockWise)
-            isInside++;
-        else
-            isInside--;
-
-        if ((!inside && !isInside) ||
-            ( inside &&  isInside)) 
-        {
-            pWETE->nextWETE = AET;
-            pWETE = AET;
-            inside = !inside;
-        }
-        AET = AET->next;
-    }
-    pWETE->nextWETE = (EdgeTableEntry *)NULL;
-}
-\f
-/*
- *     InsertionSort
- *
- *     Just a simple insertion sort using
- *     pointers and back pointers to sort the Active
- *     Edge Table.
- *
- */
-
-int
-miInsertionSort(register EdgeTableEntry *AET)
-{
-    register EdgeTableEntry *pETEchase;
-    register EdgeTableEntry *pETEinsert;
-    register EdgeTableEntry *pETEchaseBackTMP;
-    register int changed = 0;
-
-    AET = AET->next;
-    while (AET) 
-    {
-        pETEinsert = AET;
-        pETEchase = AET;
-        while (pETEchase->back->bres.minor > AET->bres.minor)
-            pETEchase = pETEchase->back;
-
-        AET = AET->next;
-        if (pETEchase != pETEinsert) 
-        {
-            pETEchaseBackTMP = pETEchase->back;
-            pETEinsert->back->next = AET;
-            if (AET)
-                AET->back = pETEinsert->back;
-            pETEinsert->next = pETEchase;
-            pETEchase->back->next = pETEinsert;
-            pETEchase->back = pETEinsert;
-            pETEinsert->back = pETEchaseBackTMP;
-            changed = 1;
-        }
-    }
-    return(changed);
-}
-\f
-/*
- *     Clean up our act.
- */
-void
-miFreeStorage(register ScanLineListBlock *pSLLBlock)
-{
-    register ScanLineListBlock   *tmpSLLBlock;
-
-    while (pSLLBlock) 
-    {
-        tmpSLLBlock = pSLLBlock->next;
-        g_free(pSLLBlock);
-        pSLLBlock = tmpSLLBlock;
-    }
-}
diff --git a/gdk/linux-fb/miscanfill.h b/gdk/linux-fb/miscanfill.h
deleted file mode 100644 (file)
index c9e1f50..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-/* $TOG: miscanfill.h /main/6 1998/02/09 14:48:35 kaleb $ */
-/*
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-
-#ifndef SCANFILLINCLUDED
-#define SCANFILLINCLUDED
-/*
- *     scanfill.h
- *
- *     Written by Brian Kelleher; Jan 1985
- *
- *     This file contains a few macros to help track
- *     the edge of a filled object.  The object is assumed
- *     to be filled in scanline order, and thus the
- *     algorithm used is an extension of Bresenham's line
- *     drawing algorithm which assumes that y is always the
- *     major axis.
- *     Since these pieces of code are the same for any filled shape,
- *     it is more convenient to gather the library in one
- *     place, but since these pieces of code are also in
- *     the inner loops of output primitives, procedure call
- *     overhead is out of the question.
- *     See the author for a derivation if needed.
- */
-\f
-
-/*
- *  In scan converting polygons, we want to choose those pixels
- *  which are inside the polygon.  Thus, we add .5 to the starting
- *  x coordinate for both left and right edges.  Now we choose the
- *  first pixel which is inside the pgon for the left edge and the
- *  first pixel which is outside the pgon for the right edge.
- *  Draw the left pixel, but not the right.
- *
- *  How to add .5 to the starting x coordinate:
- *      If the edge is moving to the right, then subtract dy from the
- *  error term from the general form of the algorithm.
- *      If the edge is moving to the left, then add dy to the error term.
- *
- *  The reason for the difference between edges moving to the left
- *  and edges moving to the right is simple:  If an edge is moving
- *  to the right, then we want the algorithm to flip immediately.
- *  If it is moving to the left, then we don't want it to flip until
- *  we traverse an entire pixel.
- */
-#define BRESINITPGON(dy, x1, x2, xStart, d, m, m1, incr1, incr2) { \
-    int dx;      /* local storage */ \
-\
-    /* \
-     *  if the edge is horizontal, then it is ignored \
-     *  and assumed not to be processed.  Otherwise, do this stuff. \
-     */ \
-    if ((dy) != 0) { \
-        xStart = (x1); \
-        dx = (x2) - xStart; \
-        if (dx < 0) { \
-            m = dx / (dy); \
-            m1 = m - 1; \
-            incr1 = -2 * dx + 2 * (dy) * m1; \
-            incr2 = -2 * dx + 2 * (dy) * m; \
-            d = 2 * m * (dy) - 2 * dx - 2 * (dy); \
-        } else { \
-            m = dx / (dy); \
-            m1 = m + 1; \
-            incr1 = 2 * dx - 2 * (dy) * m1; \
-            incr2 = 2 * dx - 2 * (dy) * m; \
-            d = -2 * m * (dy) + 2 * dx; \
-        } \
-    } \
-}
-\f
-#define BRESINCRPGON(d, minval, m, m1, incr1, incr2) { \
-    if (m1 > 0) { \
-        if (d > 0) { \
-            minval += m1; \
-            d += incr1; \
-        } \
-        else { \
-            minval += m; \
-            d += incr2; \
-        } \
-    } else {\
-        if (d >= 0) { \
-            minval += m1; \
-            d += incr1; \
-        } \
-        else { \
-            minval += m; \
-            d += incr2; \
-        } \
-    } \
-}
-
-\f
-/*
- *     This structure contains all of the information needed
- *     to run the bresenham algorithm.
- *     The variables may be hardcoded into the declarations
- *     instead of using this structure to make use of
- *     register declarations.
- */
-typedef struct {
-    int minor;         /* minor axis        */
-    int d;           /* decision variable */
-    int m, m1;       /* slope and slope+1 */
-    int incr1, incr2; /* error increments */
-} BRESINFO;
-
-
-#define BRESINITPGONSTRUCT(dmaj, min1, min2, bres) \
-       BRESINITPGON(dmaj, min1, min2, bres.minor, bres.d, \
-                     bres.m, bres.m1, bres.incr1, bres.incr2)
-
-#define BRESINCRPGONSTRUCT(bres) \
-        BRESINCRPGON(bres.d, bres.minor, bres.m, bres.m1, bres.incr1, bres.incr2)
-
-
-#endif
diff --git a/gdk/linux-fb/mispans.c b/gdk/linux-fb/mispans.c
deleted file mode 100644 (file)
index dbcefaf..0000000
+++ /dev/null
@@ -1,483 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mispans.c,v 3.1 1998/10/04 09:39:33 dawes Exp $ */
-/***********************************************************
-
-Copyright 1989, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/* $TOG: mispans.c /main/7 1998/02/09 14:48:44 kaleb $ */
-
-#include <config.h>
-#include "mi.h"
-#include "mispans.h"
-#include <string.h>            /* for memmove */
-
-/*
-
-These routines maintain lists of Spans, in order to implement the
-``touch-each-pixel-once'' rules of wide lines and arcs.
-
-Written by Joel McCormack, Summer 1989.
-
-*/
-
-
-void miInitSpanGroup(SpanGroup *spanGroup)
-{
-    spanGroup->size = 0;
-    spanGroup->count = 0;
-    spanGroup->group = NULL;
-    spanGroup->ymin = SHRT_MAX;
-    spanGroup->ymax = SHRT_MIN;
-} /* InitSpanGroup */
-
-#define YMIN(spans) (spans->points[0].y)
-#define YMAX(spans)  (spans->points[spans->count-1].y)
-
-void miSubtractSpans (SpanGroup *spanGroup, Spans *sub)
-{
-    int                i, subCount, spansCount;
-    int                ymin, ymax, xmin, xmax;
-    Spans      *spans;
-    GdkSpan*   subPt, *spansPt;
-    int                extra;
-
-    ymin = YMIN(sub);
-    ymax = YMAX(sub);
-    spans = spanGroup->group;
-    for (i = spanGroup->count; i; i--, spans++) {
-       if (YMIN(spans) <= ymax && ymin <= YMAX(spans)) {
-           subCount = sub->count;
-           subPt = sub->points;
-           spansCount = spans->count;
-           spansPt = spans->points;
-           extra = 0;
-           for (;;)
-           {
-               while (spansCount && spansPt->y < subPt->y)
-               {
-                   spansPt++; spansCount--;
-               }
-               if (!spansCount)
-                   break;
-               while (subCount && subPt->y < spansPt->y)
-               {
-                   subPt++; subCount--;
-               }
-               if (!subCount)
-                   break;
-               if (subPt->y == spansPt->y)
-               {
-                   xmin = subPt->x;
-                   xmax = xmin + subPt->width;
-                   if (xmin >= (spansPt->x + spansPt->width) || spansPt->x >= xmax)
-                   {
-                       ;
-                   }
-                   else if (xmin <= spansPt->x)
-                   {
-                       if (xmax >= (spansPt->x + spansPt->width))
-                       {
-                           g_memmove (spansPt, spansPt + 1, sizeof *spansPt * (spansCount - 1));
-                           spansPt--;
-                           spans->count--;
-                           extra++;
-                       }
-                       else 
-                       {
-                         spansPt->width -= xmax - spansPt->x;
-                         spansPt->x = xmax;
-                       }
-                   }
-                   else
-                   {
-                       if (xmax >= (spansPt->x + spansPt->width))
-                       {
-                         spansPt->width = xmin - spansPt->x;
-                       }
-                       else
-                       {
-                           if (!extra) {
-                               GdkSpan* newPt;
-
-#define EXTRA 8
-                               newPt = (GdkSpan*) g_realloc (spans->points, (spans->count + EXTRA) * sizeof (GdkSpan));
-                               if (!newPt)
-                                   break;
-                               spansPt = newPt + (spansPt - spans->points);
-                               spans->points = newPt;
-                               extra = EXTRA;
-                           }
-                           g_memmove (spansPt + 1, spansPt, sizeof *spansPt * (spansCount));
-                           spans->count++;
-                           extra--;
-                           spansPt->width = xmin - spansPt->x;
-                           spansPt++;
-                           spansPt->width -= xmax - spansPt->x;
-                           spansPt->x = xmax;
-                       }
-                   }
-               }
-               spansPt++; spansCount--;
-           }
-       }
-    }
-}
-    
-void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup, Spans *spans)
-{
-    register    int ymin, ymax;
-    register    int spansCount;
-
-    spansCount = spans->count;
-    if (spansCount > 0) {
-       if (spanGroup->size == spanGroup->count) {
-           spanGroup->size = (spanGroup->size + 8) * 2;
-           spanGroup->group = (Spans *)
-               g_realloc(spanGroup->group, sizeof(Spans) * spanGroup->size);
-        }
-
-       spanGroup->group[spanGroup->count] = *spans;
-       (spanGroup->count)++;
-       ymin = spans->points[0].y;
-       if (ymin < spanGroup->ymin) spanGroup->ymin = ymin;
-       ymax = spans->points[spansCount - 1].y;
-       if (ymax > spanGroup->ymax) spanGroup->ymax = ymax;
-       if (otherGroup &&
-           otherGroup->ymin < ymax &&
-           ymin < otherGroup->ymax)
-       {
-           miSubtractSpans (otherGroup, spans);
-       }
-    }
-    else
-    {
-       g_free (spans->points);
-    }
-} /* AppendSpans */
-
-void miFreeSpanGroup(SpanGroup *spanGroup)
-{
-    g_free(spanGroup->group);
-}
-
-static void QuickSortSpansX(register GdkSpan points[], register int numSpans)
-{
-    register int           x;
-    register int           i, j, m;
-    register GdkSpan*    r;
-
-/* Always called with numSpans > 1 */
-/* Sorts only by x, as all y should be the same */
-
-#define ExchangeSpans(a, b)                                \
-{                                                          \
-    GdkSpan     tpt;                               \
-                                                           \
-    tpt = points[a]; points[a] = points[b]; points[b] = tpt;    \
-}
-
-    do {
-       if (numSpans < 9) {
-           /* Do insertion sort */
-           register int xprev;
-
-           xprev = points[0].x;
-           i = 1;
-           do { /* while i != numSpans */
-               x = points[i].x;
-               if (xprev > x) {
-                   /* points[i] is out of order.  Move into proper location. */
-                   GdkSpan tpt;
-                   int     k;
-
-                   for (j = 0; x >= points[j].x; j++) {}
-                   tpt = points[i];
-                   for (k = i; k != j; k--) {
-                       points[k] = points[k-1];
-                   }
-                   points[j] = tpt;
-                   x = points[i].x;
-               } /* if out of order */
-               xprev = x;
-               i++;
-           } while (i != numSpans);
-           return;
-       }
-
-       /* Choose partition element, stick in location 0 */
-       m = numSpans / 2;
-       if (points[m].x > points[0].x)          ExchangeSpans(m, 0);
-       if (points[m].x > points[numSpans-1].x) ExchangeSpans(m, numSpans-1);
-       if (points[m].x > points[0].x)          ExchangeSpans(m, 0);
-       x = points[0].x;
-
-        /* Partition array */
-        i = 0;
-        j = numSpans;
-        do {
-           r = &(points[i]);
-           do {
-               r++;
-               i++;
-            } while (i != numSpans && r->x < x);
-           r = &(points[j]);
-           do {
-               r--;
-               j--;
-            } while (x < r->x);
-            if (i < j) ExchangeSpans(i, j);
-        } while (i < j);
-
-        /* Move partition element back to middle */
-        ExchangeSpans(0, j);
-
-       /* Recurse */
-        if (numSpans-j-1 > 1)
-           QuickSortSpansX(&points[j+1], numSpans-j-1);
-        numSpans = j;
-    } while (numSpans > 1);
-} /* QuickSortSpans */
-
-
-static int UniquifySpansX(Spans *spans, register GdkSpan *newPoints)
-{
-    register int newx1, newx2, oldpt, i, y;
-    GdkSpan    *oldPoints, *startNewPoints = newPoints;
-
-/* Always called with numSpans > 1 */
-/* Uniquify the spans, and stash them into newPoints and newWidths.  Return the
-   number of unique spans. */
-
-
-    oldPoints = spans->points;
-
-    y = oldPoints->y;
-    newx1 = oldPoints->x;
-    newx2 = newx1 + oldPoints->width;
-
-    for (i = spans->count-1; i != 0; i--) {
-       oldPoints++;
-       oldpt = oldPoints->x;
-       if (oldpt > newx2) {
-           /* Write current span, start a new one */
-           newPoints->x = newx1;
-           newPoints->y = y;
-           newPoints->width = newx2 - newx1;
-           newPoints++;
-           newx1 = oldpt;
-           newx2 = oldpt + oldPoints->width;
-       } else {
-           /* extend current span, if old extends beyond new */
-           oldpt = oldpt + oldPoints->width;
-           if (oldpt > newx2) newx2 = oldpt;
-       }
-    } /* for */
-
-    /* Write final span */
-    newPoints->x = newx1;
-    newPoints->width = newx2 - newx1;
-    newPoints->y = y;
-
-    return (newPoints - startNewPoints) + 1;
-} /* UniquifySpansX */
-
-void
-miDisposeSpanGroup (SpanGroup *spanGroup)
-{
-    int            i;
-    Spans   *spans;
-
-    for (i = 0; i < spanGroup->count; i++)
-    {
-       spans = spanGroup->group + i;
-       g_free (spans->points);
-    }
-}
-
-void miFillUniqueSpanGroup(GdkDrawable *pDraw, GdkGC *pGC, SpanGroup *spanGroup)
-{
-    register int    i;
-    register Spans  *spans;
-    register Spans  *yspans;
-    register int    *ysizes;
-    register int    ymin, ylength;
-
-    /* Outgoing spans for one big call to FillSpans */
-    register GdkSpan*    points;
-    register int           count;
-
-    if (spanGroup->count == 0) return;
-
-    if (spanGroup->count == 1) {
-       /* Already should be sorted, unique */
-       spans = spanGroup->group;
-       gdk_fb_fill_spans(pDraw, pGC, spans->points, spans->count, TRUE);
-       g_free(spans->points);
-    }
-    else
-    {
-       /* Yuck.  Gross.  Radix sort into y buckets, then sort x and uniquify */
-       /* This seems to be the fastest thing to do.  I've tried sorting on
-          both x and y at the same time rather than creating into all those
-          y buckets, but it was somewhat slower. */
-
-       ymin    = spanGroup->ymin;
-       ylength = spanGroup->ymax - ymin + 1;
-
-       /* Allocate Spans for y buckets */
-       yspans = (Spans *) g_malloc(ylength * sizeof(Spans));
-       ysizes = (int *) g_malloc(ylength * sizeof (int));
-
-       if (!yspans || !ysizes)
-       {
-           g_free (yspans);
-           g_free (ysizes);
-           miDisposeSpanGroup (spanGroup);
-           return;
-       }
-       
-       for (i = 0; i != ylength; i++) {
-           ysizes[i]        = 0;
-           yspans[i].count  = 0;
-           yspans[i].points = NULL;
-       }
-
-       /* Go through every single span and put it into the correct bucket */
-       count = 0;
-       for (i = 0, spans = spanGroup->group;
-               i != spanGroup->count;
-               i++, spans++) {
-           int         index;
-           int         j;
-
-           for (j = 0, points = spans->points;
-                j != spans->count;
-                j++, points++) {
-               index = points->y - ymin;
-               if (index >= 0 && index < ylength) {
-                   Spans *newspans = &(yspans[index]);
-                   if (newspans->count == ysizes[index]) {
-                       GdkSpan* newpoints;
-                       ysizes[index] = (ysizes[index] + 8) * 2;
-                       newpoints = (GdkSpan*) g_realloc(
-                           newspans->points,
-                           ysizes[index] * sizeof(GdkSpan));
-                       if (!newpoints)
-                       {
-                           int i;
-
-                           for (i = 0; i < ylength; i++)
-                           {
-                               g_free (yspans[i].points);
-                           }
-                           g_free (yspans);
-                           g_free (ysizes);
-                           miDisposeSpanGroup (spanGroup);
-                           return;
-                       }
-                       newspans->points = newpoints;
-                   }
-                   newspans->points[newspans->count] = *points;
-                   (newspans->count)++;
-               } /* if y value of span in range */
-           } /* for j through spans */
-           count += spans->count;
-           g_free(spans->points);
-           spans->points = NULL;
-       } /* for i thorough Spans */
-
-       /* Now sort by x and uniquify each bucket into the final array */
-       points = (GdkSpan*) g_malloc(count * sizeof(GdkSpan));
-       if (!points)
-       {
-           int i;
-
-           for (i = 0; i < ylength; i++)
-           {
-               g_free (yspans[i].points);
-           }
-           g_free (yspans);
-           g_free (ysizes);
-           g_free (points);
-           return;
-       }
-       count = 0;
-       for (i = 0; i != ylength; i++) {
-           int ycount = yspans[i].count;
-           if (ycount > 0) {
-               if (ycount > 1) {
-                   QuickSortSpansX(yspans[i].points, ycount);
-                   count += UniquifySpansX
-                       (&(yspans[i]), &(points[count]));
-               } else {
-                   points[count] = yspans[i].points[0];
-                   count++;
-               }
-               g_free(yspans[i].points);
-           }
-       }
-
-       gdk_fb_fill_spans(pDraw, pGC, points, count, TRUE);
-       g_free(points);
-       g_free(yspans);
-       g_free(ysizes);         /* use (DE)ALLOCATE_LOCAL for these? */
-    }
-
-    spanGroup->count = 0;
-    spanGroup->ymin = SHRT_MAX;
-    spanGroup->ymax = SHRT_MIN;
-}
-
-
-void miFillSpanGroup(GdkDrawable *pDraw, GdkGC *pGC, SpanGroup *spanGroup)
-{
-    register int    i;
-    register Spans  *spans;
-
-    for (i = 0, spans = spanGroup->group; i != spanGroup->count; i++, spans++) {
-      gdk_fb_fill_spans(pDraw, pGC, spans->points, spans->count, TRUE);
-      g_free(spans->points);
-    }
-
-    spanGroup->count = 0;
-    spanGroup->ymin = SHRT_MAX;
-    spanGroup->ymax = SHRT_MIN;
-} /* FillSpanGroup */
diff --git a/gdk/linux-fb/mispans.h b/gdk/linux-fb/mispans.h
deleted file mode 100644 (file)
index f46c44d..0000000
+++ /dev/null
@@ -1,87 +0,0 @@
-/***********************************************************
-
-Copyright 1989, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1989 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-/* $TOG: mispans.h /main/5 1998/02/09 14:48:48 kaleb $ */
-
-typedef struct {
-    int         count;         /* number of spans                  */
-    GdkSpan* points;           /* pointer to list of start points  */
-} Spans;
-
-typedef struct {
-    int                size;           /* Total number of *Spans allocated     */
-    int                count;          /* Number of *Spans actually in group   */
-    Spans       *group;                /* List of Spans                        */
-    int                ymin, ymax;     /* Min, max y values encountered        */
-} SpanGroup;
-
-/* Initialize SpanGroup.  MUST BE DONE before use. */
-extern void miInitSpanGroup(SpanGroup *spanGroup);
-
-/* Add a Spans to a SpanGroup. The spans MUST BE in y-sorted order */
-extern void miAppendSpans(SpanGroup *spanGroup, SpanGroup *otherGroup,
-                          Spans *spans);
-
-/* Paint a span group, possibly with some overlap */
-extern void miFillSpanGroup(GdkDrawable* pDraw, GdkGC* pGC,
-                            SpanGroup *spanGroup);
-
-/* Paint a span group, insuring that each pixel is painted at most once */
-extern void miFillUniqueSpanGroup(GdkDrawable* pDraw, GdkGC* pGC,
-                                  SpanGroup *spanGroup);
-
-/* Free up data in a span group.  MUST BE DONE or you'll suffer memory leaks */
-extern void miFreeSpanGroup(SpanGroup *spanGroup);
-
-extern void miSubtractSpans(SpanGroup *spanGroup, Spans *sub);
-
-extern void miDisposeSpanGroup(SpanGroup *spanGroup);
-
-extern int miClipSpans(GdkRegion* prgnDst, GdkPoint* ppt,
-                       int *pwidth, int nspans, GdkPoint* pptNew,
-                       int *pwidthNew, int fSorted);
-
-/* Rops which must use span groups */
-#define miSpansCarefulRop(rop) (((rop) & 0xc) == 0x8 || ((rop) & 0x3) == 0x2)
-#define miSpansEasyRop(rop)    (!miSpansCarefulRop(rop))
-
diff --git a/gdk/linux-fb/mistruct.h b/gdk/linux-fb/mistruct.h
deleted file mode 100644 (file)
index ff5d738..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-/* $TOG: mistruct.h /main/4 1998/02/09 14:49:07 kaleb $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-#ifndef MISTRUCT_H
-#define MISTRUCT_H
-
-#include "mitypes.h"
-
-/* information about dashes */
-typedef struct _miDash {
-    GdkPoint   pt;
-    int                e1, e2; /* keep these, so we don't have to do it again */
-    int                e;      /* bresenham error term for this point on line */
-    int                which;
-    int                newLine;/* 0 if part of same original line as previous dash */
-} miDashRec;
-
-#endif /* MISTRUCT_H */
diff --git a/gdk/linux-fb/mitypes.h b/gdk/linux-fb/mitypes.h
deleted file mode 100644 (file)
index 527e0dc..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-#ifndef MITYPES_H
-#define MITYPES_H
-
-#include <alloca.h>
-
-#define ALLOCATE_LOCAL(size) alloca((int)(size))
-#define DEALLOCATE_LOCAL(ptr)  /* as nothing */
-
-#include <stdlib.h>
-#include <glib.h>
-#include <gdk/gdk.h>
-#include <gdkfb.h>
-#include <gdkprivate-fb.h>
-#include <gdkregion-generic.h>
-
-typedef struct _miDash *miDashPtr;
-
-#define CT_NONE                 0
-#define CT_PIXMAP               1
-#define CT_REGION               2
-#define CT_UNSORTED             6
-#define CT_YSORTED              10
-#define CT_YXSORTED             14
-#define CT_YXBANDED             18
-
-#define PixmapBytePad(w, d) (w)
-#define BitmapBytePad(w) (w)
-
-typedef struct _miArc {
-    gint16 x, y;
-    guint16   width, height;
-    gint16   angle1, angle2;
-} miArc;
-
-#define SCRRIGHT(x, n) ((x)>>(n))
-
-#endif /* MITYPES_H */
diff --git a/gdk/linux-fb/miwideline.c b/gdk/linux-fb/miwideline.c
deleted file mode 100644 (file)
index 508dfa3..0000000
+++ /dev/null
@@ -1,2028 +0,0 @@
-/* $TOG: miwideline.c /main/60 1998/03/07 17:40:23 kaleb $ */
-/*
-
-Copyright 1988, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/programs/Xserver/mi/miwideline.c,v 1.7 1999/10/13 22:33:13 dawes Exp $ */
-
-/* Author:  Keith Packard, MIT X Consortium */
-
-/*
- * Mostly integer wideline code.  Uses a technique similar to
- * bresenham zero-width lines, except walks an X edge
- */
-
-#include <config.h>
-#include <stdio.h>
-#ifdef _XOPEN_SOURCE
-#include <math.h>
-#else
-#define _XOPEN_SOURCE  /* to get prototype for hypot on some systems */
-#include <math.h>
-#undef _XOPEN_SOURCE
-#endif
-
-#include "mi.h"
-#include "miwideline.h"
-
-#ifdef ICEILTEMPDECL
-ICEILTEMPDECL
-#endif
-
-static void
-miLineArc (GdkDrawable *pDraw, GdkGC *pGC, GdkColor *pixel, SpanDataPtr spanData,
-       LineFacePtr leftFace, LineFacePtr rightFace, double xorg, double yorg, gboolean isInt);
-
-/*
- * spans-based polygon filler
- */
-
-void
-miFillPolyHelper (GdkDrawable *pDrawable, GdkGC *pGC, GdkColor *pixel,
-                  SpanDataPtr spanData, int y, int overall_height,
-                 PolyEdgePtr left, PolyEdgePtr right, int left_count,
-                  int right_count)
-{
-    register int left_x = 0, left_e = 0;
-    int        left_stepx = 0;
-    int        left_signdx = 0;
-    int        left_dy = 0, left_dx = 0;
-
-    register int right_x = 0, right_e = 0;
-    int        right_stepx = 0;
-    int        right_signdx = 0;
-    int        right_dy = 0, right_dx = 0;
-
-    int        height = 0;
-    int        left_height = 0, right_height = 0;
-
-    register GdkSpan* ppt;
-    GdkSpan* pptInit = NULL;
-    GdkColor           oldPixel;
-    int                xorg;
-    Spans      spanRec;
-
-    left_height = 0;
-    right_height = 0;
-    
-    if (!spanData)
-    {
-       pptInit = (GdkSpan*) ALLOCATE_LOCAL (overall_height * sizeof(*ppt));
-       if (!pptInit)
-           return;
-       ppt = pptInit;
-       oldPixel = GDK_GC_FBDATA(pGC)->values.foreground;
-       if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, pixel);
-       }
-    }
-    else
-    {
-       spanRec.points = (GdkSpan*) g_malloc (overall_height * sizeof (*ppt));
-       if (!spanRec.points)
-           return;
-       ppt = spanRec.points;
-    }
-
-    xorg = 0;
-    while ((left_count || left_height) &&
-          (right_count || right_height))
-    {
-       MIPOLYRELOADLEFT
-       MIPOLYRELOADRIGHT
-
-       height = left_height;
-       if (height > right_height)
-           height = right_height;
-
-       left_height -= height;
-       right_height -= height;
-
-       while (--height >= 0)
-       {
-           if (right_x >= left_x)
-           {
-               ppt->y = y;
-               ppt->x = left_x + xorg;
-               ppt->width = right_x - left_x + 1;
-               ppt++;
-           }
-           y++;
-       
-           MIPOLYSTEPLEFT
-
-           MIPOLYSTEPRIGHT
-       }
-    }
-    if (!spanData)
-    {
-      gdk_fb_fill_spans(pDrawable, pGC, pptInit, ppt - pptInit, TRUE);
-      DEALLOCATE_LOCAL (pptInit);
-      if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, &oldPixel);
-       }
-    }
-    else
-    {
-       spanRec.count = ppt - spanRec.points;
-       AppendSpanGroup (pGC, pixel, &spanRec, spanData)
-    }
-}
-
-static void
-miFillRectPolyHelper (GdkDrawable *pDrawable, GdkGC *pGC, GdkColor *pixel,
-                      SpanDataPtr spanData, int x, int y, int w, int h)
-{
-    register GdkSpan* ppt;
-    GdkColor   oldPixel;
-    Spans      spanRec;
-
-    if (!spanData)
-    {
-       oldPixel = GDK_GC_FBDATA(pGC)->values.foreground;
-       if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, pixel);
-       }
-        gdk_fb_draw_rectangle(pDrawable, pGC, TRUE, x, y, w, h);
-       if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, &oldPixel);
-       }
-    }
-    else
-    {
-       spanRec.points = (GdkSpan*) g_malloc (h * sizeof (*ppt));
-       if (!spanRec.points)
-           return;
-       ppt = spanRec.points;
-
-       while (h--)
-       {
-           ppt->x = x;
-           ppt->y = y;
-           ppt->width = w;
-           ppt++;
-           y++;
-       }
-       spanRec.count = ppt - spanRec.points;
-       AppendSpanGroup (pGC, pixel, &spanRec, spanData)
-    }
-}
-
-/* static */ int
-miPolyBuildEdge (double x0, double y0, double k, register int dx,
-                 register int dy, int xi, int yi, int left,
-                 register PolyEdgePtr edge)
-{
-    int            x, y, e;
-    int            xady;
-
-    if (dy < 0)
-    {
-       dy = -dy;
-       dx = -dx;
-       k = -k;
-    }
-
-#ifdef NOTDEF
-    {
-       double  realk, kerror;
-       realk = x0 * dy - y0 * dx;
-       kerror = Fabs (realk - k);
-       if (kerror > .1)
-           printf ("realk: %g k: %g\n", realk, k);
-    }
-#endif
-    y = ICEIL (y0);
-    xady = ICEIL (k) + y * dx;
-
-    if (xady <= 0)
-       x = - (-xady / dy) - 1;
-    else
-       x = (xady - 1) / dy;
-
-    e = xady - x * dy;
-
-    if (dx >= 0)
-    {
-       edge->signdx = 1;
-       edge->stepx = dx / dy;
-       edge->dx = dx % dy;
-    }
-    else
-    {
-       edge->signdx = -1;
-       edge->stepx = - (-dx / dy);
-       edge->dx = -dx % dy;
-       e = dy - e + 1;
-    }
-    edge->dy = dy;
-    edge->x = x + left + xi;
-    edge->e = e - dy;  /* bias to compare against 0 instead of dy */
-    return y + yi;
-}
-
-#define StepAround(v, incr, max) (((v) + (incr) < 0) ? (max - 1) : ((v) + (incr) == max) ? 0 : ((v) + (incr)))
-
-/* static */ int
-miPolyBuildPoly (register PolyVertexPtr vertices, register PolySlopePtr slopes,
-                 int count, int xi, int yi, PolyEdgePtr left, PolyEdgePtr right,
-                 int *pnleft, int *pnright, int *h)
-{
-    int            top, bottom;
-    double  miny, maxy;
-    register int i;
-    int            j;
-    int            clockwise;
-    int            slopeoff;
-    register int s;
-    register int nright, nleft;
-    int            y, lasty = 0, bottomy, topy = 0;
-
-    /* find the top of the polygon */
-    maxy = miny = vertices[0].y;
-    bottom = top = 0;
-    for (i = 1; i < count; i++)
-    {
-       if (vertices[i].y < miny)
-       {
-           top = i;
-           miny = vertices[i].y;
-       }
-       if (vertices[i].y >= maxy)
-       {
-           bottom = i;
-           maxy = vertices[i].y;
-       }
-    }
-    clockwise = 1;
-    slopeoff = 0;
-
-    i = top;
-    j = StepAround (top, -1, count);
-
-    if (slopes[j].dy * slopes[i].dx > slopes[i].dy * slopes[j].dx)
-    {
-       clockwise = -1;
-       slopeoff = -1;
-    }
-
-    bottomy = ICEIL (maxy) + yi;
-
-    nright = 0;
-
-    s = StepAround (top, slopeoff, count);
-    i = top;
-    while (i != bottom)
-    {
-       if (slopes[s].dy != 0)
-       {
-           y = miPolyBuildEdge (vertices[i].x, vertices[i].y,
-                       slopes[s].k,
-                       slopes[s].dx, slopes[s].dy,
-                       xi, yi, 0,
-                       &right[nright]);
-           if (nright != 0)
-               right[nright-1].height = y - lasty;
-           else
-               topy = y;
-           nright++;
-           lasty = y;
-       }
-
-       i = StepAround (i, clockwise, count);
-       s = StepAround (s, clockwise, count);
-    }
-    if (nright != 0)
-       right[nright-1].height = bottomy - lasty;
-
-    if (slopeoff == 0)
-       slopeoff = -1;
-    else
-       slopeoff = 0;
-
-    nleft = 0;
-    s = StepAround (top, slopeoff, count);
-    i = top;
-    while (i != bottom)
-    {
-       if (slopes[s].dy != 0)
-       {
-           y = miPolyBuildEdge (vertices[i].x, vertices[i].y,
-                          slopes[s].k,
-                          slopes[s].dx,  slopes[s].dy, xi, yi, 1,
-                          &left[nleft]);
-    
-           if (nleft != 0)
-               left[nleft-1].height = y - lasty;
-           nleft++;
-           lasty = y;
-       }
-       i = StepAround (i, -clockwise, count);
-       s = StepAround (s, -clockwise, count);
-    }
-    if (nleft != 0)
-       left[nleft-1].height = bottomy - lasty;
-    *pnleft = nleft;
-    *pnright = nright;
-    *h = bottomy - topy;
-    return topy;
-}
-
-static void
-miLineOnePoint (GdkDrawable *pDrawable, GdkGC *pGC, GdkColor *pixel,
-                SpanDataPtr spanData, int x, int y)
-{
-    GdkColor oldPixel;
-    GdkSpan  span;
-
-    MILINESETPIXEL (pDrawable, pGC, pixel, oldPixel);
-    span.x = x;
-    span.y = y;
-    span.width = 1;
-
-    gdk_fb_fill_spans(pDrawable, pGC, &span, 1, TRUE);
-    MILINERESETPIXEL (pDrawable, pGC, pixel, oldPixel);
-}
-
-static void
-miLineJoin (GdkDrawable *pDrawable, GdkGC *pGC, GdkColor *pixel,
-            SpanDataPtr spanData, LineFacePtr pLeft, LineFacePtr pRight)
-{
-    double         mx, my;
-    double         denom = 0.0;
-    PolyVertexRec   vertices[4];
-    PolySlopeRec    slopes[4];
-    int                    edgecount;
-    PolyEdgeRec            left[4], right[4];
-    int                    nleft, nright;
-    int                    y, height;
-    int                    swapslopes;
-    int                    joinStyle = GDK_GC_FBDATA(pGC)->values.join_style;
-    int                    lw = GDK_GC_FBDATA(pGC)->values.line_width;
-
-    if (lw == 1 && !spanData) {
-       /* Lines going in the same direction have no join */
-       if (pLeft->dx >= 0 == pRight->dx <= 0)
-           return;
-       if (joinStyle != GDK_JOIN_ROUND) {
-           denom = - pLeft->dx * (double)pRight->dy + pRight->dx * (double)pLeft->dy;
-           if (denom == 0)
-               return; /* no join to draw */
-       }
-       if (joinStyle != GDK_JOIN_MITER) {
-           miLineOnePoint (pDrawable, pGC, pixel, spanData, pLeft->x, pLeft->y);
-           return;
-       }
-    } else {
-       if (joinStyle == GDK_JOIN_ROUND)
-       {
-           miLineArc(pDrawable, pGC, pixel, spanData,
-                     pLeft, pRight,
-                     (double)0.0, (double)0.0, TRUE);
-           return;
-       }
-       denom = - pLeft->dx * (double)pRight->dy + pRight->dx * (double)pLeft->dy;
-       if (denom == 0.0)
-           return;     /* no join to draw */
-    }
-
-    swapslopes = 0;
-    if (denom > 0)
-    {
-       pLeft->xa = -pLeft->xa;
-       pLeft->ya = -pLeft->ya;
-       pLeft->dx = -pLeft->dx;
-       pLeft->dy = -pLeft->dy;
-    }
-    else
-    {
-       swapslopes = 1;
-       pRight->xa = -pRight->xa;
-       pRight->ya = -pRight->ya;
-       pRight->dx = -pRight->dx;
-       pRight->dy = -pRight->dy;
-    }
-
-    vertices[0].x = pRight->xa;
-    vertices[0].y = pRight->ya;
-    slopes[0].dx = -pRight->dy;
-    slopes[0].dy =  pRight->dx;
-    slopes[0].k = 0;
-
-    vertices[1].x = 0;
-    vertices[1].y = 0;
-    slopes[1].dx =  pLeft->dy;
-    slopes[1].dy = -pLeft->dx;
-    slopes[1].k = 0;
-
-    vertices[2].x = pLeft->xa;
-    vertices[2].y = pLeft->ya;
-
-    if (joinStyle == GDK_JOIN_MITER)
-    {
-       my = (pLeft->dy  * (pRight->xa * pRight->dy - pRight->ya * pRight->dx) -
-              pRight->dy * (pLeft->xa  * pLeft->dy  - pLeft->ya  * pLeft->dx )) /
-             denom;
-       if (pLeft->dy != 0)
-       {
-           mx = pLeft->xa + (my - pLeft->ya) *
-                           (double) pLeft->dx / (double) pLeft->dy;
-       }
-       else
-       {
-           mx = pRight->xa + (my - pRight->ya) *
-                           (double) pRight->dx / (double) pRight->dy;
-       }
-       /* check miter limit */
-       if ((mx * mx + my * my) * 4 > SQSECANT * lw * lw)
-           joinStyle = GDK_JOIN_BEVEL;
-    }
-
-    if (joinStyle == GDK_JOIN_MITER)
-    {
-       slopes[2].dx = pLeft->dx;
-       slopes[2].dy = pLeft->dy;
-       slopes[2].k =  pLeft->k;
-       if (swapslopes)
-       {
-           slopes[2].dx = -slopes[2].dx;
-           slopes[2].dy = -slopes[2].dy;
-           slopes[2].k  = -slopes[2].k;
-       }
-       vertices[3].x = mx;
-       vertices[3].y = my;
-       slopes[3].dx = pRight->dx;
-       slopes[3].dy = pRight->dy;
-       slopes[3].k  = pRight->k;
-       if (swapslopes)
-       {
-           slopes[3].dx = -slopes[3].dx;
-           slopes[3].dy = -slopes[3].dy;
-           slopes[3].k  = -slopes[3].k;
-       }
-       edgecount = 4;
-    }
-    else
-    {
-       double  scale, dx, dy, adx, ady;
-
-       adx = dx = pRight->xa - pLeft->xa;
-       ady = dy = pRight->ya - pLeft->ya;
-       if (adx < 0)
-           adx = -adx;
-       if (ady < 0)
-           ady = -ady;
-       scale = ady;
-       if (adx > ady)
-           scale = adx;
-       slopes[2].dx = (dx * 65536) / scale;
-       slopes[2].dy = (dy * 65536) / scale;
-       slopes[2].k = ((pLeft->xa + pRight->xa) * slopes[2].dy -
-                      (pLeft->ya + pRight->ya) * slopes[2].dx) / 2.0;
-       edgecount = 3;
-    }
-
-    y = miPolyBuildPoly (vertices, slopes, edgecount, pLeft->x, pLeft->y,
-                  left, right, &nleft, &nright, &height);
-    miFillPolyHelper (pDrawable, pGC, pixel, spanData, y, height, left, right, nleft, nright);
-}
-
-static int
-miLineArcI (GdkDrawable *pDraw, GdkGC *pGC, int xorg, int yorg, GdkSpan *points)
-{
-    register GdkSpan* tpts, *bpts;
-    register int x, y, e, ex, slw;
-
-    tpts = points;
-    slw = GDK_GC_FBDATA(pGC)->values.line_width;
-    if (slw == 1)
-    {
-       tpts->x = xorg;
-       tpts->y = yorg;
-       tpts->width = 1;
-       return 1;
-    }
-    bpts = tpts + slw;
-    y = (slw >> 1) + 1;
-    if (slw & 1)
-       e = - ((y << 2) + 3);
-    else
-       e = - (y << 3);
-    ex = -4;
-    x = 0;
-    while (y)
-    {
-       e += (y << 3) - 4;
-       while (e >= 0)
-       {
-           x++;
-           e += (ex = -((x << 3) + 4));
-       }
-       y--;
-       slw = (x << 1) + 1;
-       if ((e == ex) && (slw > 1))
-           slw--;
-       tpts->x = xorg - x;
-       tpts->y = yorg - y;
-       tpts->width = slw;
-       tpts++;
-       if ((y != 0) && ((slw > 1) || (e != ex)))
-       {
-           bpts--;
-           bpts->x = xorg - x;
-           bpts->y = yorg + y;
-           bpts->width = slw;
-       }
-    }
-    return (GDK_GC_FBDATA(pGC)->values.line_width);
-}
-
-#define CLIPSTEPEDGE(edgey,edge,edgeleft) \
-    if (ybase == edgey) \
-    { \
-       if (edgeleft) \
-       { \
-           if (edge->x > xcl) \
-               xcl = edge->x; \
-       } \
-       else \
-       { \
-           if (edge->x < xcr) \
-               xcr = edge->x; \
-       } \
-       edgey++; \
-       edge->x += edge->stepx; \
-       edge->e += edge->dx; \
-       if (edge->e > 0) \
-       { \
-           edge->x += edge->signdx; \
-           edge->e -= edge->dy; \
-       } \
-    }
-
-static int
-miLineArcD (GdkDrawable *pDraw, GdkGC *pGC, double xorg, double yorg, GdkSpan *points,
-           PolyEdgePtr edge1, int edgey1, gboolean edgeleft1,
-            PolyEdgePtr edge2, int edgey2, gboolean edgeleft2)
-{
-    register GdkSpan* pts;
-    double radius, x0, y0, el, er, yk, xlk, xrk, k;
-    int xbase, ybase, y, boty, xl, xr, xcl, xcr;
-    int ymin, ymax;
-    gboolean edge1IsMin, edge2IsMin;
-    int ymin1, ymin2;
-
-    pts = points;
-    xbase = floor(xorg);
-    x0 = xorg - xbase;
-    ybase = ICEIL (yorg);
-    y0 = yorg - ybase;
-    xlk = x0 + x0 + 1.0;
-    xrk = x0 + x0 - 1.0;
-    yk = y0 + y0 - 1.0;
-    radius = ((double)GDK_GC_FBDATA(pGC)->values.line_width) / 2.0;
-    y = floor(radius - y0 + 1.0);
-    ybase -= y;
-    ymin = ybase;
-    ymax = 65536;
-    edge1IsMin = FALSE;
-    ymin1 = edgey1;
-    if (edge1->dy >= 0)
-    {
-       if (!edge1->dy)
-       {
-           if (edgeleft1)
-               edge1IsMin = TRUE;
-           else
-               ymax = edgey1;
-           edgey1 = 65536;
-       }
-       else
-       {
-           if ((edge1->signdx < 0) == edgeleft1)
-               edge1IsMin = TRUE;
-       }
-    }
-    edge2IsMin = FALSE;
-    ymin2 = edgey2;
-    if (edge2->dy >= 0)
-    {
-       if (!edge2->dy)
-       {
-           if (edgeleft2)
-               edge2IsMin = TRUE;
-           else
-               ymax = edgey2;
-           edgey2 = 65536;
-       }
-       else
-       {
-           if ((edge2->signdx < 0) == edgeleft2)
-               edge2IsMin = TRUE;
-       }
-    }
-    if (edge1IsMin)
-    {
-       ymin = ymin1;
-       if (edge2IsMin && ymin1 > ymin2)
-           ymin = ymin2;
-    } else if (edge2IsMin)
-       ymin = ymin2;
-    el = radius * radius - ((y + y0) * (y + y0)) - (x0 * x0);
-    er = el + xrk;
-    xl = 1;
-    xr = 0;
-    if (x0 < 0.5)
-    {
-       xl = 0;
-       el -= xlk;
-    }
-    boty = (y0 < -0.5) ? 1 : 0;
-    if (ybase + y - boty > ymax)
-       boty = ymax - ybase - y;
-    while (y > boty)
-    {
-       k = (y << 1) + yk;
-       er += k;
-       while (er > 0.0)
-       {
-           xr++;
-           er += xrk - (xr << 1);
-       }
-       el += k;
-       while (el >= 0.0)
-       {
-           xl--;
-           el += (xl << 1) - xlk;
-       }
-       y--;
-       ybase++;
-       if (ybase < ymin)
-           continue;
-       xcl = xl + xbase;
-       xcr = xr + xbase;
-       CLIPSTEPEDGE(edgey1, edge1, edgeleft1);
-       CLIPSTEPEDGE(edgey2, edge2, edgeleft2);
-       if (xcr >= xcl)
-       {
-           pts->x = xcl;
-           pts->y = ybase;
-           pts->width = xcr - xcl + 1;
-           pts++;
-       }
-    }
-    er = xrk - (xr << 1) - er;
-    el = (xl << 1) - xlk - el;
-    boty = floor(-y0 - radius + 1.0);
-    if (ybase + y - boty > ymax)
-       boty = ymax - ybase - y;
-    while (y > boty)
-    {
-       k = (y << 1) + yk;
-       er -= k;
-       while ((er >= 0.0) && (xr >= 0))
-       {
-           xr--;
-           er += xrk - (xr << 1);
-       }
-       el -= k;
-       while ((el > 0.0) && (xl <= 0))
-       {
-           xl++;
-           el += (xl << 1) - xlk;
-       }
-       y--;
-       ybase++;
-       if (ybase < ymin)
-           continue;
-       xcl = xl + xbase;
-       xcr = xr + xbase;
-       CLIPSTEPEDGE(edgey1, edge1, edgeleft1);
-       CLIPSTEPEDGE(edgey2, edge2, edgeleft2);
-       if (xcr >= xcl)
-       {
-           pts->x = xcl;
-           pts->y = ybase;
-           pts->width = xcr - xcl + 1;
-           pts++;
-       }
-    }
-    return (pts - points);
-}
-
-int
-miRoundJoinFace (register LineFacePtr face, register PolyEdgePtr edge,
-                 gboolean *leftEdge)
-{
-    int            y;
-    int            dx, dy;
-    double  xa, ya;
-    gboolean   left;
-
-    dx = -face->dy;
-    dy = face->dx;
-    xa = face->xa;
-    ya = face->ya;
-    left = 1;
-    if (ya > 0)
-    {
-       ya = 0.0;
-       xa = 0.0;
-    }
-    if (dy < 0 || (dy == 0 && dx > 0))
-    {
-       dx = -dx;
-       dy = -dy;
-       left = !left;
-    }
-    if (dx == 0 && dy == 0)
-       dy = 1;
-    if (dy == 0)
-    {
-       y = ICEIL (face->ya) + face->y;
-       edge->x = -32767;
-       edge->stepx = 0;
-       edge->signdx = 0;
-       edge->e = -1;
-       edge->dy = 0;
-       edge->dx = 0;
-       edge->height = 0;
-    }
-    else
-    {
-       y = miPolyBuildEdge (xa, ya, 0.0, dx, dy, face->x, face->y, !left, edge);
-       edge->height = 32767;
-    }
-    *leftEdge = !left;
-    return y;
-}
-
-void
-miRoundJoinClip (register LineFacePtr pLeft, register LineFacePtr pRight,
-                 PolyEdgePtr edge1, PolyEdgePtr edge2, int *y1, int *y2,
-                 gboolean *left1, gboolean *left2)
-{
-    double     denom;
-
-    denom = - pLeft->dx * (double)pRight->dy + pRight->dx * (double)pLeft->dy;
-
-    if (denom >= 0)
-    {
-       pLeft->xa = -pLeft->xa;
-       pLeft->ya = -pLeft->ya;
-    }
-    else
-    {
-       pRight->xa = -pRight->xa;
-       pRight->ya = -pRight->ya;
-    }
-    *y1 = miRoundJoinFace (pLeft, edge1, left1);
-    *y2 = miRoundJoinFace (pRight, edge2, left2);
-}
-
-int
-miRoundCapClip (register LineFacePtr face, gboolean isInt,
-                register PolyEdgePtr edge, gboolean *leftEdge)
-{
-    int            y;
-    register int dx, dy;
-    double  xa, ya, k;
-    gboolean   left;
-
-    dx = -face->dy;
-    dy = face->dx;
-    xa = face->xa;
-    ya = face->ya;
-    k = 0.0;
-    if (!isInt)
-       k = face->k;
-    left = 1;
-    if (dy < 0 || (dy == 0 && dx > 0))
-    {
-       dx = -dx;
-       dy = -dy;
-       xa = -xa;
-       ya = -ya;
-       left = !left;
-    }
-    if (dx == 0 && dy == 0)
-       dy = 1;
-    if (dy == 0)
-    {
-       y = ICEIL (face->ya) + face->y;
-       edge->x = -32767;
-       edge->stepx = 0;
-       edge->signdx = 0;
-       edge->e = -1;
-       edge->dy = 0;
-       edge->dx = 0;
-       edge->height = 0;
-    }
-    else
-    {
-       y = miPolyBuildEdge (xa, ya, k, dx, dy, face->x, face->y, !left, edge);
-       edge->height = 32767;
-    }
-    *leftEdge = !left;
-    return y;
-}
-
-static void
-miLineArc (GdkDrawable *pDraw, GdkGC *pGC, GdkColor *pixel,
-           SpanDataPtr spanData, register LineFacePtr leftFace,
-           register LineFacePtr rightFace, double xorg, double yorg,
-           gboolean isInt)
-{
-    GdkSpan* points;
-    int xorgi = 0, yorgi = 0;
-    GdkColor           oldPixel;
-    Spans spanRec;
-    int n;
-    PolyEdgeRec        edge1, edge2;
-    int                edgey1, edgey2;
-    gboolean   edgeleft1, edgeleft2;
-
-    if (isInt)
-    {
-       xorgi = leftFace ? leftFace->x : rightFace->x;
-       yorgi = leftFace ? leftFace->y : rightFace->y;
-    }
-    edgey1 = 65536;
-    edgey2 = 65536;
-    edge1.x = 0; /* not used, keep memory checkers happy */
-    edge1.dy = -1;
-    edge2.x = 0; /* not used, keep memory checkers happy */
-    edge2.dy = -1;
-    edgeleft1 = FALSE;
-    edgeleft2 = FALSE;
-    if (((GDK_GC_FBDATA(pGC)->values.line_style != GDK_LINE_SOLID || GDK_GC_FBDATA(pGC)->values.line_width > 2) &&
-        (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND && GDK_GC_FBDATA(pGC)->values.join_style != GDK_JOIN_ROUND)) ||
-       (GDK_GC_FBDATA(pGC)->values.join_style == GDK_JOIN_ROUND && GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_BUTT))
-    {
-       if (isInt)
-       {
-           xorg = (double) xorgi;
-           yorg = (double) yorgi;
-       }
-       if (leftFace && rightFace)
-       {
-           miRoundJoinClip (leftFace, rightFace, &edge1, &edge2,
-                            &edgey1, &edgey2, &edgeleft1, &edgeleft2);
-       }
-       else if (leftFace)
-       {
-           edgey1 = miRoundCapClip (leftFace, isInt, &edge1, &edgeleft1);
-       }
-       else if (rightFace)
-       {
-           edgey2 = miRoundCapClip (rightFace, isInt, &edge2, &edgeleft2);
-       }
-       isInt = FALSE;
-    }
-    if (!spanData)
-    {
-       points = (GdkSpan*)ALLOCATE_LOCAL(sizeof(GdkSpan) * GDK_GC_FBDATA(pGC)->values.line_width);
-       if (!points)
-           return;
-       oldPixel = GDK_GC_FBDATA(pGC)->values.foreground;
-       if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, pixel);
-       }
-    }
-    else
-    {
-       points = (GdkSpan*) g_malloc (GDK_GC_FBDATA(pGC)->values.line_width * sizeof (GdkSpan));
-       if (!points)
-           return;
-       spanRec.points = points;
-    }
-    if (isInt)
-       n = miLineArcI(pDraw, pGC, xorgi, yorgi, points);
-    else
-       n = miLineArcD(pDraw, pGC, xorg, yorg, points,
-                      &edge1, edgey1, edgeleft1,
-                      &edge2, edgey2, edgeleft2);
-
-    if (!spanData)
-    {
-      gdk_fb_fill_spans(pDraw, pGC, points, n, TRUE);
-      DEALLOCATE_LOCAL(points);
-      if (pixel->pixel != oldPixel.pixel)
-       {
-         gdk_gc_set_foreground(pGC, &oldPixel);
-       }
-    }
-    else
-    {
-       spanRec.count = n;
-       AppendSpanGroup (pGC, pixel, &spanRec, spanData)
-    }
-}
-
-void
-miLineProjectingCap (GdkDrawable *pDrawable, register GdkGC *pGC, GdkColor *pixel,
-                     SpanDataPtr spanData, register LineFacePtr face,
-                     gboolean isLeft, double xorg, double yorg, gboolean isInt)
-{
-    int        xorgi = 0, yorgi = 0;
-    int        lw;
-    PolyEdgeRec        lefts[2], rights[2];
-    int                lefty, righty, topy, bottomy;
-    PolyEdgePtr left, right;
-    PolyEdgePtr        top, bottom;
-    double     xa,ya;
-    double     k;
-    double     xap, yap;
-    int                dx, dy;
-    double     projectXoff, projectYoff;
-    double     maxy;
-    int                finaly;
-    
-    if (isInt)
-    {
-       xorgi = face->x;
-       yorgi = face->y;
-    }
-    lw = GDK_GC_FBDATA(pGC)->values.line_width;
-    dx = face->dx;
-    dy = face->dy;
-    k = face->k;
-    if (dy == 0)
-    {
-       lefts[0].height = lw;
-       lefts[0].x = xorgi;
-       if (isLeft)
-           lefts[0].x -= (lw >> 1);
-       lefts[0].stepx = 0;
-       lefts[0].signdx = 1;
-       lefts[0].e = -lw;
-       lefts[0].dx = 0;
-       lefts[0].dy = lw;
-       rights[0].height = lw;
-       rights[0].x = xorgi;
-       if (!isLeft)
-           rights[0].x += ((lw + 1) >> 1);
-       rights[0].stepx = 0;
-       rights[0].signdx = 1;
-       rights[0].e = -lw;
-       rights[0].dx = 0;
-       rights[0].dy = lw;
-       miFillPolyHelper (pDrawable, pGC, pixel, spanData, yorgi - (lw >> 1), lw,
-                         lefts, rights, 1, 1);
-    }
-    else if (dx == 0)
-    {
-       topy = yorgi;
-       bottomy = yorgi + dy;
-       if (isLeft)
-           topy -= (lw >> 1);
-       else
-           bottomy += (lw >> 1);
-       lefts[0].height = bottomy - topy;
-       lefts[0].x = xorgi - (lw >> 1);
-       lefts[0].stepx = 0;
-       lefts[0].signdx = 1;
-       lefts[0].e = -dy;
-       lefts[0].dx = dx;
-       lefts[0].dy = dy;
-
-       rights[0].height = bottomy - topy;
-       rights[0].x = lefts[0].x + (lw-1);
-       rights[0].stepx = 0;
-       rights[0].signdx = 1;
-       rights[0].e = -dy;
-       rights[0].dx = dx;
-       rights[0].dy = dy;
-       miFillPolyHelper (pDrawable, pGC, pixel, spanData, topy, bottomy - topy, lefts, rights, 1, 1);
-    }
-    else
-    {
-       xa = face->xa;
-       ya = face->ya;
-       projectXoff = -ya;
-       projectYoff = xa;
-       if (dx < 0)
-       {
-           right = &rights[1];
-           left = &lefts[0];
-           top = &rights[0];
-           bottom = &lefts[1];
-       }
-       else
-       {
-           right = &rights[0];
-           left = &lefts[1];
-           top = &lefts[0];
-           bottom = &rights[1];
-       }
-       if (isLeft)
-       {
-           righty = miPolyBuildEdge (xa, ya,
-                    k, dx, dy, xorgi, yorgi, 0, right);
-           
-           xa = -xa;
-           ya = -ya;
-           k = -k;
-           lefty = miPolyBuildEdge (xa - projectXoff, ya - projectYoff,
-                                    k, dx, dy, xorgi, yorgi, 1, left);
-           if (dx > 0)
-           {
-               ya = -ya;
-               xa = -xa;
-           }
-           xap = xa - projectXoff;
-           yap = ya - projectYoff;
-           topy = miPolyBuildEdge (xap, yap, xap * dx + yap * dy,
-                                   -dy, dx, xorgi, yorgi, dx > 0, top);
-           bottomy = miPolyBuildEdge (xa, ya,
-                                      0.0, -dy, dx, xorgi, yorgi, dx < 0, bottom);
-           maxy = -ya;
-       }
-       else
-       {
-           righty = miPolyBuildEdge (xa - projectXoff, ya - projectYoff,
-                    k, dx, dy, xorgi, yorgi, 0, right);
-           
-           xa = -xa;
-           ya = -ya;
-           k = -k;
-           lefty = miPolyBuildEdge (xa, ya,
-                   k, dx, dy, xorgi, yorgi, 1, left);
-           if (dx > 0)
-           {
-               ya = -ya;
-               xa = -xa;
-           }
-           xap = xa - projectXoff;
-           yap = ya - projectYoff;
-           topy = miPolyBuildEdge (xa, ya, 0.0, -dy, dx, xorgi, xorgi, dx > 0, top);
-           bottomy = miPolyBuildEdge (xap, yap, xap * dx + yap * dy,
-                                      -dy, dx, xorgi, xorgi, dx < 0, bottom);
-           maxy = -ya + projectYoff;
-       }
-       finaly = ICEIL(maxy) + yorgi;
-       if (dx < 0)
-       {
-           left->height = bottomy - lefty;
-           right->height = finaly - righty;
-           top->height = righty - topy;
-       }
-       else
-       {
-           right->height =  bottomy - righty;
-           left->height = finaly - lefty;
-           top->height = lefty - topy;
-       }
-       bottom->height = finaly - bottomy;
-       miFillPolyHelper (pDrawable, pGC, pixel, spanData, topy,
-                    bottom->height + bottomy - topy, lefts, rights, 2, 2);
-    }
-}
-
-static void
-miWideSegment (GdkDrawable *pDrawable, GdkGC *pGC, GdkColor *pixel, SpanDataPtr spanData,
-              int x1, int y1, int x2, int y2, gboolean projectLeft, gboolean projectRight, LineFacePtr leftFace, LineFacePtr rightFace)
-{
-    double     l, L, r;
-    double     xa, ya;
-    double     projectXoff = 0.0, projectYoff = 0.0;
-    double     k;
-    double     maxy;
-    int                x, y;
-    int                dx, dy;
-    int                finaly;
-    PolyEdgePtr left, right;
-    PolyEdgePtr        top, bottom;
-    int                lefty, righty, topy, bottomy;
-    int                signdx;
-    PolyEdgeRec        lefts[2], rights[2];
-    LineFacePtr        tface;
-    int                lw = GDK_GC_FBDATA(pGC)->values.line_width;
-
-    g_assert(leftFace);
-    /* draw top-to-bottom always */
-    if (y2 < y1 || (y2 == y1 && x2 < x1))
-    {
-       x = x1;
-       x1 = x2;
-       x2 = x;
-
-       y = y1;
-       y1 = y2;
-       y2 = y;
-
-       x = projectLeft;
-       projectLeft = projectRight;
-       projectRight = x;
-
-       tface = leftFace;
-       leftFace = rightFace;
-       rightFace = tface;
-    }
-
-    dy = y2 - y1;
-    signdx = 1;
-    dx = x2 - x1;
-    if (dx < 0)
-       signdx = -1;
-
-    g_assert(leftFace);
-    leftFace->x = x1;
-    leftFace->y = y1;
-    leftFace->dx = dx;
-    leftFace->dy = dy;
-
-    rightFace->x = x2;
-    rightFace->y = y2;
-    rightFace->dx = -dx;
-    rightFace->dy = -dy;
-
-    if (dy == 0)
-    {
-       rightFace->xa = 0;
-       rightFace->ya = (double) lw / 2.0;
-       rightFace->k = -(double) (lw * dx) / 2.0;
-       leftFace->xa = 0;
-       leftFace->ya = -rightFace->ya;
-       leftFace->k = rightFace->k;
-       x = x1;
-       if (projectLeft)
-           x -= (lw >> 1);
-       y = y1 - (lw >> 1);
-       dx = x2 - x;
-       if (projectRight)
-           dx += ((lw + 1) >> 1);
-       dy = lw;
-       miFillRectPolyHelper (pDrawable, pGC, pixel, spanData,
-                             x, y, dx, dy);
-    }
-    else if (dx == 0)
-    {
-       leftFace->xa =  (double) lw / 2.0;
-       leftFace->ya = 0;
-       leftFace->k = (double) (lw * dy) / 2.0;
-       rightFace->xa = -leftFace->xa;
-       rightFace->ya = 0;
-       rightFace->k = leftFace->k;
-       y = y1;
-       if (projectLeft)
-           y -= lw >> 1;
-       x = x1 - (lw >> 1);
-       dy = y2 - y;
-       if (projectRight)
-           dy += ((lw + 1) >> 1);
-       dx = lw;
-       miFillRectPolyHelper (pDrawable, pGC, pixel, spanData,
-                             x, y, dx, dy);
-    }
-    else
-    {
-       l = ((double) lw) / 2.0;
-       L = hypot ((double) dx, (double) dy);
-
-       if (dx < 0)
-       {
-           right = &rights[1];
-           left = &lefts[0];
-           top = &rights[0];
-           bottom = &lefts[1];
-       }
-       else
-       {
-           right = &rights[0];
-           left = &lefts[1];
-           top = &lefts[0];
-           bottom = &rights[1];
-       }
-       r = l / L;
-
-       /* coord of upper bound at integral y */
-       ya = -r * dx;
-       xa = r * dy;
-
-       if (projectLeft | projectRight)
-       {
-           projectXoff = -ya;
-           projectYoff = xa;
-       }
-
-       /* xa * dy - ya * dx */
-       k = l * L;
-
-       leftFace->xa = xa;
-       leftFace->ya = ya;
-       leftFace->k = k;
-       rightFace->xa = -xa;
-       rightFace->ya = -ya;
-       rightFace->k = k;
-
-       if (projectLeft)
-           righty = miPolyBuildEdge (xa - projectXoff, ya - projectYoff,
-                                     k, dx, dy, x1, y1, 0, right);
-       else
-           righty = miPolyBuildEdge (xa, ya,
-                                     k, dx, dy, x1, y1, 0, right);
-
-       /* coord of lower bound at integral y */
-       ya = -ya;
-       xa = -xa;
-
-       /* xa * dy - ya * dx */
-       k = - k;
-
-       if (projectLeft)
-           lefty = miPolyBuildEdge (xa - projectXoff, ya - projectYoff,
-                                    k, dx, dy, x1, y1, 1, left);
-       else
-           lefty = miPolyBuildEdge (xa, ya,
-                                    k, dx, dy, x1, y1, 1, left);
-
-       /* coord of top face at integral y */
-
-       if (signdx > 0)
-       {
-           ya = -ya;
-           xa = -xa;
-       }
-
-       if (projectLeft)
-       {
-           double xap = xa - projectXoff;
-           double yap = ya - projectYoff;
-           topy = miPolyBuildEdge (xap, yap, xap * dx + yap * dy,
-                                   -dy, dx, x1, y1, dx > 0, top);
-       }
-       else
-           topy = miPolyBuildEdge (xa, ya, 0.0, -dy, dx, x1, y1, dx > 0, top);
-
-       /* coord of bottom face at integral y */
-
-       if (projectRight)
-       {
-           double xap = xa + projectXoff;
-           double yap = ya + projectYoff;
-           bottomy = miPolyBuildEdge (xap, yap, xap * dx + yap * dy,
-                                      -dy, dx, x2, y2, dx < 0, bottom);
-           maxy = -ya + projectYoff;
-       }
-       else
-       {
-           bottomy = miPolyBuildEdge (xa, ya,
-                                      0.0, -dy, dx, x2, y2, dx < 0, bottom);
-           maxy = -ya;
-       }
-
-       finaly = ICEIL (maxy) + y2;
-
-       if (dx < 0)
-       {
-           left->height = bottomy - lefty;
-           right->height = finaly - righty;
-           top->height = righty - topy;
-       }
-       else
-       {
-           right->height =  bottomy - righty;
-           left->height = finaly - lefty;
-           top->height = lefty - topy;
-       }
-       bottom->height = finaly - bottomy;
-       miFillPolyHelper (pDrawable, pGC, pixel, spanData, topy,
-                         bottom->height + bottomy - topy, lefts, rights, 2, 2);
-    }
-}
-
-SpanDataPtr
-miSetupSpanData (register GdkGC *pGC, SpanDataPtr spanData, int npt)
-{
-    if ((npt < 3 && GDK_GC_FBDATA(pGC)->values.cap_style != GDK_CAP_ROUND) || miSpansEasyRop(GDK_GC_FBDATA(pGC)->alu))
-       return (SpanDataPtr) NULL;
-    if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH)
-       miInitSpanGroup (&spanData->bgGroup);
-    miInitSpanGroup (&spanData->fgGroup);
-    return spanData;
-}
-
-void
-miCleanupSpanData (GdkDrawable *pDrawable, GdkGC *pGC, SpanDataPtr spanData)
-{
-    if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH)
-    {
-       GdkColor oldPixel, pixel;
-       
-       pixel = GDK_GC_FBDATA(pGC)->values.background;
-       oldPixel = GDK_GC_FBDATA(pGC)->values.foreground;
-       if (pixel.pixel != oldPixel.pixel)
-         gdk_gc_set_foreground(pGC, &pixel);
-       miFillUniqueSpanGroup (pDrawable, pGC, &spanData->bgGroup);
-       miFreeSpanGroup (&spanData->bgGroup);
-       if (pixel.pixel != oldPixel.pixel)
-         gdk_gc_set_foreground(pGC, &oldPixel);
-    }
-    miFillUniqueSpanGroup (pDrawable, pGC, &spanData->fgGroup);
-    miFreeSpanGroup (&spanData->fgGroup);
-}
-
-void
-miWideLine (GdkDrawable *pDrawable, GdkGC *pGC, int mode,
-            register int npt, register GdkPoint *pPts)
-{
-    int                    x1, y1, x2, y2;
-    SpanDataRec            spanDataRec;
-    SpanDataPtr            spanData;
-    GdkColor pixel;
-    gboolean       projectLeft, projectRight;
-    LineFaceRec            leftFace, rightFace, prevRightFace;
-    LineFaceRec            firstFace;
-    register int    first;
-    gboolean       somethingDrawn = FALSE;
-    gboolean       selfJoin;
-
-    spanData = miSetupSpanData (pGC, &spanDataRec, npt);
-    pixel = GDK_GC_FBDATA(pGC)->values.foreground;
-    x2 = pPts->x;
-    y2 = pPts->y;
-    first = TRUE;
-    selfJoin = FALSE;
-    if (npt > 1)
-    {
-      if (0 /* mode == CoordModePrevious*/)
-       {
-           int nptTmp;
-           GdkPoint* pPtsTmp;
-    
-           x1 = x2;
-           y1 = y2;
-           nptTmp = npt;
-           pPtsTmp = pPts + 1;
-           while (--nptTmp)
-           {
-               x1 += pPtsTmp->x;
-               y1 += pPtsTmp->y;
-               ++pPtsTmp;
-           }
-           if (x2 == x1 && y2 == y1)
-               selfJoin = TRUE;
-       }
-       else if (x2 == pPts[npt-1].x && y2 == pPts[npt-1].y)
-       {
-           selfJoin = TRUE;
-       }
-    }
-    projectLeft = GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING && !selfJoin;
-    projectRight = FALSE;
-    while (--npt)
-    {
-       x1 = x2;
-       y1 = y2;
-       ++pPts;
-       x2 = pPts->x;
-       y2 = pPts->y;
-       if (0 /* mode == CoordModePrevious */)
-       {
-           x2 += x1;
-           y2 += y1;
-       }
-       if (x1 != x2 || y1 != y2)
-       {
-           somethingDrawn = TRUE;
-           if (npt == 1 && GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING && !selfJoin)
-               projectRight = TRUE;
-           miWideSegment (pDrawable, pGC, &pixel, spanData, x1, y1, x2, y2,
-                          projectLeft, projectRight, &leftFace, &rightFace);
-           if (first)
-           {
-               if (selfJoin)
-                   firstFace = leftFace;
-               else if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-               {
-                   if (GDK_GC_FBDATA(pGC)->values.line_width == 1 && !spanData)
-                       miLineOnePoint (pDrawable, pGC, &pixel, spanData, x1, y1);
-                   else
-                       miLineArc (pDrawable, pGC, &pixel, spanData,
-                                  &leftFace, (LineFacePtr) NULL,
-                                  (double)0.0, (double)0.0,
-                                  TRUE);
-               }
-           }
-           else
-           {
-               miLineJoin (pDrawable, pGC, &pixel, spanData, &leftFace,
-                           &prevRightFace);
-           }
-           prevRightFace = rightFace;
-           first = FALSE;
-           projectLeft = FALSE;
-       }
-       if (npt == 1 && somethingDrawn)
-       {
-           if (selfJoin)
-               miLineJoin (pDrawable, pGC, &pixel, spanData, &firstFace,
-                           &rightFace);
-           else if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-           {
-               if (GDK_GC_FBDATA(pGC)->values.line_width == 1 && !spanData)
-                   miLineOnePoint (pDrawable, pGC, &pixel, spanData, x2, y2);
-               else
-                   miLineArc (pDrawable, pGC, &pixel, spanData,
-                              (LineFacePtr) NULL, &rightFace,
-                              (double)0.0, (double)0.0,
-                              TRUE);
-           }
-       }
-    }
-    /* handle crock where all points are coincedent */
-    if (!somethingDrawn)
-    {
-       projectLeft = GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING;
-       miWideSegment (pDrawable, pGC, &pixel, spanData,
-                      x2, y2, x2, y2, projectLeft, projectLeft,
-                      &leftFace, &rightFace);
-       if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-       {
-           miLineArc (pDrawable, pGC, &pixel, spanData,
-                      &leftFace, (LineFacePtr) NULL,
-                      (double)0.0, (double)0.0,
-                      TRUE);
-           rightFace.dx = -1;  /* sleezy hack to make it work */
-           miLineArc (pDrawable, pGC, &pixel, spanData,
-                      (LineFacePtr) NULL, &rightFace,
-                      (double)0.0, (double)0.0,
-                      TRUE);
-       }
-    }
-    if (spanData)
-       miCleanupSpanData (pDrawable, pGC, spanData);
-}
-
-#define V_TOP      0
-#define V_RIGHT            1
-#define V_BOTTOM    2
-#define V_LEFT     3
-
-static void
-miWideDashSegment (GdkDrawable *pDrawable, register GdkGC *pGC,
-                   SpanDataPtr spanData, int *pDashOffset, int *pDashIndex,
-                  int x1, int y1, int x2, int y2, gboolean projectLeft,
-                   gboolean projectRight, LineFacePtr leftFace,
-                   LineFacePtr rightFace)
-{
-    int                    dashIndex, dashRemain;
-    unsigned char   *pDash;
-    double         L, l;
-    double         k;
-    PolyVertexRec   vertices[4];
-    PolyVertexRec   saveRight, saveBottom;
-    PolySlopeRec    slopes[4];
-    PolyEdgeRec            left[2], right[2];
-    LineFaceRec            lcapFace, rcapFace;
-    int                    nleft, nright;
-    int                    h;
-    int                    y;
-    int                    dy, dx;
-    GdkColor pixel;
-    double         LRemain;
-    double         r;
-    double         rdx, rdy;
-    double         dashDx, dashDy;
-    double         saveK = 0.0;
-    gboolean       first = TRUE;
-    double         lcenterx, lcentery, rcenterx = 0.0, rcentery = 0.0;
-    GdkColor fgPixel, bgPixel;
-    
-    dx = x2 - x1;
-    dy = y2 - y1;
-    dashIndex = *pDashIndex;
-    pDash = GDK_GC_FBDATA(pGC)->dash_list;
-    dashRemain = pDash[dashIndex] - *pDashOffset;
-    fgPixel = GDK_GC_FBDATA(pGC)->values.foreground;
-    bgPixel = GDK_GC_FBDATA(pGC)->values.background;
-    if (GDK_GC_FBDATA(pGC)->values.fill == GDK_OPAQUE_STIPPLED ||
-       GDK_GC_FBDATA(pGC)->values.fill == GDK_TILED)
-    {
-       bgPixel = fgPixel;
-    }
-
-    l = ((double) GDK_GC_FBDATA(pGC)->values.line_width) / 2.0;
-    if (dx == 0)
-    {
-       L = dy;
-       rdx = 0;
-       rdy = l;
-       if (dy < 0)
-       {
-           L = -dy;
-           rdy = -l;
-       }
-    }
-    else if (dy == 0)
-    {
-       L = dx;
-       rdx = l;
-       rdy = 0;
-       if (dx < 0)
-       {
-           L = -dx;
-           rdx = -l;
-       }
-    }
-    else
-    {
-       L = hypot ((double) dx, (double) dy);
-       r = l / L;
-
-       rdx = r * dx;
-       rdy = r * dy;
-    }
-    k = l * L;
-    LRemain = L;
-    /* All position comments are relative to a line with dx and dy > 0,
-     * but the code does not depend on this */
-    /* top */
-    slopes[V_TOP].dx = dx;
-    slopes[V_TOP].dy = dy;
-    slopes[V_TOP].k = k;
-    /* right */
-    slopes[V_RIGHT].dx = -dy;
-    slopes[V_RIGHT].dy = dx;
-    slopes[V_RIGHT].k = 0;
-    /* bottom */
-    slopes[V_BOTTOM].dx = -dx;
-    slopes[V_BOTTOM].dy = -dy;
-    slopes[V_BOTTOM].k = k;
-    /* left */
-    slopes[V_LEFT].dx = dy;
-    slopes[V_LEFT].dy = -dx;
-    slopes[V_LEFT].k = 0;
-
-    /* preload the start coordinates */
-    vertices[V_RIGHT].x = vertices[V_TOP].x = rdy;
-    vertices[V_RIGHT].y = vertices[V_TOP].y = -rdx;
-
-    vertices[V_BOTTOM].x = vertices[V_LEFT].x = -rdy;
-    vertices[V_BOTTOM].y = vertices[V_LEFT].y = rdx;
-
-    if (projectLeft)
-    {
-       vertices[V_TOP].x -= rdx;
-       vertices[V_TOP].y -= rdy;
-
-       vertices[V_LEFT].x -= rdx;
-       vertices[V_LEFT].y -= rdy;
-
-       slopes[V_LEFT].k = rdx * dx + rdy * dy;
-    }
-
-    lcenterx = x1;
-    lcentery = y1;
-
-    if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-    {
-       lcapFace.dx = dx;
-       lcapFace.dy = dy;
-       lcapFace.x = x1;
-       lcapFace.y = y1;
-
-       rcapFace.dx = -dx;
-       rcapFace.dy = -dy;
-       rcapFace.x = x1;
-       rcapFace.y = y1;
-    }
-    while (LRemain > dashRemain)
-    {
-       dashDx = (dashRemain * dx) / L;
-       dashDy = (dashRemain * dy) / L;
-
-       rcenterx = lcenterx + dashDx;
-       rcentery = lcentery + dashDy;
-
-       vertices[V_RIGHT].x += dashDx;
-       vertices[V_RIGHT].y += dashDy;
-
-       vertices[V_BOTTOM].x += dashDx;
-       vertices[V_BOTTOM].y += dashDy;
-
-       slopes[V_RIGHT].k = vertices[V_RIGHT].x * dx + vertices[V_RIGHT].y * dy;
-
-       if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || !(dashIndex & 1))
-       {
-           if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_ON_OFF_DASH &&
-               GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING)
-           {
-               saveRight = vertices[V_RIGHT];
-               saveBottom = vertices[V_BOTTOM];
-               saveK = slopes[V_RIGHT].k;
-               
-               if (!first)
-               {
-                   vertices[V_TOP].x -= rdx;
-                   vertices[V_TOP].y -= rdy;
-    
-                   vertices[V_LEFT].x -= rdx;
-                   vertices[V_LEFT].y -= rdy;
-
-                   slopes[V_LEFT].k = vertices[V_LEFT].x *
-                                      slopes[V_LEFT].dy -
-                                      vertices[V_LEFT].y *
-                                      slopes[V_LEFT].dx;
-               }
-               
-               vertices[V_RIGHT].x += rdx;
-               vertices[V_RIGHT].y += rdy;
-
-               vertices[V_BOTTOM].x += rdx;
-               vertices[V_BOTTOM].y += rdy;
-
-               slopes[V_RIGHT].k = vertices[V_RIGHT].x *
-                                  slopes[V_RIGHT].dy -
-                                  vertices[V_RIGHT].y *
-                                  slopes[V_RIGHT].dx;
-           }
-           y = miPolyBuildPoly (vertices, slopes, 4, x1, y1,
-                                left, right, &nleft, &nright, &h);
-           pixel = (dashIndex & 1) ? bgPixel : fgPixel;
-           miFillPolyHelper (pDrawable, pGC, &pixel, spanData, y, h, left, right, nleft, nright);
-
-           if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_ON_OFF_DASH)
-           {
-               switch (GDK_GC_FBDATA(pGC)->values.cap_style)
-               {
-               case GDK_CAP_PROJECTING:
-                   vertices[V_BOTTOM] = saveBottom;
-                   vertices[V_RIGHT] = saveRight;
-                   slopes[V_RIGHT].k = saveK;
-                   break;
-               case GDK_CAP_ROUND:
-                   if (!first)
-                   {
-                       if (dx < 0)
-                       {
-                           lcapFace.xa = -vertices[V_LEFT].x;
-                           lcapFace.ya = -vertices[V_LEFT].y;
-                           lcapFace.k = slopes[V_LEFT].k;
-                       }
-                       else
-                       {
-                           lcapFace.xa = vertices[V_TOP].x;
-                           lcapFace.ya = vertices[V_TOP].y;
-                           lcapFace.k = -slopes[V_LEFT].k;
-                       }
-                       miLineArc (pDrawable, pGC, &pixel, spanData,
-                                  &lcapFace, (LineFacePtr) NULL,
-                                  lcenterx, lcentery, FALSE);
-                   }
-                   if (dx < 0)
-                   {
-                       rcapFace.xa = vertices[V_BOTTOM].x;
-                       rcapFace.ya = vertices[V_BOTTOM].y;
-                       rcapFace.k = slopes[V_RIGHT].k;
-                   }
-                   else
-                   {
-                       rcapFace.xa = -vertices[V_RIGHT].x;
-                       rcapFace.ya = -vertices[V_RIGHT].y;
-                       rcapFace.k = -slopes[V_RIGHT].k;
-                   }
-                   miLineArc (pDrawable, pGC, &pixel, spanData,
-                              (LineFacePtr) NULL, &rcapFace,
-                              rcenterx, rcentery, FALSE);
-                   break;
-               default:
-                 break;
-               }
-           }
-       }
-       LRemain -= dashRemain;
-       ++dashIndex;
-       if (dashIndex == GDK_GC_FBDATA(pGC)->dash_list_len)
-           dashIndex = 0;
-       dashRemain = pDash[dashIndex];
-
-       lcenterx = rcenterx;
-       lcentery = rcentery;
-
-       vertices[V_TOP] = vertices[V_RIGHT];
-       vertices[V_LEFT] = vertices[V_BOTTOM];
-       slopes[V_LEFT].k = -slopes[V_RIGHT].k;
-       first = FALSE;
-    }
-
-    if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || !(dashIndex & 1))
-    {
-       vertices[V_TOP].x -= dx;
-       vertices[V_TOP].y -= dy;
-
-       vertices[V_LEFT].x -= dx;
-       vertices[V_LEFT].y -= dy;
-
-       vertices[V_RIGHT].x = rdy;
-       vertices[V_RIGHT].y = -rdx;
-
-       vertices[V_BOTTOM].x = -rdy;
-       vertices[V_BOTTOM].y = rdx;
-
-       
-       if (projectRight)
-       {
-           vertices[V_RIGHT].x += rdx;
-           vertices[V_RIGHT].y += rdy;
-    
-           vertices[V_BOTTOM].x += rdx;
-           vertices[V_BOTTOM].y += rdy;
-           slopes[V_RIGHT].k = vertices[V_RIGHT].x *
-                               slopes[V_RIGHT].dy -
-                               vertices[V_RIGHT].y *
-                               slopes[V_RIGHT].dx;
-       }
-       else
-           slopes[V_RIGHT].k = 0;
-
-       if (!first && GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_ON_OFF_DASH &&
-           GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING)
-       {
-           vertices[V_TOP].x -= rdx;
-           vertices[V_TOP].y -= rdy;
-
-           vertices[V_LEFT].x -= rdx;
-           vertices[V_LEFT].y -= rdy;
-           slopes[V_LEFT].k = vertices[V_LEFT].x *
-                              slopes[V_LEFT].dy -
-                              vertices[V_LEFT].y *
-                              slopes[V_LEFT].dx;
-       }
-       else
-           slopes[V_LEFT].k += dx * dx + dy * dy;
-
-
-       y = miPolyBuildPoly (vertices, slopes, 4, x2, y2,
-                            left, right, &nleft, &nright, &h);
-
-       pixel = (dashIndex & 1) ? GDK_GC_FBDATA(pGC)->values.background : GDK_GC_FBDATA(pGC)->values.foreground;
-       miFillPolyHelper (pDrawable, pGC, &pixel, spanData, y, h, left, right, nleft, nright);
-       if (!first && GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_ON_OFF_DASH &&
-           GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-       {
-           lcapFace.x = x2;
-           lcapFace.y = y2;
-           if (dx < 0)
-           {
-               lcapFace.xa = -vertices[V_LEFT].x;
-               lcapFace.ya = -vertices[V_LEFT].y;
-               lcapFace.k = slopes[V_LEFT].k;
-           }
-           else
-           {
-               lcapFace.xa = vertices[V_TOP].x;
-               lcapFace.ya = vertices[V_TOP].y;
-               lcapFace.k = -slopes[V_LEFT].k;
-           }
-           miLineArc (pDrawable, pGC, &pixel, spanData,
-                      &lcapFace, (LineFacePtr) NULL,
-                      rcenterx, rcentery, FALSE);
-       }
-    }
-    dashRemain = ((double) dashRemain) - LRemain;
-    if (dashRemain == 0)
-    {
-       dashIndex++;
-       if (dashIndex == GDK_GC_FBDATA(pGC)->dash_list_len)
-           dashIndex = 0;
-       dashRemain = pDash[dashIndex];
-    }
-
-    leftFace->x = x1;
-    leftFace->y = y1;
-    leftFace->dx = dx;
-    leftFace->dy = dy;
-    leftFace->xa = rdy;
-    leftFace->ya = -rdx;
-    leftFace->k = k;
-
-    rightFace->x = x2;
-    rightFace->y = y2;
-    rightFace->dx = -dx;
-    rightFace->dy = -dy;
-    rightFace->xa = -rdy;
-    rightFace->ya = rdx;
-    rightFace->k = k;
-
-    *pDashIndex = dashIndex;
-    *pDashOffset = pDash[dashIndex] - dashRemain;
-}
-
-void
-miWideDash (GdkDrawable *pDrawable, register GdkGC *pGC, int mode,
-            register int npt, register GdkPoint *pPts)
-{
-    int                    x1, y1, x2, y2;
-    GdkColor pixel;
-    gboolean       projectLeft, projectRight;
-    LineFaceRec            leftFace, rightFace, prevRightFace;
-    LineFaceRec            firstFace;
-    int                    first;
-    int                    dashIndex, dashOffset;
-    register int    prevDashIndex;
-    SpanDataRec            spanDataRec;
-    SpanDataPtr            spanData;
-    gboolean       somethingDrawn = FALSE;
-    gboolean       selfJoin;
-    gboolean       endIsFg = FALSE, startIsFg = FALSE;
-    gboolean            firstIsFg = FALSE, prevIsFg = FALSE;
-
-#ifndef XFree86Server
-    /* XXX backward compatibility */
-    if (GDK_GC_FBDATA(pGC)->values.line_width == 0)
-    {
-       miZeroDashLine (pDrawable, pGC, mode, npt, pPts);
-       return;
-    }
-#endif
-    if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH && 
-       (GDK_GC_FBDATA(pGC)->values.fill == GDK_OPAQUE_STIPPLED || GDK_GC_FBDATA(pGC)->values.fill == GDK_TILED))
-    {
-       miWideLine (pDrawable, pGC, mode, npt, pPts);
-       return;
-    }
-    if (npt == 0)
-       return;
-    spanData = miSetupSpanData (pGC, &spanDataRec, npt);
-    x2 = pPts->x;
-    y2 = pPts->y;
-    first = TRUE;
-    selfJoin = FALSE;
-    if (0 /* mode == CoordModePrevious */)
-    {
-       int nptTmp;
-       GdkPoint* pPtsTmp;
-
-       x1 = x2;
-       y1 = y2;
-       nptTmp = npt;
-       pPtsTmp = pPts + 1;
-       while (--nptTmp)
-       {
-           x1 += pPtsTmp->x;
-           y1 += pPtsTmp->y;
-           ++pPtsTmp;
-       }
-       if (x2 == x1 && y2 == y1)
-           selfJoin = TRUE;
-    }
-    else if (x2 == pPts[npt-1].x && y2 == pPts[npt-1].y)
-    {
-       selfJoin = TRUE;
-    }
-    projectLeft = GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING && !selfJoin;
-    projectRight = FALSE;
-    dashIndex = 0;
-    dashOffset = 0;
-    miStepDash (GDK_GC_FBDATA(pGC)->dash_offset, &dashIndex,
-               GDK_GC_FBDATA(pGC)->dash_list, (int)GDK_GC_FBDATA(pGC)->dash_list_len, &dashOffset);
-    while (--npt)
-    {
-       x1 = x2;
-       y1 = y2;
-       ++pPts;
-       x2 = pPts->x;
-       y2 = pPts->y;
-       if (0 /* mode == CoordModePrevious */)
-       {
-           x2 += x1;
-           y2 += y1;
-       }
-       if (x1 != x2 || y1 != y2)
-       {
-           somethingDrawn = TRUE;
-           if (npt == 1 && GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING && 
-               (!selfJoin || !firstIsFg))
-               projectRight = TRUE;
-           prevDashIndex = dashIndex;
-           miWideDashSegment (pDrawable, pGC, spanData, &dashOffset, &dashIndex,
-                               x1, y1, x2, y2,
-                               projectLeft, projectRight, &leftFace, &rightFace);
-           startIsFg = !(prevDashIndex & 1);
-           endIsFg = (dashIndex & 1) ^ (dashOffset != 0);
-           if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || startIsFg)
-           {
-               pixel = startIsFg ? GDK_GC_FBDATA(pGC)->values.foreground : GDK_GC_FBDATA(pGC)->values.background;
-               if (first || (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_ON_OFF_DASH && !prevIsFg))
-               {
-                   if (first && selfJoin)
-                   {
-                       firstFace = leftFace;
-                       firstIsFg = startIsFg;
-                   }
-                   else if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-                       miLineArc (pDrawable, pGC, &pixel, spanData,
-                                  &leftFace, (LineFacePtr) NULL,
-                                  (double)0.0, (double)0.0, TRUE);
-               }
-               else
-               {
-                   miLineJoin (pDrawable, pGC, &pixel, spanData, &leftFace,
-                               &prevRightFace);
-               }
-           }
-           prevRightFace = rightFace;
-           prevIsFg = endIsFg;
-           first = FALSE;
-           projectLeft = FALSE;
-       }
-       if (npt == 1 && somethingDrawn)
-       {
-           if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || endIsFg)
-           {
-               pixel = endIsFg ? GDK_GC_FBDATA(pGC)->values.foreground : GDK_GC_FBDATA(pGC)->values.background;
-               if (selfJoin && (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || firstIsFg))
-               {
-                   miLineJoin (pDrawable, pGC, &pixel, spanData, &firstFace,
-                               &rightFace);
-               }
-               else 
-               {
-                   if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-                       miLineArc (pDrawable, pGC, &pixel, spanData,
-                                   (LineFacePtr) NULL, &rightFace,
-                                   (double)0.0, (double)0.0, TRUE);
-               }
-           }
-           else
-           {
-               /* glue a cap to the start of the line if
-                * we're OnOffDash and ended on odd dash
-                */
-               if (selfJoin && firstIsFg)
-               {
-                   pixel = GDK_GC_FBDATA(pGC)->values.foreground;
-                   if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_PROJECTING)
-                       miLineProjectingCap (pDrawable, pGC, &pixel, spanData,
-                                   &firstFace, TRUE,
-                                   (double)0.0, (double)0.0, TRUE);
-                   else if (GDK_GC_FBDATA(pGC)->values.cap_style == GDK_CAP_ROUND)
-                       miLineArc (pDrawable, pGC, &pixel, spanData,
-                                   &firstFace, (LineFacePtr) NULL,
-                                   (double)0.0, (double)0.0, TRUE);
-               }
-           }
-       }
-    }
-    /* handle crock where all points are coincident */
-    if (!somethingDrawn && (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH || !(dashIndex & 1)))
-    {
-       /* not the same as endIsFg computation above */
-       pixel = (dashIndex & 1) ? GDK_GC_FBDATA(pGC)->values.background : GDK_GC_FBDATA(pGC)->values.foreground;
-       switch (GDK_GC_FBDATA(pGC)->values.cap_style) {
-       case GDK_CAP_ROUND:
-           miLineArc (pDrawable, pGC, &pixel, spanData,
-                      (LineFacePtr) NULL, (LineFacePtr) NULL,
-                      (double)x2, (double)y2,
-                      FALSE);
-           break;
-       case GDK_CAP_PROJECTING:
-           x1 = GDK_GC_FBDATA(pGC)->values.line_width;
-           miFillRectPolyHelper (pDrawable, pGC, &pixel, spanData,
-                                 x2 - (x1 >> 1), y2 - (x1 >> 1), x1, x1);
-           break;
-       default:
-         break;
-       }
-    }
-    if (spanData)
-       miCleanupSpanData (pDrawable, pGC, spanData);
-}
-
-/* these are stubs to allow old ddx miValidateGCs to work without change */
-
-void
-miMiter(void)
-{
-}
-
-void
-miNotMiter(void)
-{
-}
diff --git a/gdk/linux-fb/miwideline.h b/gdk/linux-fb/miwideline.h
deleted file mode 100644 (file)
index b4e60bc..0000000
+++ /dev/null
@@ -1,205 +0,0 @@
-/* $TOG: miwideline.h /main/12 1998/02/09 14:49:26 kaleb $ */
-/*
-
-Copyright 1988, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR
-OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
-ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
-OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall
-not be used in advertising or otherwise to promote the sale, use or
-other dealings in this Software without prior written authorization
-from The Open Group.
-
-*/
-/* $XFree86: xc/programs/Xserver/mi/miwideline.h,v 1.7 1998/10/04 09:39:35 dawes Exp $ */
-
-/* Author:  Keith Packard, MIT X Consortium */
-
-#ifndef MI_WIDELINE_H
-#define MI_WIDELINE_H 1
-
-#include "mispans.h"
-
-/* 
- * interface data to span-merging polygon filler
- */
-
-typedef struct _SpanData {
-    SpanGroup  fgGroup, bgGroup;
-} SpanDataRec, *SpanDataPtr;
-
-#define AppendSpanGroup(pGC, pixel, spanPtr, spanData) { \
-       SpanGroup   *group, *othergroup = NULL; \
-       if (pixel->pixel == GDK_GC_FBDATA(pGC)->values.foreground.pixel) \
-       { \
-           group = &spanData->fgGroup; \
-           if (GDK_GC_FBDATA(pGC)->values.line_style == GDK_LINE_DOUBLE_DASH) \
-               othergroup = &spanData->bgGroup; \
-       } \
-       else \
-       { \
-           group = &spanData->bgGroup; \
-           othergroup = &spanData->fgGroup; \
-       } \
-       miAppendSpans (group, othergroup, spanPtr); \
-}
-
-/*
- * Polygon edge description for integer wide-line routines
- */
-
-typedef struct _PolyEdge {
-    int            height;     /* number of scanlines to process */
-    int            x;          /* starting x coordinate */
-    int            stepx;      /* fixed integral dx */
-    int            signdx;     /* variable dx sign */
-    int            e;          /* initial error term */
-    int            dy;
-    int            dx;
-} PolyEdgeRec, *PolyEdgePtr;
-
-#define SQSECANT 108.856472512142 /* 1/sin^2(11/2) - miter limit constant */
-
-/*
- * types for general polygon routines
- */
-
-typedef struct _PolyVertex {
-    double  x, y;
-} PolyVertexRec, *PolyVertexPtr;
-
-typedef struct _PolySlope {
-    int            dx, dy;
-    double  k;     /* x0 * dy - y0 * dx */
-} PolySlopeRec, *PolySlopePtr;
-
-/*
- * Line face description for caps/joins
- */
-
-typedef struct _LineFace {
-    double  xa, ya;
-    int            dx, dy;
-    int            x, y;
-    double  k;
-} LineFaceRec, *LineFacePtr;
-
-/*
- * macros for polygon fillers
- */
-
-#define MIPOLYRELOADLEFT    if (!left_height && left_count) { \
-                               left_height = left->height; \
-                               left_x = left->x; \
-                               left_stepx = left->stepx; \
-                               left_signdx = left->signdx; \
-                               left_e = left->e; \
-                               left_dy = left->dy; \
-                               left_dx = left->dx; \
-                               --left_count; \
-                               ++left; \
-                           }
-
-#define MIPOLYRELOADRIGHT   if (!right_height && right_count) { \
-                               right_height = right->height; \
-                               right_x = right->x; \
-                               right_stepx = right->stepx; \
-                               right_signdx = right->signdx; \
-                               right_e = right->e; \
-                               right_dy = right->dy; \
-                               right_dx = right->dx; \
-                               --right_count; \
-                               ++right; \
-                       }
-
-#define MIPOLYSTEPLEFT  left_x += left_stepx; \
-                       left_e += left_dx; \
-                       if (left_e > 0) \
-                       { \
-                           left_x += left_signdx; \
-                           left_e -= left_dy; \
-                       }
-
-#define MIPOLYSTEPRIGHT right_x += right_stepx; \
-                       right_e += right_dx; \
-                       if (right_e > 0) \
-                       { \
-                           right_x += right_signdx; \
-                           right_e -= right_dy; \
-                       }
-
-#define MILINESETPIXEL(pDrawable, pGC, pixel, oldPixel) { \
-    oldPixel = GDK_GC_FBDATA(pGC)->values.foreground; \
-    if (pixel->pixel != oldPixel.pixel) { \
-        gdk_gc_set_foreground(pGC, pixel); \
-    } \
-}
-#define MILINERESETPIXEL(pDrawable, pGC, pixel, oldPixel) { \
-    if (pixel->pixel != oldPixel.pixel) { \
-        gdk_gc_set_foreground(pGC, &oldPixel); \
-    } \
-}
-
-#ifndef ICEIL
-#ifdef NOINLINEICEIL
-#define ICEIL(x) ((int)ceil(x))
-#else
-#ifdef __GNUC__
-#define ICEIL ICIEL
-static __inline int ICEIL(double x)
-{
-    int _cTmp = x;
-    return ((x == _cTmp) || (x < 0.0)) ? _cTmp : _cTmp+1;
-}
-#else
-#define ICEIL(x) ((((x) == (_cTmp = (x))) || ((x) < 0.0)) ? _cTmp : _cTmp+1)
-#define ICEILTEMPDECL static int _cTmp;
-#endif
-#endif
-#endif
-
-extern void miFillPolyHelper(GdkDrawable* pDrawable, GdkGC* pGC,
-                             GdkColor * pixel, SpanDataPtr spanData, int y,
-                             int overall_height, PolyEdgePtr left,
-                             PolyEdgePtr right, int left_count,
-                             int right_count);
-
-extern int miRoundJoinFace(LineFacePtr face, PolyEdgePtr edge,
-                           gboolean * leftEdge);
-
-extern void miRoundJoinClip(LineFacePtr pLeft, LineFacePtr pRight,
-                            PolyEdgePtr edge1, PolyEdgePtr edge2, int *y1,
-                            int *y2, gboolean *left1, gboolean *left2);
-
-extern int miRoundCapClip(LineFacePtr face, gboolean isInt, PolyEdgePtr edge,
-                          gboolean *leftEdge);
-
-extern void miLineProjectingCap(GdkDrawable* pDrawable, GdkGC* pGC,
-                                GdkColor *pixel, SpanDataPtr spanData,
-                                LineFacePtr face, gboolean isLeft,
-                                double xorg, double yorg, gboolean isInt);
-
-extern SpanDataPtr miSetupSpanData(GdkGC* pGC, SpanDataPtr spanData, int npt);
-
-extern void miCleanupSpanData(GdkDrawable* pDrawable, GdkGC* pGC,
-                              SpanDataPtr spanData);
-
-extern int miPolyBuildEdge(double x0, double y0, double k, int dx, int dy,
-                               int xi, int yi, int left, PolyEdgePtr edge);
-extern int miPolyBuildPoly(PolyVertexPtr vertices, PolySlopePtr slopes,
-                               int count, int xi, int yi, PolyEdgePtr left,
-                               PolyEdgePtr right, int *pnleft, int *pnright,
-                               int *h);
-
-#endif
diff --git a/gdk/linux-fb/mizerclip.c b/gdk/linux-fb/mizerclip.c
deleted file mode 100644 (file)
index 72b6bc7..0000000
+++ /dev/null
@@ -1,617 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mizerclip.c,v 1.1 1999/10/13 22:33:13 dawes Exp $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-
-#include <config.h>
-#include "mi.h"
-#include "miline.h"
-
-/*
-
-The bresenham error equation used in the mi/mfb/cfb line routines is:
-
-       e = error
-       dx = difference in raw X coordinates
-       dy = difference in raw Y coordinates
-       M = # of steps in X direction
-       N = # of steps in Y direction
-       B = 0 to prefer diagonal steps in a given octant,
-           1 to prefer axial steps in a given octant
-
-       For X major lines:
-               e = 2Mdy - 2Ndx - dx - B
-               -2dx <= e < 0
-
-       For Y major lines:
-               e = 2Ndx - 2Mdy - dy - B
-               -2dy <= e < 0
-
-At the start of the line, we have taken 0 X steps and 0 Y steps,
-so M = 0 and N = 0:
-
-       X major e = 2Mdy - 2Ndx - dx - B
-                 = -dx - B
-
-       Y major e = 2Ndx - 2Mdy - dy - B
-                 = -dy - B
-
-At the end of the line, we have taken dx X steps and dy Y steps,
-so M = dx and N = dy:
-
-       X major e = 2Mdy - 2Ndx - dx - B
-                 = 2dxdy - 2dydx - dx - B
-                 = -dx - B
-       Y major e = 2Ndx - 2Mdy - dy - B
-                 = 2dydx - 2dxdy - dy - B
-                 = -dy - B
-
-Thus, the error term is the same at the start and end of the line.
-
-Let us consider clipping an X coordinate.  There are 4 cases which
-represent the two independent cases of clipping the start vs. the
-end of the line and an X major vs. a Y major line.  In any of these
-cases, we know the number of X steps (M) and we wish to find the
-number of Y steps (N).  Thus, we will solve our error term equation.
-If we are clipping the start of the line, we will find the smallest
-N that satisfies our error term inequality.  If we are clipping the
-end of the line, we will find the largest number of Y steps that
-satisfies the inequality.  In that case, since we are representing
-the Y steps as (dy - N), we will actually want to solve for the
-smallest N in that equation.
-\f
-Case 1:  X major, starting X coordinate moved by M steps
-
-               -2dx <= 2Mdy - 2Ndx - dx - B < 0
-       2Ndx <= 2Mdy - dx - B + 2dx     2Ndx > 2Mdy - dx - B
-       2Ndx <= 2Mdy + dx - B           N > (2Mdy - dx - B) / 2dx
-       N <= (2Mdy + dx - B) / 2dx
-
-Since we are trying to find the smallest N that satisfies these
-equations, we should use the > inequality to find the smallest:
-
-       N = floor((2Mdy - dx - B) / 2dx) + 1
-         = floor((2Mdy - dx - B + 2dx) / 2dx)
-         = floor((2Mdy + dx - B) / 2dx)
-
-Case 1b: X major, ending X coordinate moved to M steps
-
-Same derivations as Case 1, but we want the largest N that satisfies
-the equations, so we use the <= inequality:
-
-       N = floor((2Mdy + dx - B) / 2dx)
-
-Case 2: X major, ending X coordinate moved by M steps
-
-               -2dx <= 2(dx - M)dy - 2(dy - N)dx - dx - B < 0
-               -2dx <= 2dxdy - 2Mdy - 2dxdy + 2Ndx - dx - B < 0
-               -2dx <= 2Ndx - 2Mdy - dx - B < 0
-       2Ndx >= 2Mdy + dx + B - 2dx     2Ndx < 2Mdy + dx + B
-       2Ndx >= 2Mdy - dx + B           N < (2Mdy + dx + B) / 2dx
-       N >= (2Mdy - dx + B) / 2dx
-
-Since we are trying to find the highest number of Y steps that
-satisfies these equations, we need to find the smallest N, so
-we should use the >= inequality to find the smallest:
-
-       N = ceiling((2Mdy - dx + B) / 2dx)
-         = floor((2Mdy - dx + B + 2dx - 1) / 2dx)
-         = floor((2Mdy + dx + B - 1) / 2dx)
-
-Case 2b: X major, starting X coordinate moved to M steps from end
-
-Same derivations as Case 2, but we want the smallest number of Y
-steps, so we want the highest N, so we use the < inequality:
-
-       N = ceiling((2Mdy + dx + B) / 2dx) - 1
-         = floor((2Mdy + dx + B + 2dx - 1) / 2dx) - 1
-         = floor((2Mdy + dx + B + 2dx - 1 - 2dx) / 2dx)
-         = floor((2Mdy + dx + B - 1) / 2dx)
-\f
-Case 3: Y major, starting X coordinate moved by M steps
-
-               -2dy <= 2Ndx - 2Mdy - dy - B < 0
-       2Ndx >= 2Mdy + dy + B - 2dy     2Ndx < 2Mdy + dy + B
-       2Ndx >= 2Mdy - dy + B           N < (2Mdy + dy + B) / 2dx
-       N >= (2Mdy - dy + B) / 2dx
-
-Since we are trying to find the smallest N that satisfies these
-equations, we should use the >= inequality to find the smallest:
-
-       N = ceiling((2Mdy - dy + B) / 2dx)
-         = floor((2Mdy - dy + B + 2dx - 1) / 2dx)
-         = floor((2Mdy - dy + B - 1) / 2dx) + 1
-
-Case 3b: Y major, ending X coordinate moved to M steps
-
-Same derivations as Case 3, but we want the largest N that satisfies
-the equations, so we use the < inequality:
-
-       N = ceiling((2Mdy + dy + B) / 2dx) - 1
-         = floor((2Mdy + dy + B + 2dx - 1) / 2dx) - 1
-         = floor((2Mdy + dy + B + 2dx - 1 - 2dx) / 2dx)
-         = floor((2Mdy + dy + B - 1) / 2dx)
-
-Case 4: Y major, ending X coordinate moved by M steps
-
-               -2dy <= 2(dy - N)dx - 2(dx - M)dy - dy - B < 0
-               -2dy <= 2dxdy - 2Ndx - 2dxdy + 2Mdy - dy - B < 0
-               -2dy <= 2Mdy - 2Ndx - dy - B < 0
-       2Ndx <= 2Mdy - dy - B + 2dy     2Ndx > 2Mdy - dy - B
-       2Ndx <= 2Mdy + dy - B           N > (2Mdy - dy - B) / 2dx
-       N <= (2Mdy + dy - B) / 2dx
-
-Since we are trying to find the highest number of Y steps that
-satisfies these equations, we need to find the smallest N, so
-we should use the > inequality to find the smallest:
-
-       N = floor((2Mdy - dy - B) / 2dx) + 1
-
-Case 4b: Y major, starting X coordinate moved to M steps from end
-
-Same analysis as Case 4, but we want the smallest number of Y steps
-which means the largest N, so we use the <= inequality:
-
-       N = floor((2Mdy + dy - B) / 2dx)
-\f
-Now let's try the Y coordinates, we have the same 4 cases.
-
-Case 5: X major, starting Y coordinate moved by N steps
-
-               -2dx <= 2Mdy - 2Ndx - dx - B < 0
-       2Mdy >= 2Ndx + dx + B - 2dx     2Mdy < 2Ndx + dx + B
-       2Mdy >= 2Ndx - dx + B           M < (2Ndx + dx + B) / 2dy
-       M >= (2Ndx - dx + B) / 2dy
-
-Since we are trying to find the smallest M, we use the >= inequality:
-
-       M = ceiling((2Ndx - dx + B) / 2dy)
-         = floor((2Ndx - dx + B + 2dy - 1) / 2dy)
-         = floor((2Ndx - dx + B - 1) / 2dy) + 1
-
-Case 5b: X major, ending Y coordinate moved to N steps
-
-Same derivations as Case 5, but we want the largest M that satisfies
-the equations, so we use the < inequality:
-
-       M = ceiling((2Ndx + dx + B) / 2dy) - 1
-         = floor((2Ndx + dx + B + 2dy - 1) / 2dy) - 1
-         = floor((2Ndx + dx + B + 2dy - 1 - 2dy) / 2dy)
-         = floor((2Ndx + dx + B - 1) / 2dy)
-
-Case 6: X major, ending Y coordinate moved by N steps
-
-               -2dx <= 2(dx - M)dy - 2(dy - N)dx - dx - B < 0
-               -2dx <= 2dxdy - 2Mdy - 2dxdy + 2Ndx - dx - B < 0
-               -2dx <= 2Ndx - 2Mdy - dx - B < 0
-       2Mdy <= 2Ndx - dx - B + 2dx     2Mdy > 2Ndx - dx - B
-       2Mdy <= 2Ndx + dx - B           M > (2Ndx - dx - B) / 2dy
-       M <= (2Ndx + dx - B) / 2dy
-
-Largest # of X steps means smallest M, so use the > inequality:
-
-       M = floor((2Ndx - dx - B) / 2dy) + 1
-
-Case 6b: X major, starting Y coordinate moved to N steps from end
-
-Same derivations as Case 6, but we want the smallest # of X steps
-which means the largest M, so use the <= inequality:
-
-       M = floor((2Ndx + dx - B) / 2dy)
-\f
-Case 7: Y major, starting Y coordinate moved by N steps
-
-               -2dy <= 2Ndx - 2Mdy - dy - B < 0
-       2Mdy <= 2Ndx - dy - B + 2dy     2Mdy > 2Ndx - dy - B
-       2Mdy <= 2Ndx + dy - B           M > (2Ndx - dy - B) / 2dy
-       M <= (2Ndx + dy - B) / 2dy
-
-To find the smallest M, use the > inequality:
-
-       M = floor((2Ndx - dy - B) / 2dy) + 1
-         = floor((2Ndx - dy - B + 2dy) / 2dy)
-         = floor((2Ndx + dy - B) / 2dy)
-
-Case 7b: Y major, ending Y coordinate moved to N steps
-
-Same derivations as Case 7, but we want the largest M that satisfies
-the equations, so use the <= inequality:
-
-       M = floor((2Ndx + dy - B) / 2dy)
-
-Case 8: Y major, ending Y coordinate moved by N steps
-
-               -2dy <= 2(dy - N)dx - 2(dx - M)dy - dy - B < 0
-               -2dy <= 2dxdy - 2Ndx - 2dxdy + 2Mdy - dy - B < 0
-               -2dy <= 2Mdy - 2Ndx - dy - B < 0
-       2Mdy >= 2Ndx + dy + B - 2dy     2Mdy < 2Ndx + dy + B
-       2Mdy >= 2Ndx - dy + B           M < (2Ndx + dy + B) / 2dy
-       M >= (2Ndx - dy + B) / 2dy
-
-To find the highest X steps, find the smallest M, use the >= inequality:
-
-       M = ceiling((2Ndx - dy + B) / 2dy)
-         = floor((2Ndx - dy + B + 2dy - 1) / 2dy)
-         = floor((2Ndx + dy + B - 1) / 2dy)
-
-Case 8b: Y major, starting Y coordinate moved to N steps from the end
-
-Same derivations as Case 8, but we want to find the smallest # of X
-steps which means the largest M, so we use the < inequality:
-
-       M = ceiling((2Ndx + dy + B) / 2dy) - 1
-         = floor((2Ndx + dy + B + 2dy - 1) / 2dy) - 1
-         = floor((2Ndx + dy + B + 2dy - 1 - 2dy) / 2dy)
-         = floor((2Ndx + dy + B - 1) / 2dy)
-\f
-So, our equations are:
-
-       1:  X major move x1 to x1+M     floor((2Mdy + dx - B) / 2dx)
-       1b: X major move x2 to x1+M     floor((2Mdy + dx - B) / 2dx)
-       2:  X major move x2 to x2-M     floor((2Mdy + dx + B - 1) / 2dx)
-       2b: X major move x1 to x2-M     floor((2Mdy + dx + B - 1) / 2dx)
-
-       3:  Y major move x1 to x1+M     floor((2Mdy - dy + B - 1) / 2dx) + 1
-       3b: Y major move x2 to x1+M     floor((2Mdy + dy + B - 1) / 2dx)
-       4:  Y major move x2 to x2-M     floor((2Mdy - dy - B) / 2dx) + 1
-       4b: Y major move x1 to x2-M     floor((2Mdy + dy - B) / 2dx)
-
-       5:  X major move y1 to y1+N     floor((2Ndx - dx + B - 1) / 2dy) + 1
-       5b: X major move y2 to y1+N     floor((2Ndx + dx + B - 1) / 2dy)
-       6:  X major move y2 to y2-N     floor((2Ndx - dx - B) / 2dy) + 1
-       6b: X major move y1 to y2-N     floor((2Ndx + dx - B) / 2dy)
-
-       7:  Y major move y1 to y1+N     floor((2Ndx + dy - B) / 2dy)
-       7b: Y major move y2 to y1+N     floor((2Ndx + dy - B) / 2dy)
-       8:  Y major move y2 to y2-N     floor((2Ndx + dy + B - 1) / 2dy)
-       8b: Y major move y1 to y2-N     floor((2Ndx + dy + B - 1) / 2dy)
-
-We have the following constraints on all of the above terms:
-
-       0 < M,N <= 2^15          2^15 can be imposed by miZeroClipLine
-       0 <= dx/dy <= 2^16 - 1
-       0 <= B <= 1
-
-The floor in all of the above equations can be accomplished with a
-simple C divide operation provided that both numerator and denominator
-are positive.
-
-Since dx,dy >= 0 and since moving an X coordinate implies that dx != 0
-and moving a Y coordinate implies dy != 0, we know that the denominators
-are all > 0.
-
-For all lines, (-B) and (B-1) are both either 0 or -1, depending on the
-bias.  Thus, we have to show that the 2MNdxy +/- dxy terms are all >= 1
-or > 0 to prove that the numerators are positive (or zero).
-
-For X Major lines we know that dx > 0 and since 2Mdy is >= 0 due to the
-constraints, the first four equations all have numerators >= 0.
-
-For the second four equations, M > 0, so 2Mdy >= 2dy so (2Mdy - dy) >= dy
-So (2Mdy - dy) > 0, since they are Y major lines.  Also, (2Mdy + dy) >= 3dy
-or (2Mdy + dy) > 0.  So all of their numerators are >= 0.
-
-For the third set of four equations, N > 0, so 2Ndx >= 2dx so (2Ndx - dx)
->= dx > 0.  Similarly (2Ndx + dx) >= 3dx > 0.  So all numerators >= 0.
-
-For the fourth set of equations, dy > 0 and 2Ndx >= 0, so all numerators
-are > 0.
-
-To consider overflow, consider the case of 2 * M,N * dx,dy + dx,dy.  This
-is bounded <= 2 * 2^15 * (2^16 - 1) + (2^16 - 1)
-          <= 2^16 * (2^16 - 1) + (2^16 - 1)
-          <= 2^32 - 2^16 + 2^16 - 1
-          <= 2^32 - 1
-Since the (-B) and (B-1) terms are all 0 or -1, the maximum value of
-the numerator is therefore (2^32 - 1), which does not overflow an unsigned
-32 bit variable.
-
-*/
-
-/* Bit codes for the terms of the 16 clipping equations defined below. */
-
-#define T_2NDX         (1 << 0)
-#define T_2MDY         (0)                             /* implicit term */
-#define T_DXNOTY       (1 << 1)
-#define T_DYNOTX       (0)                             /* implicit term */
-#define T_SUBDXORY     (1 << 2)
-#define T_ADDDX                (T_DXNOTY)                      /* composite term */
-#define T_SUBDX                (T_DXNOTY | T_SUBDXORY)         /* composite term */
-#define T_ADDDY                (T_DYNOTX)                      /* composite term */
-#define T_SUBDY                (T_DYNOTX | T_SUBDXORY)         /* composite term */
-#define T_BIASSUBONE   (1 << 3)
-#define T_SUBBIAS      (0)                             /* implicit term */
-#define T_DIV2DX       (1 << 4)
-#define T_DIV2DY       (0)                             /* implicit term */
-#define T_ADDONE       (1 << 5)
-
-/* Bit masks defining the 16 equations used in miZeroClipLine. */
-
-#define EQN1   (T_2MDY | T_ADDDX | T_SUBBIAS    | T_DIV2DX)
-#define EQN1B  (T_2MDY | T_ADDDX | T_SUBBIAS    | T_DIV2DX)
-#define EQN2   (T_2MDY | T_ADDDX | T_BIASSUBONE | T_DIV2DX)
-#define EQN2B  (T_2MDY | T_ADDDX | T_BIASSUBONE | T_DIV2DX)
-
-#define EQN3   (T_2MDY | T_SUBDY | T_BIASSUBONE | T_DIV2DX | T_ADDONE)
-#define EQN3B  (T_2MDY | T_ADDDY | T_BIASSUBONE | T_DIV2DX)
-#define EQN4   (T_2MDY | T_SUBDY | T_SUBBIAS    | T_DIV2DX | T_ADDONE)
-#define EQN4B  (T_2MDY | T_ADDDY | T_SUBBIAS    | T_DIV2DX)
-
-#define EQN5   (T_2NDX | T_SUBDX | T_BIASSUBONE | T_DIV2DY | T_ADDONE)
-#define EQN5B  (T_2NDX | T_ADDDX | T_BIASSUBONE | T_DIV2DY)
-#define EQN6   (T_2NDX | T_SUBDX | T_SUBBIAS    | T_DIV2DY | T_ADDONE)
-#define EQN6B  (T_2NDX | T_ADDDX | T_SUBBIAS    | T_DIV2DY)
-
-#define EQN7   (T_2NDX | T_ADDDY | T_SUBBIAS    | T_DIV2DY)
-#define EQN7B  (T_2NDX | T_ADDDY | T_SUBBIAS    | T_DIV2DY)
-#define EQN8   (T_2NDX | T_ADDDY | T_BIASSUBONE | T_DIV2DY)
-#define EQN8B  (T_2NDX | T_ADDDY | T_BIASSUBONE | T_DIV2DY)
-
-/* miZeroClipLine
- *
- * returns:  1 for partially clipped line
- *          -1 for completely clipped line
- *
- */
-int
-miZeroClipLine(int xmin, int ymin, int xmax, int ymax,
-              int *new_x1, int *new_y1, int *new_x2, int *new_y2,
-              unsigned int adx, unsigned int ady,
-              int *pt1_clipped, int *pt2_clipped, int octant,
-               unsigned int bias, int oc1, int oc2)
-{
-    int swapped = 0;
-    int clipDone = 0;
-    guint32 utmp = 0;
-    int clip1, clip2;
-    int x1, y1, x2, y2;
-    int x1_orig, y1_orig, x2_orig, y2_orig;
-    int xmajor;
-    int negslope = 0, anchorval = 0;
-    unsigned int eqn = 0;
-
-    x1 = x1_orig = *new_x1;
-    y1 = y1_orig = *new_y1;
-    x2 = x2_orig = *new_x2;
-    y2 = y2_orig = *new_y2;
-
-    clip1 = 0;
-    clip2 = 0;
-
-    xmajor = IsXMajorOctant(octant);
-    bias = ((bias >> octant) & 1);
-
-    while (1)
-    {
-        if ((oc1 & oc2) != 0)                  /* trivial reject */
-       {
-           clipDone = -1;
-           clip1 = oc1;
-           clip2 = oc2;
-           break;
-       }
-        else if ((oc1 | oc2) == 0)             /* trivial accept */
-        {
-           clipDone = 1;
-           if (swapped)
-           {
-               SWAPINT_PAIR(x1, y1, x2, y2);
-               SWAPINT(clip1, clip2);
-           }
-           break;
-        }
-        else                   /* have to clip */
-        {
-           /* only clip one point at a time */
-           if (oc1 == 0)
-           {
-               SWAPINT_PAIR(x1, y1, x2, y2);
-               SWAPINT_PAIR(x1_orig, y1_orig, x2_orig, y2_orig);
-               SWAPINT(oc1, oc2);
-               SWAPINT(clip1, clip2);
-               swapped = !swapped;
-           }
-    
-           clip1 |= oc1;
-           if (oc1 & OUT_LEFT)
-           {
-               negslope = IsYDecreasingOctant(octant);
-               utmp = xmin - x1_orig;
-               if (utmp <= 32767)              /* clip based on near endpt */
-               {
-                   if (xmajor)
-                       eqn = (swapped) ? EQN2 : EQN1;
-                   else
-                       eqn = (swapped) ? EQN4 : EQN3;
-                   anchorval = y1_orig;
-               }
-               else                            /* clip based on far endpt */
-               {
-                   utmp = x2_orig - xmin;
-                   if (xmajor)
-                       eqn = (swapped) ? EQN1B : EQN2B;
-                   else
-                       eqn = (swapped) ? EQN3B : EQN4B;
-                   anchorval = y2_orig;
-                   negslope = !negslope;
-               }
-               x1 = xmin;
-           }
-           else if (oc1 & OUT_ABOVE)
-           {
-               negslope = IsXDecreasingOctant(octant);
-               utmp = ymin - y1_orig;
-               if (utmp <= 32767)              /* clip based on near endpt */
-               {
-                   if (xmajor)
-                       eqn = (swapped) ? EQN6 : EQN5;
-                   else
-                       eqn = (swapped) ? EQN8 : EQN7;
-                   anchorval = x1_orig;
-               }
-               else                            /* clip based on far endpt */
-               {
-                   utmp = y2_orig - ymin;
-                   if (xmajor)
-                       eqn = (swapped) ? EQN5B : EQN6B;
-                   else
-                       eqn = (swapped) ? EQN7B : EQN8B;
-                   anchorval = x2_orig;
-                   negslope = !negslope;
-               }
-               y1 = ymin;
-           }
-           else if (oc1 & OUT_RIGHT)
-           {
-               negslope = IsYDecreasingOctant(octant);
-               utmp = x1_orig - xmax;
-               if (utmp <= 32767)              /* clip based on near endpt */
-               {
-                   if (xmajor)
-                       eqn = (swapped) ? EQN2 : EQN1;
-                   else
-                       eqn = (swapped) ? EQN4 : EQN3;
-                   anchorval = y1_orig;
-               }
-               else                            /* clip based on far endpt */
-               {
-                   /*
-                    * Technically since the equations can handle
-                    * utmp == 32768, this overflow code isn't
-                    * needed since X11 protocol can't generate
-                    * a line which goes more than 32768 pixels
-                    * to the right of a clip rectangle.
-                    */
-                   utmp = xmax - x2_orig;
-                   if (xmajor)
-                       eqn = (swapped) ? EQN1B : EQN2B;
-                   else
-                       eqn = (swapped) ? EQN3B : EQN4B;
-                   anchorval = y2_orig;
-                   negslope = !negslope;
-               }
-               x1 = xmax;
-           }
-           else if (oc1 & OUT_BELOW)
-           {
-               negslope = IsXDecreasingOctant(octant);
-               utmp = y1_orig - ymax;
-               if (utmp <= 32767)              /* clip based on near endpt */
-               {
-                   if (xmajor)
-                       eqn = (swapped) ? EQN6 : EQN5;
-                   else
-                       eqn = (swapped) ? EQN8 : EQN7;
-                   anchorval = x1_orig;
-               }
-               else                            /* clip based on far endpt */
-               {
-                   /*
-                    * Technically since the equations can handle
-                    * utmp == 32768, this overflow code isn't
-                    * needed since X11 protocol can't generate
-                    * a line which goes more than 32768 pixels
-                    * below the bottom of a clip rectangle.
-                    */
-                   utmp = ymax - y2_orig;
-                   if (xmajor)
-                       eqn = (swapped) ? EQN5B : EQN6B;
-                   else
-                       eqn = (swapped) ? EQN7B : EQN8B;
-                   anchorval = x2_orig;
-                   negslope = !negslope;
-               }
-               y1 = ymax;
-           }
-
-           if (swapped)
-               negslope = !negslope;
-
-           utmp <<= 1;                 /* utmp = 2N or 2M */
-           if (eqn & T_2NDX)
-               utmp = (utmp * adx);
-           else /* (eqn & T_2MDY) */
-               utmp = (utmp * ady);
-           if (eqn & T_DXNOTY)
-               if (eqn & T_SUBDXORY)
-                   utmp -= adx;
-               else
-                   utmp += adx;
-           else /* (eqn & T_DYNOTX) */
-               if (eqn & T_SUBDXORY)
-                   utmp -= ady;
-               else
-                   utmp += ady;
-           if (eqn & T_BIASSUBONE)
-               utmp += bias - 1;
-           else /* (eqn & T_SUBBIAS) */
-               utmp -= bias;
-           if (eqn & T_DIV2DX)
-               utmp /= (adx << 1);
-           else /* (eqn & T_DIV2DY) */
-               utmp /= (ady << 1);
-           if (eqn & T_ADDONE)
-               utmp++;
-
-           if (negslope)
-               utmp = -utmp;
-
-           if (eqn & T_2NDX)   /* We are calculating X steps */
-               x1 = anchorval + utmp;
-           else                /* else, Y steps */
-               y1 = anchorval + utmp;
-
-           oc1 = 0;
-           MIOUTCODES(oc1, x1, y1, xmin, ymin, xmax, ymax);
-        }
-    }
-
-    *new_x1 = x1;
-    *new_y1 = y1;
-    *new_x2 = x2;
-    *new_y2 = y2;
-    
-    *pt1_clipped = clip1;
-    *pt2_clipped = clip2;
-
-    return clipDone;
-}
diff --git a/gdk/linux-fb/mizerline.c b/gdk/linux-fb/mizerline.c
deleted file mode 100644 (file)
index c9a5ce1..0000000
+++ /dev/null
@@ -1,324 +0,0 @@
-/* $XFree86: xc/programs/Xserver/mi/mizerline.c,v 3.4 1999/10/14 04:43:16 dawes Exp $ */
-/***********************************************************
-
-Copyright 1987, 1998  The Open Group
-
-All Rights Reserved.
-
-The above copyright notice and this permission notice shall be included in
-all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-OPEN GROUP BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
-CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of The Open Group shall not be
-used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization from The Open Group.
-
-
-Copyright 1987 by Digital Equipment Corporation, Maynard, Massachusetts.
-
-                        All Rights Reserved
-
-Permission to use, copy, modify, and distribute this software and its 
-documentation for any purpose and without fee is hereby granted, 
-provided that the above copyright notice appear in all copies and that
-both that copyright notice and this permission notice appear in 
-supporting documentation, and that the name of Digital not be
-used in advertising or publicity pertaining to distribution of the
-software without specific, written prior permission.  
-
-DIGITAL DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
-ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
-DIGITAL BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
-ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
-WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
-ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
-SOFTWARE.
-
-******************************************************************/
-/* $TOG: mizerline.c /main/18 1998/02/09 14:49:45 kaleb $ */
-
-#include <config.h>
-#include "mi.h"
-#include "miline.h"
-
-/* Draw lineSolid, fillStyle-independent zero width lines.
- *
- * Must keep X and Y coordinates in "ints" at least until after they're
- * translated and clipped to accomodate CoordModePrevious lines with very
- * large coordinates.
- *
- * Draws the same pixels regardless of sign(dx) or sign(dy).
- *
- * Ken Whaley
- *
- */
-
-/* largest positive value that can fit into a component of a point.
- * Assumes that the point structure is {type x, y;} where type is
- * a signed type.
- */
-#define MAX_COORDINATE ((1 << (((sizeof(GdkPoint) >> 1) << 3) - 1)) - 1)
-
-#define MI_OUTPUT_POINT(xx, yy)\
-{\
-    if ( !new_span && yy == current_y)\
-    {\
-        if (xx < spans->x)\
-           spans->x = xx;\
-        spans->width++; \
-    }\
-    else\
-    {\
-        ++Nspans;\
-       ++spans;\
-       spans->x = xx;\
-       spans->y = yy;\
-        spans->width = 1; \
-       current_y = yy;\
-        new_span = FALSE;\
-    }\
-}
-
-void
-miZeroLine(GdkDrawable *pDraw, GdkGC *pGC,
-           int mode, int npt, GdkPoint *pptInit)
-{
-    int Nspans, current_y = 0;
-    GdkPoint* ppt; 
-    GdkSpan* pspanInit, *spans;
-    int list_len;
-    int xleft, ytop, xright, ybottom;
-    int new_x1, new_y1, new_x2, new_y2;
-    int x = 0, y = 0, x1, y1, x2, y2, xstart, ystart;
-    int oc1, oc2;
-    int result;
-    int pt1_clipped, pt2_clipped = 0;
-    gboolean new_span;
-    int signdx, signdy;
-    int clipdx, clipdy;
-    int width, height;
-    int adx, ady;
-    int octant;
-    unsigned int bias = miGetZeroLineBias();
-    int e, e1, e2, e3; /* Bresenham error terms */
-    int length;                /* length of lines == # of pixels on major axis */
-
-    xleft   = 0;
-    ytop    = 0;
-    xright  = GDK_DRAWABLE_FBDATA(pDraw)->width - 1;
-    ybottom = GDK_DRAWABLE_FBDATA(pDraw)->height - 1;
-
-    /* it doesn't matter whether we're in drawable or screen coordinates,
-     * FillSpans simply cannot take starting coordinates outside of the
-     * range of a GdkPoint component.
-     */
-
-    /* since we're clipping to the drawable's boundaries & coordinate
-     * space boundaries, we're guaranteed that the larger of width/height
-     * is the longest span we'll need to output
-     */
-    width = xright - xleft + 1;
-    height = ybottom - ytop + 1;
-    list_len = (height >= width) ? height : width;
-    pspanInit = (GdkSpan*)ALLOCATE_LOCAL(list_len * sizeof(GdkSpan));
-    if (!pspanInit)
-       return;
-
-    Nspans = 0;
-    new_span = TRUE;
-    spans  = pspanInit - 1;
-    ppt = pptInit;
-
-    xstart = ppt->x;
-    ystart = ppt->y;
-    
-    /* x2, y2, oc2 copied to x1, y1, oc1 at top of loop to simplify
-     * iteration logic
-     */
-    x2 = xstart;
-    y2 = ystart;
-    oc2 = 0;
-    MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
-
-    while (--npt > 0)
-    {
-       if (Nspans > 0)
-         gdk_fb_fill_spans(pDraw, pGC, pspanInit, Nspans, FALSE);
-       Nspans = 0;
-       new_span = TRUE;
-       spans  = pspanInit - 1;
-
-       x1  = x2;
-       y1  = y2;
-       oc1 = oc2;
-       ++ppt;
-
-       x2 = ppt->x;
-       y2 = ppt->y;
-
-       oc2 = 0;
-       MIOUTCODES(oc2, x2, y2, xleft, ytop, xright, ybottom);
-
-       CalcLineDeltas(x1, y1, x2, y2, adx, ady, signdx, signdy, 1, 1, octant);
-
-       if (adx > ady)
-       {
-           e1 = ady << 1;
-           e2 = e1 - (adx << 1);
-           e  = e1 - adx;
-           length  = adx;      /* don't draw endpoint in main loop */
-
-           FIXUP_ERROR(e, octant, bias);
-
-           new_x1 = x1;
-           new_y1 = y1;
-           new_x2 = x2;
-           new_y2 = y2;
-           pt1_clipped = 0;
-           pt2_clipped = 0;
-
-           if ((oc1 | oc2) != 0)
-           {
-               result = miZeroClipLine(xleft, ytop, xright, ybottom,
-                                       &new_x1, &new_y1, &new_x2, &new_y2,
-                                       adx, ady,
-                                       &pt1_clipped, &pt2_clipped,
-                                       octant, bias, oc1, oc2);
-               if (result == -1)
-                   continue;
-
-               length = abs(new_x2 - new_x1);
-
-               /* if we've clipped the endpoint, always draw the full length
-                * of the segment, because then the capstyle doesn't matter 
-                */
-               if (pt2_clipped)
-                   length++;
-
-               if (pt1_clipped)
-               {
-                   /* must calculate new error terms */
-                   clipdx = abs(new_x1 - x1);
-                   clipdy = abs(new_y1 - y1);
-                   e += (clipdy * e2) + ((clipdx - clipdy) * e1);
-               }
-           }
-
-           /* draw the segment */
-
-           x = new_x1;
-           y = new_y1;
-           
-           e3 = e2 - e1;
-           e  = e - e1;
-
-           while (length--)
-           {
-               MI_OUTPUT_POINT(x, y);
-               e += e1;
-               if (e >= 0)
-               {
-                   y += signdy;
-                   e += e3;
-               }
-               x += signdx;
-           }
-       }
-       else    /* Y major line */
-       {
-           e1 = adx << 1;
-           e2 = e1 - (ady << 1);
-           e  = e1 - ady;
-           length  = ady;      /* don't draw endpoint in main loop */
-
-           SetYMajorOctant(octant);
-           FIXUP_ERROR(e, octant, bias);
-
-           new_x1 = x1;
-           new_y1 = y1;
-           new_x2 = x2;
-           new_y2 = y2;
-           pt1_clipped = 0;
-           pt2_clipped = 0;
-
-           if ((oc1 | oc2) != 0)
-           {
-               result = miZeroClipLine(xleft, ytop, xright, ybottom,
-                                       &new_x1, &new_y1, &new_x2, &new_y2,
-                                       adx, ady,
-                                       &pt1_clipped, &pt2_clipped,
-                                       octant, bias, oc1, oc2);
-               if (result == -1)
-                   continue;
-
-               length = abs(new_y2 - new_y1);
-
-               /* if we've clipped the endpoint, always draw the full length
-                * of the segment, because then the capstyle doesn't matter 
-                */
-               if (pt2_clipped)
-                   length++;
-
-               if (pt1_clipped)
-               {
-                   /* must calculate new error terms */
-                   clipdx = abs(new_x1 - x1);
-                   clipdy = abs(new_y1 - y1);
-                   e += (clipdx * e2) + ((clipdy - clipdx) * e1);
-               }
-           }
-
-           /* draw the segment */
-
-           x = new_x1;
-           y = new_y1;
-
-           e3 = e2 - e1;
-           e  = e - e1;
-
-           while (length--)
-           {
-               MI_OUTPUT_POINT(x, y);
-               e += e1;
-               if (e >= 0)
-               {
-                   x += signdx;
-                   e += e3;
-               }
-               y += signdy;
-           }
-       }
-    }
-
-    /* only do the capnotlast check on the last segment
-     * and only if the endpoint wasn't clipped.  And then, if the last
-     * point is the same as the first point, do not draw it, unless the
-     * line is degenerate
-     */
-    if ( (! pt2_clipped) && (GDK_GC_FBDATA(pGC)->values.cap_style != GDK_CAP_NOT_LAST) &&
-               (((xstart != x2) || (ystart != y2)) || (ppt == pptInit + 1)))
-    {
-       MI_OUTPUT_POINT(x, y);
-    }    
-
-    if (Nspans > 0)
-      gdk_fb_fill_spans(pDraw, pGC, pspanInit, Nspans, FALSE);
-
-    DEALLOCATE_LOCAL(pspanInit);
-}
-
-void
-miZeroDashLine(GdkDrawable *dst, GdkGC *pgc,
-               int mode, int nptInit, GdkPoint *pptInit)
-{
-    /* XXX kludge until real zero-width dash code is written */
-    GDK_GC_FBDATA(pgc)->values.line_width = 1;
-    miWideDash (dst, pgc, mode, nptInit, pptInit);
-    GDK_GC_FBDATA(pgc)->values.line_width = 0;
-}
diff --git a/gdk/linux-fb/x-cursors.xbm b/gdk/linux-fb/x-cursors.xbm
deleted file mode 100644 (file)
index 0e130d6..0000000
+++ /dev/null
@@ -1,924 +0,0 @@
-#define X_cursor_width 14
-#define X_cursor_height 14
-#define X_cursor_x_hot 6
-#define X_cursor_y_hot 6
-static char X_cursor_bits[] = {
-0x07, 0xb8, 0x0f, 0x3c, 0x1f, 0x3e, 0x3e, 0x1f, 0xfc, 0x0f, 0xf8, 0x07, 0xf0, 0x03, 0xf0, 0x03, 0xf8, 0x07, 0xfc, 0x0f, 0x3e, 0x1f, 0x1f, 0x3e, 0x0f, 0x3c, 0x07, 0x38};
-#define X_cursor_mask_width 16
-#define X_cursor_mask_height 16
-#define X_cursor_mask_x_hot 7
-#define X_cursor_mask_y_hot 7
-static char X_cursor_mask_bits[] = {
-0x0f, 0xf0, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xfe, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xf0, 0x0f, 0xf0, 0x0f, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0x7f, 0xfe, 0x3f, 0xfc, 0x1f, 0xf8, 0x0f, 0xf0};
-#define arrow_width 14
-#define arrow_height 14
-#define arrow_x_hot 13
-#define arrow_y_hot 0
-static char arrow_bits[] = {
-00, 0xb0, 00, 0x3c, 00, 0x1f, 0xc0, 0x1f, 0xf0, 0x0f, 0xfc, 0x0f, 0xc0, 0x07, 0xe0, 0x07, 0x70, 0x03, 0x38, 0x03, 0x1c, 0x01, 0x0e, 0x01, 0x07, 00, 0x02, 00};
-#define arrow_mask_width 16
-#define arrow_mask_height 16
-#define arrow_mask_x_hot 14
-#define arrow_mask_y_hot 1
-static char arrow_mask_bits[] = {
-00, 0xe0, 00, 0xf8, 00, 0xfe, 0x80, 0x7f, 0xe0, 0x7f, 0xf8, 0x3f, 0xfc, 0x3f, 0xfc, 0x1f, 0xe0, 0x1f, 0xf0, 0x0f, 0xf8, 0x0f, 0x7c, 0x07, 0x3e, 0x07, 0x1f, 0x02, 0x0e, 00, 0x04, 00};
-#define based_arrow_down_width 8
-#define based_arrow_down_height 10
-#define based_arrow_down_x_hot 3
-#define based_arrow_down_y_hot 9
-static char based_arrow_down_bits[] = {
-0xff, 00, 0xff, 0x18, 0x18, 0x18, 0x18, 0x5a, 0x3c, 0x18};
-#define based_arrow_down_mask_width 10
-#define based_arrow_down_mask_height 12
-#define based_arrow_down_mask_x_hot 4
-#define based_arrow_down_mask_y_hot 10
-static char based_arrow_down_mask_bits[] = {
-0xff, 0x23, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0x78, 00, 0x78, 00, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0xfc, 00, 0x78, 00};
-#define based_arrow_up_width 8
-#define based_arrow_up_height 10
-#define based_arrow_up_x_hot 3
-#define based_arrow_up_y_hot 9
-static char based_arrow_up_bits[] = {
-0x18, 0x3c, 0x5a, 0x18, 0x18, 0x18, 0x18, 0xff, 00, 0xff};
-#define based_arrow_up_mask_width 10
-#define based_arrow_up_mask_height 12
-#define based_arrow_up_mask_x_hot 4
-#define based_arrow_up_mask_y_hot 10
-static char based_arrow_up_mask_bits[] = {
-0x30, 0x20, 0x78, 00, 0xfe, 0x01, 0xfe, 0x01, 0xfe, 0x01, 0x78, 00, 0x78, 00, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03};
-#define boat_width 16
-#define boat_height 8
-#define boat_x_hot 14
-#define boat_y_hot 3
-static char boat_bits[] = {
-0x80, 00, 0xe0, 0x03, 0x11, 0x06, 0xff, 0xff, 00, 0x18, 00, 0x04, 00, 0x02, 0xff, 0x03};
-#define boat_mask_width 16
-#define boat_mask_height 9
-#define boat_mask_x_hot 14
-#define boat_mask_y_hot 4
-static char boat_mask_bits[] = {
-0xe0, 00, 0xf0, 0x03, 0xf9, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0xff, 0x07, 0xff, 0x03};
-#define bogosity_width 13
-#define bogosity_height 14
-#define bogosity_x_hot 6
-#define bogosity_y_hot 6
-static char bogosity_bits[] = {
-0x47, 0x9c, 0x44, 0x04, 0x44, 0x04, 0x44, 0x04, 0xff, 0x1f, 0x45, 0x14, 0x45, 0x14, 0x45, 0x14, 0x45, 0x14, 0xff, 0x1f, 0x44, 0x04, 0x44, 0x04, 0x44, 0x04, 0x47, 0x1c};
-#define bogosity_mask_width 15
-#define bogosity_mask_height 16
-#define bogosity_mask_x_hot 7
-#define bogosity_mask_y_hot 7
-static char bogosity_mask_bits[] = {
-0xdf, 0x7d, 0xdf, 0x7d, 0xdf, 0x7d, 0xdc, 0x1d, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xdf, 0x7d, 0xdf, 0x7d, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xdc, 0x1d, 0xdf, 0x7d, 0xdf, 0x7d, 0xdf, 0x7d};
-#define bottom_left_corner_width 14
-#define bottom_left_corner_height 14
-#define bottom_left_corner_x_hot 0
-#define bottom_left_corner_y_hot 13
-static char bottom_left_corner_bits[] = {
-0x03, 0x80, 0x03, 00, 0x23, 0x08, 0x23, 0x04, 0x23, 0x02, 0x23, 0x01, 0xa3, 00, 0x63, 00, 0xe3, 0x0f, 0x03, 00, 0x03, 00, 0x03, 00, 0xff, 0x3f, 0xff, 0x3f};
-#define bottom_left_corner_mask_width 16
-#define bottom_left_corner_mask_height 16
-#define bottom_left_corner_mask_x_hot 1
-#define bottom_left_corner_mask_y_hot 14
-static char bottom_left_corner_mask_bits[] = {
-0x0f, 00, 0x0f, 00, 0xef, 0x30, 0xef, 0x38, 0xef, 0x1c, 0xef, 0x0e, 0xef, 0x07, 0xef, 0x03, 0xef, 0x3f, 0xef, 0x3f, 0xef, 0x3f, 0x0f, 00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define bottom_right_corner_width 14
-#define bottom_right_corner_height 14
-#define bottom_right_corner_x_hot 13
-#define bottom_right_corner_y_hot 13
-static char bottom_right_corner_bits[] = {
-00, 0xb0, 00, 0x30, 0x04, 0x31, 0x08, 0x31, 0x10, 0x31, 0x20, 0x31, 0x40, 0x31, 0x80, 0x31, 0xfc, 0x31, 00, 0x30, 00, 0x30, 00, 0x30, 0xff, 0x3f, 0xff, 0x3f};
-#define bottom_right_corner_mask_width 16
-#define bottom_right_corner_mask_height 16
-#define bottom_right_corner_mask_x_hot 14
-#define bottom_right_corner_mask_y_hot 14
-static char bottom_right_corner_mask_bits[] = {
-00, 0xf0, 00, 0xf0, 0x0c, 0xf7, 0x1c, 0xf7, 0x38, 0xf7, 0x70, 0xf7, 0xe0, 0xf7, 0xc0, 0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define bottom_side_width 13
-#define bottom_side_height 14
-#define bottom_side_x_hot 6
-#define bottom_side_y_hot 13
-static char bottom_side_bits[] = {
-0x40, 0x80, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x44, 0x04, 0x48, 0x02, 0x50, 0x01, 0xe0, 00, 0x40, 00, 00, 00, 0xff, 0x1f, 0xff, 0x1f};
-#define bottom_side_mask_width 15
-#define bottom_side_mask_height 16
-#define bottom_side_mask_x_hot 7
-#define bottom_side_mask_y_hot 14
-static char bottom_side_mask_bits[] = {
-0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xcc, 0x19, 0xdc, 0x1d, 0xf8, 0x0f, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f};
-#define bottom_tee_width 14
-#define bottom_tee_height 10
-#define bottom_tee_x_hot 7
-#define bottom_tee_y_hot 9
-static char bottom_tee_bits[] = {
-0xc0, 0x80, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xff, 0x3f, 0xff, 0x3f};
-#define bottom_tee_mask_width 16
-#define bottom_tee_mask_height 12
-#define bottom_tee_mask_x_hot 8
-#define bottom_tee_mask_y_hot 10
-static char bottom_tee_mask_bits[] = {
-0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define box_spiral_width 15
-#define box_spiral_height 16
-#define box_spiral_x_hot 8
-#define box_spiral_y_hot 8
-static char box_spiral_bits[] = {
-0xff, 0xff, 0x01, 00, 0xfd, 0x7f, 0x05, 0x40, 0xf5, 0x5f, 0x15, 0x50, 0xd5, 0x57, 0x55, 0x54, 0x55, 0x55, 0xd5, 0x55, 0x15, 0x54, 0xf5, 0x57, 0x05, 0x50, 0xfd, 0x5f, 0x01, 0x40, 0xff, 0x7f};
-#define box_spiral_mask_width 16
-#define box_spiral_mask_height 16
-#define box_spiral_mask_x_hot 8
-#define box_spiral_mask_y_hot 8
-static char box_spiral_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define center_ptr_width 10
-#define center_ptr_height 14
-#define center_ptr_x_hot 4
-#define center_ptr_y_hot 0
-static char center_ptr_bits[] = {
-0x30, 0x90, 0x30, 00, 0x78, 00, 0x78, 00, 0xfc, 00, 0xfc, 00, 0xfe, 0x01, 0xfe, 0x01, 0x33, 0x03, 0x31, 0x02, 0x30, 00, 0x30, 00, 0x30, 00, 0x30, 00};
-#define center_ptr_mask_width 12
-#define center_ptr_mask_height 16
-#define center_ptr_mask_x_hot 5
-#define center_ptr_mask_y_hot 1
-static char center_ptr_mask_bits[] = {
-0xf0, 0x20, 0xf0, 00, 0xf8, 0x01, 0xf8, 0x01, 0xfc, 0x03, 0xfc, 0x03, 0xfe, 0x07, 0xfe, 0x07, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xf7, 0x0e, 0xf0, 00, 0xf0, 00, 0xf0, 00, 0xf0, 00};
-#define circle_width 14
-#define circle_height 14
-#define circle_x_hot 7
-#define circle_y_hot 7
-static char circle_bits[] = {
-0xe0, 0x81, 0xf8, 0x07, 0xfc, 0x0f, 0x1e, 0x1e, 0x0e, 0x1c, 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x07, 0x38, 0x0e, 0x1c, 0x1e, 0x1e, 0xfc, 0x0f, 0xf8, 0x07, 0xe0, 0x01};
-#define circle_mask_width 16
-#define circle_mask_height 16
-#define circle_mask_x_hot 8
-#define circle_mask_y_hot 8
-static char circle_mask_bits[] = {
-0xe0, 0x07, 0xf8, 0x1f, 0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f, 0x3f, 0xfc, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x1f, 0xf8, 0x3f, 0xfc, 0xfe, 0x7f, 0xfe, 0x7f, 0xfc, 0x3f, 0xf8, 0x1f, 0xe0, 0x07};
-#define clock_width 14
-#define clock_height 16
-#define clock_x_hot 6
-#define clock_y_hot 3
-static char clock_bits[] = {
-0xfc, 0x8f, 0xe6, 0x19, 0x13, 0x33, 0xc9, 0x24, 0x79, 0x24, 0x11, 0x22, 0xe3, 0x31, 0xfe, 0x1f, 0xca, 0x14, 0xca, 0x14, 0xca, 0x14, 0xea, 0x15, 0xcb, 0x34, 0x0f, 0x3c, 0xff, 0x3f, 0xff, 0x3f};
-#define clock_mask_width 15
-#define clock_mask_height 16
-#define clock_mask_x_hot 6
-#define clock_mask_y_hot 3
-static char clock_mask_bits[] = {
-0xfe, 0x1f, 0xf7, 0x39, 0xdb, 0x77, 0xed, 0x6d, 0xfd, 0x6f, 0xf9, 0x66, 0xf3, 0x73, 0xff, 0x3f, 0xeb, 0x35, 0xeb, 0x35, 0xeb, 0x35, 0xfb, 0x37, 0xeb, 0x75, 0xcf, 0x7c, 0xff, 0x7f, 0xff, 0x7f};
-#define coffee_mug_width 15
-#define coffee_mug_height 16
-#define coffee_mug_x_hot 7
-#define coffee_mug_y_hot 9
-static char coffee_mug_bits[] = {
-0xf8, 0x8f, 0x04, 0x10, 0x06, 0x60, 0x0a, 0x58, 0xf2, 0x47, 0x03, 0x40, 0x03, 0x40, 0x02, 0x40, 0x02, 0x40, 0x9a, 0x58, 0x56, 0x55, 0xd7, 0x55, 0x5b, 0x59, 0x02, 0x40, 0x02, 0x40, 0xfc, 0x3f};
-#define coffee_mug_mask_width 16
-#define coffee_mug_mask_height 16
-#define coffee_mug_mask_x_hot 7
-#define coffee_mug_mask_y_hot 9
-static char coffee_mug_mask_bits[] = {
-0xf8, 0x0f, 0xfc, 0x1f, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0x3f};
-#define cross_width 16
-#define cross_height 15
-#define cross_x_hot 7
-#define cross_y_hot 7
-static char cross_bits[] = {
-0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x7f, 0xff, 00, 00, 0x7f, 0xff, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01};
-#define cross_mask_width 16
-#define cross_mask_height 16
-#define cross_mask_x_hot 7
-#define cross_mask_y_hot 7
-static char cross_mask_bits[] = {
-0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03};
-#define cross_reverse_width 16
-#define cross_reverse_height 15
-#define cross_reverse_x_hot 7
-#define cross_reverse_y_hot 7
-static char cross_reverse_bits[] = {
-0x42, 0x21, 0x45, 0x51, 0x4a, 0x29, 0x54, 0x15, 0x68, 0x0b, 0x50, 0x05, 0xbf, 0xfe, 0x40, 0x01, 0xbf, 0xfe, 0x50, 0x05, 0x68, 0x0b, 0x54, 0x15, 0x4a, 0x29, 0x45, 0x51, 0x42, 0x21};
-#define cross_reverse_mask_width 16
-#define cross_reverse_mask_height 15
-#define cross_reverse_mask_x_hot 7
-#define cross_reverse_mask_y_hot 7
-static char cross_reverse_mask_bits[] = {
-0x66, 0x33, 0x6d, 0xdb, 0x7b, 0x6f, 0x76, 0x37, 0x6c, 0x1b, 0x5f, 0xfd, 0x3f, 0xfe, 0x80, 00, 0x3f, 0xfe, 0x5f, 0xfd, 0x6c, 0x1b, 0x76, 0x37, 0x7b, 0x6f, 0x6d, 0xdb, 0x66, 0x33};
-#define crosshair_width 16
-#define crosshair_height 15
-#define crosshair_x_hot 7
-#define crosshair_y_hot 7
-static char crosshair_bits[] = {
-0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x7f, 0xff, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00, 0x80, 00};
-#define crosshair_mask_width 16
-#define crosshair_mask_height 16
-#define crosshair_mask_x_hot 7
-#define crosshair_mask_y_hot 7
-static char crosshair_mask_bits[] = {
-0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
-#define diamond_cross_width 15
-#define diamond_cross_height 15
-#define diamond_cross_x_hot 7
-#define diamond_cross_y_hot 7
-static char diamond_cross_bits[] = {
-0x40, 0x81, 0x60, 0x03, 0x50, 0x05, 0x48, 0x09, 0x44, 0x11, 0x42, 0x21, 0x7f, 0x7f, 00, 00, 0x7f, 0x7f, 0x42, 0x21, 0x44, 0x11, 0x48, 0x09, 0x50, 0x05, 0x60, 0x03, 0x40, 0x01};
-#define diamond_cross_mask_width 16
-#define diamond_cross_mask_height 16
-#define diamond_cross_mask_x_hot 7
-#define diamond_cross_mask_y_hot 7
-static char diamond_cross_mask_bits[] = {
-0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xdc, 0x1d, 0xce, 0x39, 0xc7, 0x71, 0xff, 0xff, 0x7f, 0xff, 0xff, 0xff, 0xc7, 0x71, 0xce, 0x39, 0xdc, 0x1d, 0xf8, 0x0f, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01};
-#define dot_width 10
-#define dot_height 10
-#define dot_x_hot 5
-#define dot_y_hot 5
-static char dot_bits[] = {
-0x78, 0x90, 0xfe, 0x01, 0xfe, 0x01, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0xfe, 0x01, 0xfe, 0x01, 0x78, 00};
-#define dot_mask_width 12
-#define dot_mask_height 12
-#define dot_mask_x_hot 6
-#define dot_mask_y_hot 6
-static char dot_mask_bits[] = {
-0xf8, 0x21, 0xfe, 0x07, 0xfe, 0x07, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfe, 0x07, 0xfe, 0x07, 0xf8, 0x01};
-#define dotbox_width 12
-#define dotbox_height 12
-#define dotbox_x_hot 6
-#define dotbox_y_hot 5
-static char dotbox_bits[] = {
-0xff, 0x9f, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x61, 0x08, 0x61, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0x01, 0x08, 0xff, 0x0f};
-#define dotbox_mask_width 14
-#define dotbox_mask_height 14
-#define dotbox_mask_x_hot 7
-#define dotbox_mask_y_hot 6
-static char dotbox_mask_bits[] = {
-0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0x07, 0x38, 0x07, 0x38, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0xe7, 0x39, 0x07, 0x38, 0x07, 0x38, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f};
-#define double_arrow_width 10
-#define double_arrow_height 14
-#define double_arrow_x_hot 5
-#define double_arrow_y_hot 7
-static char double_arrow_bits[] = {
-0x30, 0x90, 0x78, 00, 0xfc, 00, 0xb6, 0x01, 0x33, 0x03, 0x30, 00, 0x30, 00, 0x30, 00, 0x30, 00, 0x33, 0x03, 0xb6, 0x01, 0xfc, 00, 0x78, 00, 0x30, 00};
-#define double_arrow_mask_width 12
-#define double_arrow_mask_height 16
-#define double_arrow_mask_x_hot 6
-#define double_arrow_mask_y_hot 8
-static char double_arrow_mask_bits[] = {
-0xf0, 0x20, 0xf8, 0x01, 0xfc, 0x03, 0xfe, 0x07, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xf0, 00, 0xf0, 00, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xfe, 0x07, 0xfc, 0x03, 0xf8, 0x01, 0xf0, 00};
-#define draft_large_width 15
-#define draft_large_height 15
-#define draft_large_x_hot 14
-#define draft_large_y_hot 0
-static char draft_large_bits[] = {
-00, 0xc0, 00, 0x30, 00, 0x3c, 00, 0x1f, 0xc0, 0x1f, 0xf0, 0x0f, 0xfc, 0x0f, 0x80, 0x07, 0x40, 0x07, 0x20, 0x03, 0x10, 0x03, 0x08, 0x01, 0x04, 0x01, 0x02, 00, 0x01, 00};
-#define draft_large_mask_width 15
-#define draft_large_mask_height 16
-#define draft_large_mask_x_hot 14
-#define draft_large_mask_y_hot 0
-static char draft_large_mask_bits[] = {
-00, 0x60, 00, 0x78, 00, 0x7e, 0x80, 0x3f, 0xe0, 0x1f, 0xf8, 0x1f, 0xfe, 0x0f, 0xfe, 0x0f, 0xe0, 0x07, 0xf0, 0x07, 0xb8, 0x03, 0x9c, 0x03, 0x8e, 0x01, 0x87, 0x01, 0x03, 00, 0x01, 00};
-#define draft_small_width 15
-#define draft_small_height 15
-#define draft_small_x_hot 14
-#define draft_small_y_hot 0
-static char draft_small_bits[] = {
-00, 0x40, 00, 0x30, 00, 0x3c, 00, 0x1f, 0xc0, 0x1f, 00, 0x0e, 00, 0x0d, 0x80, 0x04, 0x40, 0x04, 0x20, 00, 0x10, 00, 0x08, 00, 0x04, 00, 0x02, 00, 0x01, 00};
-#define draft_small_mask_width 15
-#define draft_small_mask_height 15
-#define draft_small_mask_x_hot 14
-#define draft_small_mask_y_hot 0
-static char draft_small_mask_bits[] = {
-00, 0x60, 00, 0x78, 00, 0x3e, 0x80, 0x3f, 0xe0, 0x1f, 0xe0, 0x1f, 0x80, 0x0f, 0xc0, 0x0f, 0xe0, 0x06, 0x70, 0x02, 0x38, 00, 0x1c, 00, 0x0e, 00, 0x07, 00, 0x03, 00};
-#define draped_box_width 12
-#define draped_box_height 12
-#define draped_box_x_hot 6
-#define draped_box_y_hot 5
-static char draped_box_bits[] = {
-0xff, 0x1f, 0x91, 0x08, 0x99, 0x09, 0x0d, 0x0b, 0x07, 0x0e, 0x61, 0x08, 0x61, 0x08, 0x07, 0x0e, 0x0d, 0x0b, 0x99, 0x09, 0x91, 0x08, 0xff, 0x0f};
-#define draped_box_mask_width 14
-#define draped_box_mask_height 14
-#define draped_box_mask_x_hot 7
-#define draped_box_mask_y_hot 6
-static char draped_box_mask_bits[] = {
-0xff, 0x3f, 0xff, 0x3f, 0xf3, 0x33, 0xfb, 0x37, 0x3f, 0x3f, 0xdf, 0x3e, 0xef, 0x3d, 0xef, 0x3d, 0xdf, 0x3e, 0x3f, 0x3f, 0xfb, 0x37, 0xf3, 0x33, 0xff, 0x3f, 0xff, 0x3f};
-#define exchange_width 14
-#define exchange_height 14
-#define exchange_x_hot 6
-#define exchange_y_hot 6
-static char exchange_bits[] = {
-0xf1, 0x03, 0xfb, 0x07, 0x1f, 0x0c, 0x09, 0x08, 0x19, 00, 0x3f, 00, 00, 00, 00, 00, 00, 0x3f, 00, 0x26, 0x04, 0x24, 0x0c, 0x3e, 0xf8, 0x37, 0xf0, 0x23};
-#define exchange_mask_width 16
-#define exchange_mask_height 16
-#define exchange_mask_x_hot 7
-#define exchange_mask_y_hot 7
-static char exchange_mask_bits[] = {
-0xe3, 0x07, 0xf7, 0x0f, 0xff, 0x1f, 0xff, 0x3f, 0x3f, 0x38, 0xff, 0x30, 0xff, 00, 0xff, 00, 00, 0xff, 00, 0xff, 0x0c, 0xfe, 0x1c, 0xfc, 0xfc, 0xff, 0xf8, 0xff, 0xf0, 0xef, 0xe0, 0xc7};
-#define fleur_width 14
-#define fleur_height 14
-#define fleur_x_hot 7
-#define fleur_y_hot 7
-static char fleur_bits[] = {
-0xc0, 00, 0xe0, 0x01, 0xf0, 0x03, 0xc0, 00, 0xc4, 0x08, 0xc6, 0x18, 0xff, 0x3f, 0xff, 0x3f, 0xc6, 0x18, 0xc4, 0x08, 0xc0, 00, 0xf0, 0x03, 0xe0, 0x01, 0xc0, 00};
-#define fleur_mask_width 16
-#define fleur_mask_height 16
-#define fleur_mask_x_hot 8
-#define fleur_mask_y_hot 8
-static char fleur_mask_bits[] = {
-0xc0, 0x03, 0xc0, 0x07, 0xe0, 0x07, 0xf0, 0x0f, 0xe8, 0x17, 0xdc, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0x3b, 0xe8, 0x17, 0xf0, 0x0f, 0xe0, 0x07, 0xc0, 0x03, 0xc0, 0x03};
-#define gobbler_width 16
-#define gobbler_height 15
-#define gobbler_x_hot 14
-#define gobbler_y_hot 2
-static char gobbler_bits[] = {
-00, 0x1e, 00, 0x0e, 0x01, 0xcc, 0xf9, 0x0d, 0xff, 0x0f, 0x7f, 0x0c, 0x3f, 0x0c, 0x06, 0x1c, 00, 0x0f, 0xf8, 0x07, 0x10, 00, 0x10, 00, 0x10, 00, 0x10, 00, 0x78, 00};
-#define gobbler_mask_width 16
-#define gobbler_mask_height 16
-#define gobbler_mask_x_hot 14
-#define gobbler_mask_y_hot 3
-static char gobbler_mask_bits[] = {
-00, 0x3f, 00, 0x3f, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xff, 0x3f, 0xfe, 0x1f, 0xf8, 0x0f, 0x38, 00, 0x38, 00, 0xfc, 00, 0xfc, 00};
-#define gumby_width 16
-#define gumby_height 16
-#define gumby_x_hot 2
-#define gumby_y_hot 0
-static char gumby_bits[] = {
-0xfc, 00, 0x08, 0x01, 0x13, 0x02, 0x57, 0x05, 0x13, 0x04, 0xd3, 0x05, 0x1f, 0x3c, 0x1c, 0xfc, 0x10, 0xe4, 0x10, 0xe4, 0x90, 0xf4, 0x90, 0xe4, 0x90, 0x04, 0x88, 0x08, 0x84, 0x10, 0x7c, 0x1f};
-#define gumby_mask_width 16
-#define gumby_mask_height 16
-#define gumby_mask_x_hot 2
-#define gumby_mask_y_hot 0
-static char gumby_mask_bits[] = {
-0xfc, 00, 0xfb, 0x01, 0xf7, 0x03, 0xff, 0x07, 0xf7, 0x07, 0xf7, 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xfc, 0xf7, 0xf0, 0xf7, 0xf0, 0xff, 0xf0, 0xf7, 0xf0, 0xe7, 0xf8, 0x0f, 0xfc, 0x1f, 0x7c, 0x1f};
-#define hand1_width 13
-#define hand1_height 16
-#define hand1_x_hot 12
-#define hand1_y_hot 0
-static char hand1_bits[] = {
-00, 0x18, 00, 0x1e, 0x80, 0x07, 0xc0, 0x03, 0xe0, 0x01, 0xf0, 0x03, 0xf8, 0x07, 0xfa, 0x03, 0xff, 0x07, 0xfd, 0x07, 0xf0, 0x03, 0xf0, 0x01, 0x29, 00, 0x23, 00, 0x16, 00, 0x0c, 00};
-#define hand1_mask_width 13
-#define hand1_mask_height 16
-#define hand1_mask_x_hot 12
-#define hand1_mask_y_hot 0
-static char hand1_mask_bits[] = {
-00, 0xdc, 00, 0x1f, 0xc0, 0x0f, 0xe0, 0x07, 0xf0, 0x03, 0xf8, 0x07, 0xfe, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x07, 0xff, 0x03, 0xff, 0x01, 0x7f, 00, 0x3f, 00, 0x1e, 00};
-#define hand2_width 15
-#define hand2_height 14
-#define hand2_x_hot 0
-#define hand2_y_hot 0
-static char hand2_bits[] = {
-0xfe, 0x01, 0x01, 0x02, 0x7e, 0x04, 0x08, 0x08, 0x70, 0x08, 0x08, 0x08, 0x70, 0x14, 0x08, 0x22, 0x30, 0x41, 0xc0, 0x20, 0x40, 0x12, 0x80, 0x08, 00, 0x05, 00, 0x02};
-#define hand2_mask_width 16
-#define hand2_mask_height 16
-#define hand2_mask_x_hot 0
-#define hand2_mask_y_hot 1
-static char hand2_mask_bits[] = {
-0xfe, 0x01, 0xff, 0x03, 0xff, 0x07, 0xff, 0x0f, 0xfe, 0x1f, 0xf8, 0x1f, 0xfc, 0x1f, 0xf8, 0x3f, 0xfc, 0x7f, 0xf8, 0xff, 0xf0, 0x7f, 0xe0, 0x3f, 0xc0, 0x1f, 0x80, 0x0f, 00, 0x07, 00, 0x02};
-#define heart_width 15
-#define heart_height 14
-#define heart_x_hot 6
-#define heart_y_hot 8
-static char heart_bits[] = {
-0x7c, 0x1f, 0xc6, 0x31, 0x83, 0x60, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x40, 0x03, 0x60, 0x06, 0x30, 0x0c, 0x18, 0x18, 0x0c, 0x30, 0x06, 0x60, 0x03, 0xc0, 0x01};
-#define heart_mask_width 15
-#define heart_mask_height 14
-#define heart_mask_x_hot 6
-#define heart_mask_y_hot 8
-static char heart_mask_bits[] = {
-0x7c, 0x9f, 0xfe, 0x3f, 0xc7, 0x71, 0x83, 0x60, 0x03, 0x60, 0x03, 0x60, 0x43, 0x61, 0x87, 0x70, 0x0e, 0x38, 0x1c, 0x1c, 0x38, 0x0e, 0xf0, 0x07, 0xe0, 0x03, 0xc0, 0x01};
-#define icon_width 16
-#define icon_height 16
-#define icon_x_hot 8
-#define icon_y_hot 8
-static char icon_bits[] = {
-0xff, 0xff, 0xab, 0xaa, 0x55, 0xd5, 0xab, 0xaa, 0x05, 0xd0, 0x0b, 0xa0, 0x05, 0xd0, 0x0b, 0xa0, 0x05, 0xd0, 0x0b, 0xa0, 0x05, 0xd0, 0x0b, 0xa0, 0x55, 0xd5, 0xab, 0xaa, 0x55, 0xd5, 0xff, 0xff};
-#define icon_mask_width 16
-#define icon_mask_height 16
-#define icon_mask_x_hot 8
-#define icon_mask_y_hot 8
-static char icon_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define iron_cross_width 14
-#define iron_cross_height 14
-#define iron_cross_x_hot 7
-#define iron_cross_y_hot 6
-static char iron_cross_bits[] = {
-0xfe, 0x1f, 0xfc, 0x0f, 0xf9, 0x27, 0xf3, 0x33, 0xe7, 0x39, 0xcf, 0x3c, 0xff, 0x3f, 0xff, 0x3f, 0xcf, 0x3c, 0xe7, 0x39, 0xf3, 0x33, 0xf9, 0x27, 0xfc, 0x0f, 0xfe, 0x1f};
-#define iron_cross_mask_width 16
-#define iron_cross_mask_height 16
-#define iron_cross_mask_x_hot 8
-#define iron_cross_mask_y_hot 7
-static char iron_cross_mask_bits[] = {
-0xfc, 0x3f, 0xfe, 0x7f, 0xfe, 0x7f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x7f, 0xfe, 0x7f, 0xfc, 0x3f};
-#define left_ptr_width 8
-#define left_ptr_height 14
-#define left_ptr_x_hot 0
-#define left_ptr_y_hot 0
-static char left_ptr_bits[] = {
-0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, 0x1f, 0x1b, 0x31, 0x30, 0x60, 0x60};
-#define left_ptr_mask_width 10
-#define left_ptr_mask_height 16
-#define left_ptr_mask_x_hot 1
-#define left_ptr_mask_y_hot 1
-static char left_ptr_mask_bits[] = {
-0x03, 0xc0, 0x07, 00, 0x0f, 00, 0x1f, 00, 0x3f, 00, 0x7f, 00, 0xff, 00, 0xff, 0x01, 0xff, 0x03, 0xff, 0x03, 0x7f, 00, 0xf7, 00, 0xf3, 00, 0xe0, 0x01, 0xe0, 0x01, 0xc0, 00};
-#define left_side_width 14
-#define left_side_height 13
-#define left_side_x_hot 0
-#define left_side_y_hot 6
-static char left_side_bits[] = {
-0x03, 00, 0x03, 00, 0x83, 00, 0x43, 00, 0x23, 00, 0x13, 00, 0xfb, 0x3f, 0x13, 00, 0x23, 00, 0x43, 00, 0x83, 00, 0x03, 00, 0x03, 00};
-#define left_side_mask_width 16
-#define left_side_mask_height 15
-#define left_side_mask_x_hot 1
-#define left_side_mask_y_hot 7
-static char left_side_mask_bits[] = {
-0x0f, 00, 0x0f, 00, 0x0f, 0x03, 0x8f, 0x03, 0xcf, 0x01, 0xef, 00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xef, 00, 0xcf, 0x01, 0x8f, 0x03, 0x0f, 0x03, 0x0f, 00, 0x0f, 00};
-#define left_tee_width 10
-#define left_tee_height 14
-#define left_tee_x_hot 0
-#define left_tee_y_hot 7
-static char left_tee_bits[] = {
-0x03, 0x10, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0xff, 0x03, 0xff, 0x03, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00};
-#define left_tee_mask_width 12
-#define left_tee_mask_height 16
-#define left_tee_mask_x_hot 1
-#define left_tee_mask_y_hot 8
-static char left_tee_mask_bits[] = {
-0x0f, 0xc0, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00};
-#define leftbutton_width 16
-#define leftbutton_height 16
-#define leftbutton_x_hot 8
-#define leftbutton_y_hot 8
-static char leftbutton_bits[] = {
-0x01, 0xc0, 0xfe, 0xbf, 0xfe, 0xbf, 0x22, 0xa2, 0xa2, 0xaa, 0xa2, 0xaa, 0xa2, 0xaa, 0xa2, 0xaa, 0x22, 0xa2, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0x01, 0xc0};
-#define leftbutton_mask_width 15
-#define leftbutton_mask_height 16
-#define leftbutton_mask_x_hot 8
-#define leftbutton_mask_y_hot 8
-static char leftbutton_mask_bits[] = {
-0xfe, 0xbf, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xfe, 0x3f};
-#define ll_angle_width 10
-#define ll_angle_height 10
-#define ll_angle_x_hot 0
-#define ll_angle_y_hot 9
-static char ll_angle_bits[] = {
-0x03, 0x10, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0xff, 0x03, 0xff, 0x03};
-#define ll_angle_mask_width 12
-#define ll_angle_mask_height 12
-#define ll_angle_mask_x_hot 1
-#define ll_angle_mask_y_hot 10
-static char ll_angle_mask_bits[] = {
-0x0f, 0xc0, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f};
-#define lr_angle_width 10
-#define lr_angle_height 10
-#define lr_angle_x_hot 9
-#define lr_angle_y_hot 9
-static char lr_angle_bits[] = {
-00, 0x13, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 0xff, 0x03, 0xff, 0x03};
-#define lr_angle_mask_width 12
-#define lr_angle_mask_height 12
-#define lr_angle_mask_x_hot 10
-#define lr_angle_mask_y_hot 10
-static char lr_angle_mask_bits[] = {
-00, 0xcf, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f};
-#define man_width 16
-#define man_height 16
-#define man_x_hot 14
-#define man_y_hot 5
-static char man_bits[] = {
-0xc0, 0x01, 0x78, 0x0f, 0x40, 0x01, 0x81, 00, 0xc2, 0xe1, 0x24, 0xd2, 0xb8, 0x0e, 0xa0, 0x02, 0x20, 0x02, 0x40, 0x01, 0x20, 0x02, 0x90, 0x04, 0x48, 0x09, 0x28, 0x0a, 0x1e, 0x3c, 0x1f, 0xfc};
-#define man_mask_width 16
-#define man_mask_height 16
-#define man_mask_x_hot 14
-#define man_mask_y_hot 5
-static char man_mask_bits[] = {
-0xf8, 0x07, 0xfc, 0x0f, 0xfc, 0x1f, 0xc3, 0x41, 0xe7, 0xe3, 0xfe, 0xff, 0xfc, 0xdf, 0xf8, 0x0f, 0xe0, 0x07, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xfc, 0x1f, 0x7e, 0x3f, 0x3f, 0xfe, 0x3f, 0xfe};
-#define middlebutton_width 16
-#define middlebutton_height 16
-#define middlebutton_x_hot 8
-#define middlebutton_y_hot 8
-static char middlebutton_bits[] = {
-0x01, 0xc0, 0xfe, 0xbf, 0xfe, 0xbf, 0x22, 0xa2, 0x2a, 0xaa, 0x2a, 0xaa, 0x2a, 0xaa, 0x2a, 0xaa, 0x22, 0xa2, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0x01, 0xc0};
-#define middlebutton_mask_width 15
-#define middlebutton_mask_height 16
-#define middlebutton_mask_x_hot 8
-#define middlebutton_mask_y_hot 8
-static char middlebutton_mask_bits[] = {
-0xfe, 0xbf, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xfe, 0x3f};
-#define mouse_width 15
-#define mouse_height 14
-#define mouse_x_hot 4
-#define mouse_y_hot 1
-static char mouse_bits[] = {
-0xe0, 00, 0x30, 00, 0x60, 00, 0xc0, 00, 0xfe, 0x1f, 0x01, 0x20, 0xcd, 0x6c, 0xcd, 0x6c, 0xcd, 0x6c, 0x01, 0x60, 0x01, 0x60, 0x06, 0x38, 0x18, 0x06, 0xe0, 0x01};
-#define mouse_mask_width 16
-#define mouse_mask_height 16
-#define mouse_mask_x_hot 4
-#define mouse_mask_y_hot 1
-static char mouse_mask_bits[] = {
-0xf0, 0x01, 0x78, 00, 0xf0, 00, 0xe0, 00, 0xfe, 0x1f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xef, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01};
-#define pencil_width 11
-#define pencil_height 16
-#define pencil_x_hot 10
-#define pencil_y_hot 15
-static char pencil_bits[] = {
-0x0e, 0x10, 0x11, 00, 0x31, 00, 0x52, 00, 0x5e, 00, 0x84, 00, 0x88, 00, 0x08, 0x01, 0x10, 0x01, 0x30, 0x02, 0x20, 0x02, 0x40, 0x04, 0x80, 0x07, 00, 0x07, 00, 0x06, 00, 0x04};
-#define pencil_mask_width 13
-#define pencil_mask_height 16
-#define pencil_mask_x_hot 11
-#define pencil_mask_y_hot 15
-static char pencil_mask_bits[] = {
-0x3f, 0xc0, 0x7f, 00, 0xff, 00, 0xfe, 00, 0xfc, 0x01, 0xfc, 0x01, 0xf8, 0x03, 0xf0, 0x03, 0xf0, 0x07, 0xe0, 0x07, 0xe0, 0x0f, 0xc0, 0x1f, 0x80, 0x1f, 00, 0x1f, 00, 0x1e, 00, 0x1c};
-#define pirate_width 15
-#define pirate_height 16
-#define pirate_x_hot 7
-#define pirate_y_hot 12
-static char pirate_bits[] = {
-0xe0, 0x01, 0xf0, 0x03, 0xf8, 0x07, 0xcc, 0x0c, 0xcc, 0x0c, 0xf8, 0x07, 0xf0, 0x03, 0xe0, 0x01, 0xe1, 0x21, 0xe1, 0x61, 0xc2, 0x10, 0x1c, 0x0e, 0xe0, 0x01, 0xf8, 0x47, 0x0f, 0x7c, 0x01, 0x20};
-#define pirate_mask_width 16
-#define pirate_mask_height 16
-#define pirate_mask_x_hot 7
-#define pirate_mask_y_hot 12
-static char pirate_mask_bits[] = {
-0xf0, 0x03, 0xf8, 0x07, 0xfc, 0x0f, 0xfe, 0x1f, 0xfe, 0x1f, 0xfc, 0x0f, 0xf8, 0x07, 0xf1, 0x83, 0xf1, 0xe3, 0xf3, 0xf3, 0xef, 0x39, 0x1e, 0x1e, 0xe0, 0x01, 0xfe, 0xc7, 0xff, 0xff, 0x0f, 0x7c};
-#define plus_width 10
-#define plus_height 10
-#define plus_x_hot 4
-#define plus_y_hot 5
-static char plus_bits[] = {
-0x30, 0x10, 0x30, 00, 0x30, 00, 0x30, 00, 0xff, 0x03, 0xff, 0x03, 0x30, 00, 0x30, 00, 0x30, 00, 0x30, 00};
-#define plus_mask_width 12
-#define plus_mask_height 12
-#define plus_mask_x_hot 5
-#define plus_mask_y_hot 6
-static char plus_mask_bits[] = {
-0xf0, 0xc0, 0xf0, 00, 0xf0, 00, 0xf0, 00, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xf0, 00, 0xf0, 00, 0xf0, 00, 0xf0, 00};
-#define question_arrow_width 9
-#define question_arrow_height 15
-#define question_arrow_x_hot 4
-#define question_arrow_y_hot 7
-static char question_arrow_bits[] = {
-0x7c, 0x10, 0xfe, 00, 0xc7, 0x01, 0x83, 0x01, 0x87, 0x01, 0xc6, 0x01, 0xe0, 00, 0x78, 00, 0x38, 00, 0x28, 00, 0x28, 00, 0xee, 00, 0x6c, 00, 0x38, 00, 0x10, 00};
-#define question_arrow_mask_width 11
-#define question_arrow_mask_height 16
-#define question_arrow_mask_x_hot 5
-#define question_arrow_mask_y_hot 8
-static char question_arrow_mask_bits[] = {
-0xf8, 0xc0, 0xfc, 0x01, 0xfe, 0x03, 0xff, 0x07, 0x8f, 0x07, 0x9f, 0x07, 0xde, 0x07, 0xfc, 0x03, 0xf8, 0x01, 0xf8, 00, 0xf8, 00, 0xfc, 0x01, 0xfe, 0x03, 0xfc, 0x01, 0xf8, 00, 0x70, 00};
-#define right_ptr_width 8
-#define right_ptr_height 14
-#define right_ptr_x_hot 7
-#define right_ptr_y_hot 0
-static char right_ptr_bits[] = {
-0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, 0xf8, 0xd8, 0x8c, 0x0c, 0x06, 0x06};
-#define right_ptr_mask_width 10
-#define right_ptr_mask_height 16
-#define right_ptr_mask_x_hot 8
-#define right_ptr_mask_y_hot 1
-static char right_ptr_mask_bits[] = {
-00, 0xc3, 0x80, 0x03, 0xc0, 0x03, 0xe0, 0x03, 0xf0, 0x03, 0xf8, 0x03, 0xfc, 0x03, 0xfe, 0x03, 0xff, 0x03, 0xff, 0x03, 0xf8, 0x03, 0xbc, 0x03, 0x3c, 0x03, 0x1e, 00, 0x1e, 00, 0x0c, 00};
-#define right_side_width 14
-#define right_side_height 13
-#define right_side_x_hot 13
-#define right_side_y_hot 6
-static char right_side_bits[] = {
-00, 0x30, 00, 0x30, 0x40, 0x30, 0x80, 0x30, 00, 0x31, 00, 0x32, 0xff, 0x37, 00, 0x32, 00, 0x31, 0x80, 0x30, 0x40, 0x30, 00, 0x30, 00, 0x30};
-#define right_side_mask_width 16
-#define right_side_mask_height 15
-#define right_side_mask_x_hot 14
-#define right_side_mask_y_hot 7
-static char right_side_mask_bits[] = {
-00, 0xf0, 00, 0xf0, 0xc0, 0xf0, 0xc0, 0xf1, 0x80, 0xf3, 00, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 00, 0xf7, 0x80, 0xf3, 0xc0, 0xf1, 0xc0, 0xf0, 00, 0xf0, 00, 0xf0};
-#define right_tee_width 10
-#define right_tee_height 14
-#define right_tee_x_hot 9
-#define right_tee_y_hot 7
-static char right_tee_bits[] = {
-00, 0x13, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 0xff, 0x03, 0xff, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03};
-#define right_tee_mask_width 12
-#define right_tee_mask_height 16
-#define right_tee_mask_x_hot 10
-#define right_tee_mask_y_hot 8
-static char right_tee_mask_bits[] = {
-00, 0xcf, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f};
-#define rightbutton_width 16
-#define rightbutton_height 16
-#define rightbutton_x_hot 8
-#define rightbutton_y_hot 8
-static char rightbutton_bits[] = {
-0x01, 0xc0, 0xfe, 0xbf, 0xfe, 0xbf, 0x22, 0xa2, 0xaa, 0xa2, 0xaa, 0xa2, 0xaa, 0xa2, 0xaa, 0xa2, 0x22, 0xa2, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0xfe, 0xbf, 0x01, 0xc0};
-#define rightbutton_mask_width 15
-#define rightbutton_mask_height 16
-#define rightbutton_mask_x_hot 8
-#define rightbutton_mask_y_hot 8
-static char rightbutton_mask_bits[] = {
-0xfe, 0xbf, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xfe, 0x3f};
-#define rtl_logo_width 14
-#define rtl_logo_height 14
-#define rtl_logo_x_hot 6
-#define rtl_logo_y_hot 6
-static char rtl_logo_bits[] = {
-0xff, 0x3f, 0x01, 0x22, 0x01, 0x22, 0x01, 0x22, 0xff, 0x23, 0x11, 0x22, 0x11, 0x22, 0x11, 0x22, 0x11, 0x22, 0xf1, 0x3f, 0x11, 0x20, 0x11, 0x20, 0x11, 0x20, 0xff, 0x3f};
-#define rtl_logo_mask_width 16
-#define rtl_logo_mask_height 16
-#define rtl_logo_mask_x_hot 7
-#define rtl_logo_mask_y_hot 7
-static char rtl_logo_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x07, 0xee, 0xff, 0xef, 0xff, 0xef, 0xff, 0xef, 0x77, 0xee, 0x77, 0xee, 0xf7, 0xff, 0xf7, 0xff, 0xf7, 0xff, 0x77, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff};
-#define sailboat_width 12
-#define sailboat_height 13
-#define sailboat_x_hot 6
-#define sailboat_y_hot -1
-static char sailboat_bits[] = {
-0x80, 0x10, 0x80, 00, 0xa0, 0x01, 0xa0, 0x01, 0xb0, 0x01, 0xb0, 0x03, 0xb8, 0x03, 0xb8, 0x03, 0xbc, 0x07, 0xbc, 0x07, 0xbe, 0x07, 0xbe, 0x0f, 0x1f, 0x07};
-#define sailboat_mask_width 16
-#define sailboat_mask_height 16
-#define sailboat_mask_x_hot 8
-#define sailboat_mask_y_hot 0
-static char sailboat_mask_bits[] = {
-00, 0x03, 00, 0x07, 0x80, 0x07, 0xc0, 0x0f, 0xc0, 0x0f, 0xe0, 0x0f, 0xe0, 0x1f, 0xf0, 0x1f, 0xf0, 0x1f, 0xf8, 0x3f, 0xf8, 0x3f, 0xfc, 0x3f, 0xfc, 0xff, 0xfe, 0xff, 0xff, 0x1f, 0xfe, 0x07};
-#define sb_down_arrow_width 7
-#define sb_down_arrow_height 15
-#define sb_down_arrow_x_hot 3
-#define sb_down_arrow_y_hot 15
-static char sb_down_arrow_bits[] = {
-0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x7f, 0x3e, 0x1c, 0x08};
-#define sb_down_arrow_mask_width 9
-#define sb_down_arrow_mask_height 16
-#define sb_down_arrow_mask_x_hot 4
-#define sb_down_arrow_mask_y_hot 15
-static char sb_down_arrow_mask_bits[] = {
-0x7c, 0xc0, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0xff, 0x01, 0xff, 0x01, 0xfe, 00, 0x7c, 00, 0x38, 00, 0x10, 00};
-#define sb_h_double_arrow_width 15
-#define sb_h_double_arrow_height 7
-#define sb_h_double_arrow_x_hot 7
-#define sb_h_double_arrow_y_hot 3
-static char sb_h_double_arrow_bits[] = {
-0x08, 0x08, 0x0c, 0x18, 0xfe, 0x3f, 0x0f, 0x78, 0xfe, 0x3f, 0x0c, 0x18, 0x08, 0x08};
-#define sb_h_double_arrow_mask_width 15
-#define sb_h_double_arrow_mask_height 9
-#define sb_h_double_arrow_mask_x_hot 7
-#define sb_h_double_arrow_mask_y_hot 4
-static char sb_h_double_arrow_mask_bits[] = {
-0x18, 0x8c, 0x1c, 0x1c, 0xfe, 0x3f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xfe, 0x3f, 0x1c, 0x1c, 0x18, 0x0c};
-#define sb_left_arrow_width 15
-#define sb_left_arrow_height 7
-#define sb_left_arrow_x_hot -1
-#define sb_left_arrow_y_hot 3
-static char sb_left_arrow_bits[] = {
-0x08, 00, 0x0c, 00, 0xfe, 0x7f, 0x0f, 00, 0xfe, 0x7f, 0x0c, 00, 0x08, 00};
-#define sb_left_arrow_mask_width 16
-#define sb_left_arrow_mask_height 9
-#define sb_left_arrow_mask_x_hot 0
-#define sb_left_arrow_mask_y_hot 4
-static char sb_left_arrow_mask_bits[] = {
-0x30, 00, 0x38, 00, 0xfc, 0xff, 0xfe, 0xff, 0xff, 0xff, 0xfe, 0xff, 0xfc, 0xff, 0x38, 00, 0x30, 00};
-#define sb_right_arrow_width 15
-#define sb_right_arrow_height 7
-#define sb_right_arrow_x_hot 15
-#define sb_right_arrow_y_hot 3
-static char sb_right_arrow_bits[] = {
-00, 0x08, 00, 0x18, 0xff, 0x3f, 00, 0x78, 0xff, 0x3f, 00, 0x18, 00, 0x08};
-#define sb_right_arrow_mask_width 16
-#define sb_right_arrow_mask_height 9
-#define sb_right_arrow_mask_x_hot 15
-#define sb_right_arrow_mask_y_hot 4
-static char sb_right_arrow_mask_bits[] = {
-00, 0x0c, 00, 0x1c, 0xff, 0x3f, 0xff, 0x7f, 0xff, 0xff, 0xff, 0x7f, 0xff, 0x3f, 00, 0x1c, 00, 0x0c};
-#define sb_up_arrow_width 7
-#define sb_up_arrow_height 15
-#define sb_up_arrow_x_hot 3
-#define sb_up_arrow_y_hot -1
-static char sb_up_arrow_bits[] = {
-0x08, 0x9c, 0x3e, 0x7f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14};
-#define sb_up_arrow_mask_width 9
-#define sb_up_arrow_mask_height 16
-#define sb_up_arrow_mask_x_hot 4
-#define sb_up_arrow_mask_y_hot 0
-static char sb_up_arrow_mask_bits[] = {
-0x10, 0xc0, 0x38, 00, 0x7c, 00, 0xfe, 00, 0xff, 0x01, 0xff, 0x01, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00};
-#define sb_v_double_arrow_width 7
-#define sb_v_double_arrow_height 15
-#define sb_v_double_arrow_x_hot 3
-#define sb_v_double_arrow_y_hot 7
-static char sb_v_double_arrow_bits[] = {
-0x08, 0x9c, 0x3e, 0x7f, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x14, 0x7f, 0x3e, 0x1c, 0x08};
-#define sb_v_double_arrow_mask_width 9
-#define sb_v_double_arrow_mask_height 15
-#define sb_v_double_arrow_mask_x_hot 4
-#define sb_v_double_arrow_mask_y_hot 7
-static char sb_v_double_arrow_mask_bits[] = {
-0x38, 0xc0, 0x7c, 00, 0xfe, 00, 0xff, 0x01, 0xff, 0x01, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0x7c, 00, 0xff, 0x01, 0xff, 0x01, 0xfe, 00, 0x7c, 00, 0x38, 00};
-#define shuttle_width 15
-#define shuttle_height 16
-#define shuttle_x_hot 10
-#define shuttle_y_hot 0
-static char shuttle_bits[] = {
-00, 0x84, 00, 0x0e, 00, 0x1f, 0x80, 0x7b, 0xa0, 0x7b, 0x90, 0x7b, 0x88, 0x7b, 0x88, 0x7b, 0x88, 0x7b, 0x88, 0x7b, 0x8c, 0x7b, 0x8e, 0x7b, 0xbf, 0x7b, 0x18, 0x11, 00, 0x1e, 00, 0x0c};
-#define shuttle_mask_width 16
-#define shuttle_mask_height 16
-#define shuttle_mask_x_hot 11
-#define shuttle_mask_y_hot 0
-static char shuttle_mask_bits[] = {
-00, 0x1c, 00, 0x3e, 00, 0x7f, 00, 0xff, 0x60, 0xff, 0x70, 0xff, 0x78, 0xff, 0x78, 0xff, 0x78, 0xff, 0x78, 0xff, 0x7c, 0xff, 0x7e, 0xff, 0x7f, 0xff, 0x7e, 0x7f, 0x30, 0x7e, 00, 0x3c};
-#define sizing_width 14
-#define sizing_height 14
-#define sizing_x_hot 7
-#define sizing_y_hot 7
-static char sizing_bits[] = {
-0xff, 0xc0, 0x01, 00, 0x01, 00, 0x01, 00, 0xf1, 0x03, 0x11, 0x02, 0x11, 0x22, 0x11, 0x22, 0x10, 0x22, 0xf0, 0x23, 00, 0x24, 00, 0x28, 00, 0x30, 0xc0, 0x3f};
-#define sizing_mask_width 16
-#define sizing_mask_height 16
-#define sizing_mask_x_hot 8
-#define sizing_mask_y_hot 8
-static char sizing_mask_bits[] = {
-0xff, 0x03, 0xff, 0x03, 0xff, 0x03, 0x07, 00, 0xf7, 0x0f, 0xf7, 0x0f, 0xf7, 0xef, 0x77, 0xee, 0x77, 0xee, 0xf7, 0xef, 0xf0, 0xef, 0xf0, 0xff, 00, 0xf8, 0xc0, 0xff, 0xc0, 0xff, 0xc0, 0xff};
-#define spider_width 16
-#define spider_height 16
-#define spider_x_hot 6
-#define spider_y_hot 7
-static char spider_bits[] = {
-0x04, 0x08, 0x08, 0x04, 0x08, 0x04, 0x10, 0x02, 0x10, 0x02, 0xe1, 0xe1, 0xe6, 0x19, 0xf8, 0x07, 0xf8, 0x07, 0xe6, 0x19, 0xe1, 0xe1, 0x10, 0x02, 0x10, 0x02, 0x08, 0x04, 0x08, 0x04, 0x04, 0x08};
-#define spider_mask_width 16
-#define spider_mask_height 16
-#define spider_mask_x_hot 6
-#define spider_mask_y_hot 7
-static char spider_mask_bits[] = {
-0x06, 0x18, 0x0c, 0x0c, 0x08, 0x04, 0x18, 0x06, 0xf1, 0x83, 0xf3, 0xf3, 0xf6, 0x3b, 0xfc, 0x0f, 0xfc, 0x07, 0xf6, 0x1f, 0xf3, 0xf3, 0xf1, 0x83, 0x18, 0x02, 0x18, 0x06, 0x0c, 0x0c, 0x06, 0x18};
-#define spraycan_width 11
-#define spraycan_height 16
-#define spraycan_x_hot 9
-#define spraycan_y_hot 2
-static char spraycan_bits[] = {
-00, 0xe6, 0x80, 00, 0x2c, 0x06, 0x9e, 00, 0x16, 0x06, 0x3f, 00, 0x21, 00, 0x27, 00, 0x25, 00, 0x27, 00, 0x25, 00, 0x27, 00, 0x27, 00, 0x21, 00, 0x21, 00, 0x3f, 00};
-#define spraycan_mask_width 12
-#define spraycan_mask_height 16
-#define spraycan_mask_x_hot 10
-#define spraycan_mask_y_hot 2
-static char spraycan_mask_bits[] = {
-00, 0x4c, 0x18, 0x0d, 0x7c, 0x0d, 0x7c, 0x0d, 0x7e, 0x0d, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00, 0xff, 00};
-#define star_width 15
-#define star_height 16
-#define star_x_hot 7
-#define star_y_hot 7
-static char star_bits[] = {
-0x80, 0x80, 0x40, 0x01, 0x40, 0x01, 0x40, 0x01, 0x20, 0x02, 0x20, 0x02, 0x20, 0x02, 0x9c, 0x1c, 0x03, 0x60, 0x1c, 0x1c, 0x90, 0x04, 0x48, 0x09, 0x24, 0x12, 0x14, 0x14, 0x0c, 0x18, 0x04, 0x10};
-#define star_mask_width 16
-#define star_mask_height 16
-#define star_mask_x_hot 7
-#define star_mask_y_hot 7
-static char star_mask_bits[] = {
-0x80, 00, 0xc0, 0x01, 0xc0, 0x01, 0x60, 0x03, 0x60, 0x03, 0x30, 0x06, 0x38, 0x1e, 0x9f, 0x7c, 0x03, 0xe0, 0x1f, 0x7c, 0x9c, 0x1c, 0xcc, 0x19, 0x66, 0x33, 0x36, 0x36, 0x1e, 0x3c, 0x0e, 0x38};
-#define target_width 15
-#define target_height 13
-#define target_x_hot 7
-#define target_y_hot 6
-static char target_bits[] = {
-0xc0, 0x81, 0xf0, 0x07, 0x38, 0x0e, 0x0c, 0x18, 0x06, 0x30, 0x83, 0x60, 0x43, 0x61, 0x83, 0x60, 0x06, 0x30, 0x0c, 0x18, 0x38, 0x0e, 0xf0, 0x07, 0xc0, 0x01};
-#define target_mask_width 16
-#define target_mask_height 14
-#define target_mask_x_hot 7
-#define target_mask_y_hot 7
-static char target_mask_bits[] = {
-0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0x3c, 0x1e, 0x0e, 0x38, 0x87, 0x70, 0xc3, 0xe1, 0x63, 0xe3, 0xc3, 0xe1, 0x87, 0x70, 0x0e, 0x38, 0x3c, 0x1e, 0xf8, 0x0f, 0xe0, 0x03};
-#define tcross_width 13
-#define tcross_height 13
-#define tcross_x_hot 6
-#define tcross_y_hot 6
-static char tcross_bits[] = {
-0x40, 0xe0, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0xff, 0x1f, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00};
-#define tcross_mask_width 15
-#define tcross_mask_height 15
-#define tcross_mask_x_hot 7
-#define tcross_mask_y_hot 7
-static char tcross_mask_bits[] = {
-0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
-#define top_left_arrow_width 14
-#define top_left_arrow_height 14
-#define top_left_arrow_x_hot 0
-#define top_left_arrow_y_hot 0
-static char top_left_arrow_bits[] = {
-0x03, 0xc0, 0x0f, 00, 0x3e, 00, 0xfe, 00, 0xfc, 0x03, 0xfc, 0x0f, 0xf8, 00, 0xf8, 00, 0x30, 0x01, 0x30, 0x02, 0x20, 0x04, 0x20, 0x08, 00, 0x10, 00, 0x20};
-#define top_left_arrow_mask_width 16
-#define top_left_arrow_mask_height 16
-#define top_left_arrow_mask_x_hot 1
-#define top_left_arrow_mask_y_hot 1
-static char top_left_arrow_mask_bits[] = {
-0x07, 00, 0x1f, 00, 0x7f, 00, 0xfe, 0x01, 0xfe, 0x07, 0xfc, 0x3f, 0xfc, 0x3f, 0xf8, 0x3f, 0xf8, 0x03, 0xf0, 0x07, 0xf0, 0x0e, 0xe0, 0x1c, 0xe0, 0x38, 0xe0, 0x70, 00, 0xe0, 00, 0xc0};
-#define top_left_corner_width 14
-#define top_left_corner_height 14
-#define top_left_corner_x_hot 0
-#define top_left_corner_y_hot 0
-static char top_left_corner_bits[] = {
-0xff, 0xff, 0xff, 0x3f, 0x03, 00, 0x03, 00, 0x03, 00, 0xe3, 0x0f, 0x63, 00, 0xa3, 00, 0x23, 0x01, 0x23, 0x02, 0x23, 0x04, 0x23, 0x08, 0x03, 00, 0x03, 00};
-#define top_left_corner_mask_width 16
-#define top_left_corner_mask_height 16
-#define top_left_corner_mask_x_hot 1
-#define top_left_corner_mask_y_hot 1
-static char top_left_corner_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 00, 0xef, 0x3f, 0xef, 0x3f, 0xef, 0x3f, 0xef, 0x03, 0xef, 0x07, 0xef, 0x0e, 0xef, 0x1c, 0xef, 0x38, 0xef, 0x30, 0x0f, 00, 0x0f, 00};
-#define top_right_corner_width 14
-#define top_right_corner_height 14
-#define top_right_corner_x_hot 13
-#define top_right_corner_y_hot 0
-static char top_right_corner_bits[] = {
-0xff, 0xff, 0xff, 0x3f, 00, 0x30, 00, 0x30, 00, 0x30, 0xfc, 0x31, 0x80, 0x31, 0x40, 0x31, 0x20, 0x31, 0x10, 0x31, 0x08, 0x31, 0x04, 0x31, 00, 0x30, 00, 0x30};
-#define top_right_corner_mask_width 16
-#define top_right_corner_mask_height 16
-#define top_right_corner_mask_x_hot 14
-#define top_right_corner_mask_y_hot 1
-static char top_right_corner_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 00, 0xf0, 0xfc, 0xf7, 0xfc, 0xf7, 0xfc, 0xf7, 0xc0, 0xf7, 0xe0, 0xf7, 0x70, 0xf7, 0x38, 0xf7, 0x1c, 0xf7, 0x0c, 0xf7, 00, 0xf0, 00, 0xf0};
-#define top_side_width 13
-#define top_side_height 14
-#define top_side_x_hot 6
-#define top_side_y_hot 0
-static char top_side_bits[] = {
-0xff, 0xff, 0xff, 0x1f, 00, 00, 0x40, 00, 0xe0, 00, 0x50, 0x01, 0x48, 0x02, 0x44, 0x04, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00};
-#define top_side_mask_width 15
-#define top_side_mask_height 16
-#define top_side_mask_x_hot 7
-#define top_side_mask_y_hot 1
-static char top_side_mask_bits[] = {
-0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xff, 0x7f, 0xc0, 0x01, 0xe0, 0x03, 0xf0, 0x07, 0xf8, 0x0f, 0xdc, 0x1d, 0xcc, 0x19, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01};
-#define top_tee_width 14
-#define top_tee_height 10
-#define top_tee_x_hot 7
-#define top_tee_y_hot 0
-static char top_tee_bits[] = {
-0xff, 0xff, 0xff, 0x3f, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00, 0xc0, 00};
-#define top_tee_mask_width 16
-#define top_tee_mask_height 12
-#define top_tee_mask_x_hot 8
-#define top_tee_mask_y_hot 1
-static char top_tee_mask_bits[] = {
-0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03, 0xc0, 0x03};
-#define trek_width 7
-#define trek_height 16
-#define trek_x_hot 3
-#define trek_y_hot 0
-static char trek_bits[] = {
-0x88, 0x80, 0x1c, 0x3e, 0x7f, 0x77, 0x7f, 0x3e, 0x1c, 0x08, 0x5d, 0x6b, 0x49, 0x41, 0x41, 0x41};
-#define trek_mask_width 9
-#define trek_mask_height 16
-#define trek_mask_x_hot 4
-#define trek_mask_y_hot 0
-static char trek_mask_bits[] = {
-0x38, 0x40, 0x38, 00, 0x7c, 00, 0xfe, 00, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xfe, 00, 0x7c, 00, 0xba, 00, 0xff, 0x01, 0xff, 0x01, 0xff, 0x01, 0xd7, 0x01, 0xd7, 0x01, 0xc7, 0x01};
-#define ul_angle_width 10
-#define ul_angle_height 10
-#define ul_angle_x_hot 0
-#define ul_angle_y_hot 0
-static char ul_angle_bits[] = {
-0xff, 0xe3, 0xff, 0x03, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00};
-#define ul_angle_mask_width 12
-#define ul_angle_mask_height 12
-#define ul_angle_mask_x_hot 1
-#define ul_angle_mask_y_hot 1
-static char ul_angle_mask_bits[] = {
-0xff, 0x4f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00};
-#define umbrella_width 14
-#define umbrella_height 14
-#define umbrella_x_hot 7
-#define umbrella_y_hot 2
-static char umbrella_bits[] = {
-0x88, 0xc4, 0x20, 0x0a, 0xc9, 0x32, 0xf2, 0x09, 0x4c, 0x06, 0x43, 0x18, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 00, 0x40, 0x01, 0x40, 0x01, 0x80, 00};
-#define umbrella_mask_width 16
-#define umbrella_mask_height 16
-#define umbrella_mask_x_hot 8
-#define umbrella_mask_y_hot 2
-static char umbrella_mask_bits[] = {
-0xe8, 0x76, 0xfb, 0xdf, 0xfd, 0x3f, 0xfe, 0xff, 0xff, 0x3f, 0xff, 0xff, 0xcf, 0x79, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x01, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0xc0, 0x07, 0x80, 0x03};
-#define ur_angle_width 10
-#define ur_angle_height 10
-#define ur_angle_x_hot 9
-#define ur_angle_y_hot 0
-static char ur_angle_bits[] = {
-0xff, 0xe3, 0xff, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03, 00, 0x03};
-#define ur_angle_mask_width 12
-#define ur_angle_mask_height 12
-#define ur_angle_mask_x_hot 10
-#define ur_angle_mask_y_hot 1
-static char ur_angle_mask_bits[] = {
-0xff, 0x4f, 0xff, 0x0f, 0xff, 0x0f, 0xff, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f, 00, 0x0f};
-#define watch_width 16
-#define watch_height 16
-#define watch_x_hot 15
-#define watch_y_hot 9
-static char watch_bits[] = {
-0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07, 0xfc, 0x0f, 0x86, 0x18, 0x83, 0x30, 0x81, 0xe0, 0xc1, 0xe1, 0xc1, 0xe1, 0x21, 0xe0, 0x13, 0x30, 0x06, 0x18, 0xfc, 0x0f, 0xf8, 0x07, 0xf8, 0x07, 0xf8, 0x07};
-#define watch_mask_width 16
-#define watch_mask_height 16
-#define watch_mask_x_hot 15
-#define watch_mask_y_hot 9
-static char watch_mask_bits[] = {
-0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfe, 0x1f, 0xff, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xfe, 0x1f, 0xfc, 0x0f, 0xfc, 0x0f, 0xfc, 0x0f};
-#define xterm_width 7
-#define xterm_height 14
-#define xterm_x_hot 3
-#define xterm_y_hot 7
-static char xterm_bits[] = {
-0xf7, 0x9c, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x08, 0x1c, 0x77};
-#define xterm_mask_width 9
-#define xterm_mask_height 16
-#define xterm_mask_x_hot 4
-#define xterm_mask_y_hot 8
-static char xterm_mask_bits[] = {
-0xef, 0x41, 0xff, 0x01, 0xff, 0x01, 0x7c, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x38, 00, 0x7c, 00, 0xff, 0x01, 0xff, 0x01, 0xef, 0x01};
index 9c11680dd4b6ab4bc3e062fb0b11b98deae86e36..35ddd2db9cdc3af1ec67aa2591fa271adadfb9a1 100644 (file)
@@ -847,19 +847,16 @@ gtkunixprintincludedir = $(includedir)/gtk-unix-print-2.0/gtk
 gtkunixprintinclude_HEADERS = $(gtk_unix_print_public_h_sources)
 
 libgtk_x11_2_0_la_SOURCES = $(gtk_c_sources)
-libgtk_linux_fb_2_0_la_SOURCES = $(gtk_c_sources)
 libgtk_win32_2_0_la_SOURCES = $(gtk_c_sources)
 libgtk_quartz_2_0_la_SOURCES = $(gtk_c_sources)
 libgtk_directfb_2_0_la_SOURCES = $(gtk_c_sources)
 
 libgtk_x11_2_0_la_LDFLAGS = $(libtool_opts)
-libgtk_linux_fb_2_0_la_LDFLAGS = $(libtool_opts)
 libgtk_win32_2_0_la_LDFLAGS = $(libtool_opts) -Wl,-luuid
 libgtk_quartz_2_0_la_LDFLAGS = $(libtool_opts)
 libgtk_directfb_2_0_la_LDFLAGS = $(libtool_opts)
 
 libgtk_x11_2_0_la_LIBADD = $(libadd)
-libgtk_linux_fb_2_0_la_LIBADD = $(libadd)
 libgtk_win32_2_0_la_LIBADD = $(libadd) -lole32 -lgdi32 -lcomdlg32 -lwinspool -lcomctl32
 libgtk_win32_2_0_la_DEPENDENCIES = $(gtk_def) $(gtk_win32_res)
 libgtk_quartz_2_0_la_LIBADD = $(libadd)
@@ -868,7 +865,7 @@ libgtk_directfb_2_0_la_LIBADD = $(libadd)
 if USE_WIN32
 libgtk_target_ldflags = $(gtk_win32_res_ldflag) $(gtk_win32_symbols)
 endif
-EXTRA_LTLIBRARIES = libgtk-x11-2.0.la libgtk-linux-fb-2.0.la libgtk-win32-2.0.la libgtk-quartz-2.0.la libgtk-directfb-2.0.la
+EXTRA_LTLIBRARIES = libgtk-x11-2.0.la libgtk-win32-2.0.la libgtk-quartz-2.0.la libgtk-directfb-2.0.la
 
 install-exec-hook: 
 if DISABLE_EXPLICIT_DEPS
index 20750b8a501ed1674ad14ccaa5c2244e836af2c3..e6bfa06a78ea27e63679033062791de9fe6064ae 100644 (file)
 #include "gtkwindow.h"
 #include "gtkmain.h"
 #include "gtkwindow-decorate.h"
+#include "gtkintl.h"
 #include "gtkalias.h"
 
 
-#ifdef GDK_WINDOWING_FB
-#define DECORATE_WINDOWS
-#endif
-
 #ifdef DECORATE_WINDOWS
-#include "linux-fb/gdkfb.h"
 
 typedef enum
 {
@@ -283,7 +279,11 @@ gtk_decorated_window_realize (GtkWindow   *window)
   font_desc = pango_font_description_from_string(DECORATION_TITLE_FONT);
   pango_layout_set_font_description (deco->title_layout, font_desc);
   pango_font_description_free (font_desc);
-  
+
+#if 0
+  /* What is this code exactly doing? I remember we were using the
+     decorated windows with the DirectFB port and it did just work,
+     and there was definitely no code in linux-fb involved. */
   gdk_fb_window_set_child_handler (window->frame,
                                   gtk_decorated_window_inner_change,
                                   gtk_decorated_window_inner_get_pos,
@@ -292,6 +292,7 @@ gtk_decorated_window_realize (GtkWindow   *window)
   /* This is a huge hack to make frames have the same shape as
      the window they wrap */
   gdk_window_shape_combine_mask (window->frame, GDK_FB_USE_CHILD_SHAPE, 0, 0);
+#endif
 }