summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrhp <rhp>2001-05-31 16:18:40 +0000
committerrhp <rhp>2001-05-31 16:18:40 +0000
commit85bd843b011bffc151cdb03134f9afcc01edffa7 (patch)
tree7ce17cf85462db7131e230000ee239f6834d45ce
parentebb2b489b00a81c78f2078c706683cdcd732808a (diff)
downloadmetacity-85bd843b011bffc151cdb03134f9afcc01edffa7.tar.gz
...
-rw-r--r--src/theme.c97
-rw-r--r--src/theme.h117
2 files changed, 214 insertions, 0 deletions
diff --git a/src/theme.c b/src/theme.c
new file mode 100644
index 00000000..a5e2d43c
--- /dev/null
+++ b/src/theme.c
@@ -0,0 +1,97 @@
+/* Metacity Default Theme Engine */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#include "theme.h"
+#include <pango.h>
+#include <pangox.h>
+
+typedef struct _DefaultFrameData DefaultFrameData;
+
+struct _DefaultFrameData
+{
+ PangoLayout *layout;
+
+
+};
+
+static gpointer
+default_acquire_frame (MetaFrameInfo *info)
+{
+ DefaultFrameData *d;
+
+ d = g_new (DefaultFrameData, 1);
+
+ d->layout = NULL;
+
+ return d;
+}
+
+void
+default_release_frame (MetaFrameInfo *info,
+ gpointer frame_data)
+{
+ DefaultFrameData *d;
+
+ d = frame_data;
+
+ if (d->layout)
+ g_object_unref (G_OBJECT (d->layout));
+
+ g_free (d);
+}
+
+void
+default_fill_frame_geometry (MetaFrameInfo *info,
+ gpointer frame_data)
+{
+
+
+}
+
+void
+default_expose_frame (MetaFrameInfo *info,
+ int x, int y,
+ int width, int height,
+ gpointer frame_data)
+{
+
+
+}
+
+MetaFrameControl
+default_get_control (MetaFrameInfo *info,
+ int x, int y,
+ gpointer frame_data)
+{
+
+
+}
+
+MetaThemeEngine meta_default_engine = {
+ NULL,
+ default_acquire_frame,
+ default_release_frame,
+ default_fill_frame_geometry,
+ default_expose_frame,
+ default_get_control
+};
+
+#endif
diff --git a/src/theme.h b/src/theme.h
new file mode 100644
index 00000000..4aa25396
--- /dev/null
+++ b/src/theme.h
@@ -0,0 +1,117 @@
+/* Metacity Theme Engine Header */
+
+/*
+ * Copyright (C) 2001 Havoc Pennington
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+ * 02111-1307, USA.
+ */
+
+#ifndef META_THEME_H
+#define META_THEME_H
+
+#include <Xlib.h>
+
+typedef struct _MetaFrameInfo MetaFrameInfo;
+typedef struct _MetaThemeEngine MetaThemeEngine;
+
+typedef enum
+{
+ META_FRAME_ALLOWS_DELETE = 1 << 0,
+ META_FRAME_ALLOWS_MENU = 1 << 1,
+ META_FRAME_ALLOWS_ICONIFY = 1 << 2,
+ META_FRAME_ALLOWS_MAXIMIZE = 1 << 3,
+ META_FRAME_ALLOWS_RESIZE = 1 << 4,
+ META_FRAME_TRANSIENT = 1 << 5
+} MetaFrameFlags;
+
+typedef enum
+{
+ META_FRAME_CONTROL_DELETE,
+ META_FRAME_CONTROL_MENU,
+ META_FRAME_CONTROL_ICONIFY,
+ META_FRAME_CONTROL_MAXIMIZE,
+ META_FRAME_CONTROL_RESIZE_SE,
+ META_FRAME_CONTROL_RESIZE_S,
+ META_FRAME_CONTROL_RESIZE_SW,
+ META_FRAME_CONTROL_RESIZE_N,
+ META_FRAME_CONTROL_RESIZE_NE,
+ META_FRAME_CONTROL_RESIZE_NW,
+ META_FRAME_CONTROL_RESIZE_W,
+ META_FRAME_CONTROL_RESIZE_E
+} MetaFrameControl;
+
+struct _MetaFrameInfo
+{
+ /* These are read-only to engines */
+ MetaFrameFlags flags;
+ Window xwindow; /* == None in fill_frame_geometry */
+ Display *display;
+ Visual *visual;
+ int depth;
+ Colormap cmap;
+
+ char *title;
+
+ /* total frame size normally, but equal to child size in
+ * fill_frame_geometry
+ */
+ int width;
+ int height;
+
+ /* Below here the engine can change things
+ * in fill_frame_geometry, though defaults are already
+ * filled in.
+ */
+
+ /* border sizes (space between frame and child) */
+ int left_width;
+ int right_width;
+ int top_height;
+ int bottom_height;
+
+ /* background color */
+ unsigned long background_pixel;
+
+ Pixmap shape_mask;
+ /* FIXME shape region */
+};
+
+struct _MetaThemeEngine
+{
+ void (* unload_engine) (void);
+
+ /* returns frame_data to use */
+ gpointer (* acquire_frame) (MetaFrameInfo *info);
+ /* should free frame_data */
+ void (* release_frame) (MetaFrameInfo *info,
+ gpointer frame_data);
+
+ void (* fill_frame_geometry) (MetaFrameInfo *info,
+ gpointer frame_data);
+
+ void (* expose_frame) (MetaFrameInfo *info,
+ int x, int y,
+ int width, int height,
+ gpointer frame_data);
+
+ MetaFrameControl (* get_control) (MetaFrameInfo *info,
+ int x, int y,
+ gpointer frame_data);
+};
+
+extern MetaThemeEngine meta_default_engine;
+
+#endif