⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 toolkit.h

📁 超强的嵌入式GUI系统
💻 H
字号:
/* * Copyright (c) 2006 - 2007 *	Alper Akcan <alper@kaffe.org>, All rights reserved. * * See the file "license.terms" for information on usage and redistribution  * of this file.  */#include "config.h"#include "config-std.h"#include "config-mem.h"#include "config-setjmp.h"#include "jcl.h"#include "native.h"#include <xynth.h>#define XYNTH_NWINDOWS 100typedef struct graphics_s {	s_surface_t *surface;	s_font_t *font;	int fg;	int bg;	int x0;	int y0;	s_rect_t clip;} graphics_t;typedef struct window_rec_s {	s_window_t *window;	s_window_t *owner;} window_rec_t;typedef struct deco_inset_s {	int left;	int top;	int right;	int bottom;	char guess;} deco_inset_t;typedef struct xynth_event_s {	s_event_t *event;	s_window_t *window;} xynth_event_t;typedef struct xynth_eventq_s {	s_list_t *list;	s_thread_mutex_t *mut;} xynth_eventq_t;typedef struct xynth_toolkit_s {	deco_inset_t frame_insets;	deco_inset_t dialog_insets;	unsigned int nwindows;	window_rec_t *windows;	s_window_t *last_window;	unsigned int last_idx;	s_window_t *root;	xynth_eventq_t *eventq;	int keymap[S_KEYCODE_CODES];} xynth_toolkit_t;xynth_toolkit_t *xynth;#define DEBUGF(a...)	printf(a); printf(" (%s [%s:%d])\n", __FUNCTION__, __FILE__, __LINE__);//#define DEBUGF(a...)#define TLK_IS_BLOCKING			1#define TLK_IS_DISPATCH_EXCLUSIVE	2#define TLK_NEEDS_FLUSH			4#define TLK_NATIVE_DISPATCHER_LOOP	8#define TLK_EXTERNAL_DECO		16#define JCOMPONENT_RESIZED 101#define JFOCUS_GAINED      1004#define JFOCUS_LOST        1005#define JUPDATE            801#define JQUIT              202#define JMOUSE_PRESSED     501#define JMOUSE_RELEASED    502#define JMOUSE_MOVED       503#define JMOUSE_ENTERED     504#define JMOUSE_EXITED      505#define JKEY_PRESSED       401#define JKEY_RELEASED      402static inline void * _awt_malloc_wrapper (size_t size){	void *adr;	enterUnsafeRegion();	adr = malloc(size);	leaveUnsafeRegion();	return adr;}static inline void * _awt_calloc_wrapper (size_t n, size_t size){	void *adr;	enterUnsafeRegion();	adr = calloc(n, size);	leaveUnsafeRegion();	return adr;}static inline void _awt_free_wrapper (void *adr){	enterUnsafeRegion();	free(adr);	leaveUnsafeRegion();}#define AWT_MALLOC(_n)		_awt_malloc_wrapper(_n)#define AWT_CALLOC(_n,_sz)	_awt_calloc_wrapper(_n, _sz)#define AWT_FREE(_adr)		_awt_free_wrapper(_adr);static inline char * java2CString (JNIEnv *env, jstring jstr){	char *buf;	jboolean isCopy;	register int i;	jsize n = (*env)->GetStringLength(env, jstr);	const jchar *jc = (*env)->GetStringChars(env, jstr, &isCopy);	buf = AWT_MALLOC(n + 1);	for (i = 0; i < n; i++) {		buf[i] = (char) jc[i];	}	buf[i] = 0;	(*env)->ReleaseStringChars(env, jstr, jc);	return buf;}#define KAFFE_FONT_FUNC_DECL(ret, name, args...) ret name(JNIEnv *env, jclass clazz UNUSED, jobject jfont, ##args)#define UNVEIL_FONT(jfont) ((s_font_t *) JCL_GetRawData(env, jfont))#define KAFFE_IMG_FUNC_DECL(ret, name, args...) ret name(JNIEnv *env, jclass clazz UNUSED, jobject jimg, ##args)#define UNVEIL_IMG(jimg) ((s_image_t *) JCL_GetRawData(env, jimg))#define UNVEIL_WINDOW(jwin) ((s_window_t *) JCL_GetRawData(env, jwin))#define KAFFE_GR_FUNC_DECL(ret, name, args...) ret name(JNIEnv *env, jclass clazz UNUSED, jobject jgr, ##args)#define UNVEIL_GR(jgraphics) ((graphics_t *) JCL_GetRawData(env, jgraphics));static inline int source_idx_free (xynth_toolkit_t *tk, s_window_t *win){	register unsigned int n;	for (n = 0; n < tk->nwindows; n++) {		if (tk->windows[n].window == NULL) {			tk->last_idx = n;			tk->last_window = win;			return n;		}	}	return -1;}static inline int source_idx_register (xynth_toolkit_t *tk, s_window_t *window, s_window_t *owner){	int i;	i = source_idx_free(tk, window);	if (i >= 0) {		tk->windows[i].window = window;		tk->windows[i].owner = owner;		return i;	} else {		DEBUGF("window table out of spafe: %d", tk->nwindows);		return -1;	}}static inline int source_idx_get (xynth_toolkit_t *tk, s_window_t *win){	register unsigned int n;	if (win == tk->last_window) {		return tk->last_idx;	} else {		for (n = 0; n < tk->nwindows; n++) {			if (tk->windows[n].window == win) {				tk->last_idx = n;				tk->last_window = win;				return tk->last_idx;			} else if (tk->windows[n].window == 0) {				return -1;			}		}		return -1;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -