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; } }
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; } }