示例#1
0
static void loggerwindow_handle(void *priv, GHOST_EventHandle evt) {
	LoggerWindow *lw= priv;
	GHOST_TEventType type= GHOST_GetEventType(evt);
	
	switch(type) {
	case GHOST_kEventCursorMove: {
		GHOST_TEventCursorData *cd= GHOST_GetEventData(evt);
		int x, y;
		GHOST_ScreenToClient(lw->win, cd->x, cd->y, &x, &y);
		loggerwindow_do_move(lw, x, lw->size[1]-y-1);
		break;
	}
	case GHOST_kEventButtonDown:
	case GHOST_kEventButtonUp: {
		GHOST_TEventButtonData *bd= GHOST_GetEventData(evt);
		loggerwindow_do_button(lw, bd->button, (type == GHOST_kEventButtonDown));
		break;
	}
	case GHOST_kEventKeyDown:
	case GHOST_kEventKeyUp: {
		GHOST_TEventKeyData *kd= GHOST_GetEventData(evt);
		loggerwindow_do_key(lw, kd->key, (type == GHOST_kEventKeyDown));
		break;
	}
		
	case GHOST_kEventWindowUpdate:
		loggerwindow_do_draw(lw);
		break;
	case GHOST_kEventWindowSize:
		loggerwindow_do_reshape(lw);
		break;
	}
}
示例#2
0
LoggerWindow *loggerwindow_new(MultiTestApp *app) {
	GHOST_SystemHandle sys= multitestapp_get_system(app);
	GHOST_TUns32 screensize[2];
	GHOST_WindowHandle win;
	
	GHOST_GetMainDisplayDimensions(sys, &screensize[0], &screensize[1]);
	win= GHOST_CreateWindow(sys, "MultiTest:Logger", 40, screensize[1]-432,
		800, 300, GHOST_kWindowStateNormal, 
		GHOST_kDrawingContextTypeOpenGL, FALSE, FALSE);
	
	if (win) {
		LoggerWindow *lw= MEM_callocN(sizeof(*lw), "loggerwindow_new");
		int bbox[2][2];
		lw->app= app;
		lw->win= win;

#ifdef USE_BMF
		lw->font= BMF_GetFont(BMF_kScreen12);
		lw->fonttexid= BMF_GetFontTexture(lw->font);

		BMF_GetBoundingBox(lw->font, &bbox[0][0], &bbox[0][1], &bbox[1][0], &bbox[1][1]);
		lw->fontheight= rect_height(bbox);
#else
		lw->font= BLF_load_mem("default", (unsigned char*)datatoc_bfont_ttf, datatoc_bfont_ttf_size);
		BLF_size(lw->font, 11, 72);
		lw->fontheight= BLF_height(lw->font, "A_");
#endif
		
		lw->nloglines= lw->logsize= 0;
		lw->loglines= MEM_mallocN(sizeof(*lw->loglines)*lw->nloglines, "loglines");
		
		lw->scroll= scrollbar_new(2, 40);
		
		GHOST_SetWindowUserData(lw->win, windowdata_new(lw, loggerwindow_handle));

		loggerwindow_do_reshape(lw);

		return lw;
	} else {
		return NULL;
	}
}