Merge branch 'wip/alttab'
[mikachu/openbox.git] / render / render.h
index 8a1eda1..260ebeb 100644 (file)
@@ -1,11 +1,35 @@
+/* -*- indent-tabs-mode: nil; tab-width: 4; c-basic-offset: 4; -*-
+
+   render.h for the Openbox window manager
+   Copyright (c) 2006        Mikael Magnusson
+   Copyright (c) 2003-2007   Dana Jansens
+   Copyright (c) 2003        Derek Foreman
+
+   This program is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; either version 2 of the License, or
+   (at your option) any later version.
+
+   This program 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 General Public License for more details.
+
+   See the COPYING file for a copy of the GNU General Public License.
+*/
+
 #ifndef __render_h
 #define __render_h
 
-#define _XFT_NO_COMPAT_ /* no Xft 1 API */
-#include <X11/Xft/Xft.h>
-#include <X11/Xlib.h>
+#include "geom.h"
+#include "render/version.h"
+
+#include <X11/Xlib.h> /* some platforms dont include this as needed for Xft */
+#include <pango/pangoxft.h>
 #include <glib.h>
 
+G_BEGIN_DECLS
+
 typedef union  _RrTextureData      RrTextureData;
 typedef struct _RrAppearance       RrAppearance;
 typedef struct _RrSurface          RrSurface;
@@ -14,12 +38,14 @@ typedef struct _RrTexture          RrTexture;
 typedef struct _RrTextureMask      RrTextureMask;
 typedef struct _RrTextureRGBA      RrTextureRGBA;
 typedef struct _RrTextureText      RrTextureText;
+typedef struct _RrTextureLineArt   RrTextureLineArt;
 typedef struct _RrPixmapMask       RrPixmapMask;
 typedef struct _RrInstance         RrInstance;
 typedef struct _RrColor            RrColor;
 
 typedef guint32 RrPixel32;
 typedef guint16 RrPixel16;
