ui/ui/toolkit.h

changeset 0
1f419bd32da1
child 1
eb5269000bc8
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ui/ui/toolkit.h	Sat Dec 07 12:14:59 2013 +0100
@@ -0,0 +1,120 @@
+/*
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
+ *
+ * Copyright 2014 Olaf Wintermann. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ *   1. Redistributions of source code must retain the above copyright
+ *      notice, this list of conditions and the following disclaimer.
+ *
+ *   2. Redistributions in binary form must reproduce the above copyright
+ *      notice, this list of conditions and the following disclaimer in the
+ *      documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef UI_TOOLKIT_H
+#define	UI_TOOLKIT_H
+
+#ifdef UI_COCOA
+
+#ifdef __OBJC__
+#import <Cocoa/Cocoa.h>
+#define UIWIDGET NSView*
+#else
+typedef void* UIWIDGET;
+#endif
+
+#elif UI_GTK2 || UI_GTK3
+
+#include <gtk/gtk.h>
+#define UIWIDGET GtkWidget*
+
+#elif UI_MOTIF
+
+#include <Xm/XmAll.h> 
+#define UIWIDGET Widget
+
+#endif
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* public types */
+typedef struct UiObject UiObject;
+typedef struct UiEvent UiEvent;
+
+typedef struct UiInteger UiInteger;
+typedef struct UiString  UiString;
+
+/* private types */
+typedef struct UiContext UiContext;
+
+#define ui_getval(val) (val).get(&(val))
+#define ui_setval(val, v) (val).set(&(val), v)
+    
+typedef void(*ui_callback)(UiEvent*, void*); // event, user data
+
+struct UiObject {
+    UIWIDGET  widget;
+    UiContext *ctx;
+    void      *window;
+    void      *document;
+};
+
+struct UiEvent {
+    UiObject *obj;
+    void     *document;
+    void     *window;
+    int      intval;
+};
+
+struct UiInteger {
+    int  (*get)(UiInteger*);
+    void (*set)(UiInteger*, int);
+    int  value;
+    void *obj;
+};
+
+struct UiString {
+    char* (*get)(UiString*);
+    void  (*set)(UiString*, char*);
+    char* value;
+    void  *obj;
+};
+
+void ui_init(char *appname, int argc, char **argv);
+void ui_exitfunc(ui_callback f, void *udata);
+
+char* ui_getappdir();
+char* ui_configfile(char *name);
+
+void ui_main();
+void ui_show(UiObject *obj);
+
+void* ui_document_create(UiObject *obj, size_t size);
+void* ui_document_malloc(void *doc, size_t size);
+void* ui_document_calloc(void *doc, size_t nelem, size_t elsize);
+void  ui_document_free(void *doc, void *ptr);
+void* ui_document_realloc(void *doc, void *ptr, size_t size);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif	/* UI_TOOLKIT_H */
+

mercurial