ui/ui/toolkit.h

Sat, 07 Dec 2013 12:14:59 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 07 Dec 2013 12:14:59 +0100
changeset 0
1f419bd32da1
child 1
eb5269000bc8
permissions
-rw-r--r--

added files

/*
 * 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