+typedef guchar  RrPixel8;
 
 typedef enum {
     RR_RELIEF_FLAT,
@@ -36,17 +62,20 @@ typedef enum {
     RR_SURFACE_NONE,
     RR_SURFACE_PARENTREL,
     RR_SURFACE_SOLID,
+    RR_SURFACE_SPLIT_VERTICAL,
     RR_SURFACE_HORIZONTAL,
     RR_SURFACE_VERTICAL,
     RR_SURFACE_DIAGONAL,
     RR_SURFACE_CROSS_DIAGONAL,
-    RR_SURFACE_PYRAMID
+    RR_SURFACE_PYRAMID,
+    RR_SURFACE_MIRROR_HORIZONTAL
 } RrSurfaceColorType;
 
 typedef enum {
     RR_TEXTURE_NONE,
     RR_TEXTURE_MASK,
     RR_TEXTURE_TEXT,
+    RR_TEXTURE_LINE_ART,
     RR_TEXTURE_RGBA
 } RrTextureType;
 
@@ -56,6 +85,28 @@ typedef enum {
     RR_JUSTIFY_RIGHT
 } RrJustify;
 
+/* Put middle first so it's the default */
+typedef enum {
+    RR_ELLIPSIZE_MIDDLE,
+    RR_ELLIPSIZE_NONE,
+    RR_ELLIPSIZE_START,
+    RR_ELLIPSIZE_END
+} RrEllipsizeMode;
+
+typedef enum {
+    RR_FONTWEIGHT_LIGHT,
+    RR_FONTWEIGHT_NORMAL,
+    RR_FONTWEIGHT_SEMIBOLD,
+    RR_FONTWEIGHT_BOLD,
+    RR_FONTWEIGHT_ULTRABOLD
+} RrFontWeight;
+
+typedef enum {
+    RR_FONTSLANT_NORMAL,
+    RR_FONTSLANT_ITALIC,
+    RR_FONTSLANT_OBLIQUE
+} RrFontSlant;
+
 struct _RrSurface {
     RrSurfaceColorType grad;
     RrReliefType relief;
@@ -63,21 +114,35 @@ struct _RrSurface {
     RrColor *primary;
     RrColor *secondary;
     RrColor *border_color;
-    RrColor *bevel_dark; 
+    RrColor *bevel_dark;
     RrColor *bevel_light;
+    RrColor *interlace_color;
     gboolean interlaced;
     gboolean border;
     RrAppearance *parent;
     gint parentx;
     gint parenty;
-    RrPixel32 *RrPixel_data;
+    RrPixel32 *pixel_data;
+    gint bevel_dark_adjust;  /* 0-255, default is 64 */
+    gint bevel_light_adjust; /* 0-255, default is 128 */
+    RrColor *split_primary;
+    RrColor *split_secondary;
 };
 
 struct _RrTextureText {
     RrFont *font;
     RrJustify justify;
     RrColor *color;
-    gchar *string;
+    const gchar *string;
+    gint shadow_offset_x;
+    gint shadow_offset_y;
+    RrColor *shadow_color;
+    guchar shadow_alpha;
+    gboolean shortcut; /*!< Underline a character */
+    guint shortcut_pos; /*!< Position in bytes of the character to underline */
+    RrEllipsizeMode ellipsize;
+    gboolean flow; /* allow multiple lines.  must set maxwidth below */
+    gint maxwidth;
 };
 
 struct _RrPixmapMask {
@@ -96,17 +161,32 @@ struct _RrTextureMask {
 struct _RrTextureRGBA {
     gint width;
     gint height;
+    gint alpha;
     RrPixel32 *data;
 /* cached scaled so we don't have to scale often */
     gint cwidth;
     gint cheight;
     RrPixel32 *cache;
+/* size and position to draw at */
+    gint tx;
+    gint ty;
+    gint twidth;
+    gint theight;
+};
+
+struct _RrTextureLineArt {
+    RrColor *color;
+    gint x1;
+    gint y1;
+    gint x2;
+    gint y2;
 };
 
 union _RrTextureData {
     RrTextureRGBA rgba;
     RrTextureText text;
     RrTextureMask mask;
+    RrTextureLineArt lineart;
 };
 
 struct _RrTexture {
@@ -127,19 +207,17 @@ struct _RrAppearance {
     gint w, h;
 };
 
-#if (G_BYTE_ORDER == G_BIG_ENDIAN)
-#define RrDefaultAlphaOffset 0
-#define RrDefaultRedOffset 8
-#define RrDefaultGreenOffset 16
-#define RrDefaultBlueOffset 24
-#define RrEndian MSBFirst  
-#else
+/* these are the same on all endian machines because it seems to be dependant
+   on the endianness of the gfx card, not the cpu. */
 #define RrDefaultAlphaOffset 24
 #define RrDefaultRedOffset 16
 #define RrDefaultGreenOffset 8
 #define RrDefaultBlueOffset 0
-#define RrEndian LSBFirst
-#endif /* G_BYTE_ORDER == G_BIG_ENDIAN */
+
+#define RrDefaultFontFamily       "arial,sans"
+#define RrDefaultFontSize         8
+#define RrDefaultFontWeight       RR_FONTWEIGHT_NORMAL
+#define RrDefaultFontSlant        RR_FONTSLANT_NORMAL
 
 RrInstance* RrInstanceNew (Display *display, gint screen);
 void        RrInstanceFree (RrInstance *inst);
@@ -159,8 +237,6 @@ gint     RrBlueShift    (const RrInstance *inst);
 gint     RrRedMask      (const RrInstance *inst);
 gint     RrGreenMask    (const RrInstance *inst);
 gint     RrBlueMask     (const RrInstance *inst);
-guint    RrPseudoBPC    (const RrInstance *inst);
-XColor*  RrPseudoColors (const RrInstance *inst);
 
 RrColor *RrColorNew   (const RrInstance *inst, gint r, gint g, gint b);
 RrColor *RrColorParse (const RrInstance *inst, gchar *colorname);
@@ -170,20 +246,40 @@ gint     RrColorRed   (const RrColor *c);
 gint     RrColorGreen (const RrColor *c);
 gint     RrColorBlue  (const RrColor *c);
 gulong   RrColorPixel (const RrColor *c);
+GC       RrColorGC    (RrColor *c);
 
 RrAppearance *RrAppearanceNew  (const RrInstance *inst, gint numtex);
 RrAppearance *RrAppearanceCopy (RrAppearance *a);
 void          RrAppearanceFree (RrAppearance *a);
+void          RrAppearanceRemoveTextures(RrAppearance *a);
+void          RrAppearanceAddTextures(RrAppearance *a, gint numtex);
 
-int RrFontMeasureString (const RrFont *f, const gchar *str);
-int RrFontHeight        (const RrFont *f);
-int RrFontMaxCharWidth  (const RrFont *f);
+RrFont *RrFontOpen          (const RrInstance *inst, const gchar *name,
+                             gint size, RrFontWeight weight, RrFontSlant slant);
+RrFont *RrFontOpenDefault   (const RrInstance *inst);
+void    RrFontClose         (RrFont *f);
+RrSize *RrFontMeasureString (const RrFont *f, const gchar *str,
+                             gint shadow_offset_x, gint shadow_offset_y,
+                             gboolean flow, gint maxwidth);
+gint    RrFontHeight        (const RrFont *f, gint shadow_offset_y);
+gint    RrFontMaxCharWidth  (const RrFont *f);
 
-void RrPaint   (RrAppearance *l, Window win, gint w, gint h);
-void RrMinsize (RrAppearance *l, gint *w, gint *h);
+/* Paint into the appearance. The old pixmap is returned (if there was one). It
+   is the responsibility of the caller to call XFreePixmap on the return when
+   it is non-null. */
+Pixmap RrPaintPixmap (RrAppearance *a, gint w, gint h);
+void   RrPaint       (RrAppearance *a, Window win, gint w, gint h);
+void   RrMinSize     (RrAppearance *a, gint *w, gint *h);
+gint   RrMinWidth    (RrAppearance *a);
+/* For text textures, if flow is TRUE, then the string must be set before
+   calling this, otherwise it doesn't need to be */
+gint   RrMinHeight   (RrAppearance *a);
+void   RrMargins     (RrAppearance *a, gint *l, gint *t, gint *r, gint *b);
 
 gboolean RrPixmapToRGBA(const RrInstance *inst,
                         Pixmap pmap, Pixmap mask,
                         gint *w, gint *h, RrPixel32 **data);
 
+G_END_DECLS
+
 #endif /*__render_h*/