gboolean DrawFunc(gpointer user) { ENGD *engd = user; GdkGLDrawable *pGLD = 0; GdkRectangle rect = {}; GdkModifierType gmod; gint xptr, yptr; GdkRegion *creg; GdkWindow *hwnd; intptr_t *data; uint32_t attr; cEngineCallback(engd, ECB_GUSR, (intptr_t)&data); if (!(hwnd = gtk_widget_get_window(GTK_WIDGET(data[0])))) return TRUE; gdk_window_get_pointer(hwnd, &xptr, &yptr, &gmod); attr = ((gmod & GDK_BUTTON1_MASK)? UFR_LBTN : 0) | ((gmod & GDK_BUTTON2_MASK)? UFR_MBTN : 0) | ((gmod & GDK_BUTTON3_MASK)? UFR_RBTN : 0) | ((gtk_window_is_active(GTK_WINDOW(data[0])))? UFR_MOUS : 0); attr = cPrepareFrame(engd, xptr, yptr, attr); if (attr & PFR_SKIP) usleep(1000); if (attr & PFR_HALT) return TRUE; if (attr & PFR_PICK) { rect.width = (int16_t)(data[2]); rect.height = (int16_t)(data[2] >> 16); }
gboolean FPSFunc(gpointer user) { ENGD *engd = user; intptr_t *data; char fout[64]; cOutputFPS(engd, fout); cEngineCallback(engd, ECB_GUSR, (intptr_t)&data); gtk_window_set_title(GTK_WINDOW(data[0]), fout); printf("%s\n", fout); return TRUE; }
LRESULT APIENTRY WindowProc(HWND hWnd, UINT uMsg, WPARAM wPrm, LPARAM lPrm) { switch (uMsg) { case WM_CREATE: SetWindowLongPtr(hWnd, GWLP_USERDATA, (LONG_PTR)((CREATESTRUCT*)lPrm)->lpCreateParams); SetTimer(hWnd, 1, 1000, 0); return 0; case WM_KEYDOWN: if (wPrm == VK_ESCAPE) case WM_CLOSE: cEngineCallback((ENGD*)GetWindowLongPtr(hWnd, GWLP_USERDATA), ECB_QUIT, ~0); return 0; case WM_LBUTTONDOWN: SetCapture(hWnd); return 0; case WM_LBUTTONUP: ReleaseCapture(); return 0; case WM_TIMER: { char fout[64]; cOutputFPS((ENGD*)GetWindowLongPtr(hWnd, GWLP_USERDATA), fout); SetWindowText(hWnd, fout); printf("%s\n", fout); return 0; } case WM_DESTROY: KillTimer(hWnd, 1); PostQuitMessage(0); return 0; default: return DefWindowProc(hWnd, uMsg, wPrm, lPrm); } }
void lShowMainWindow(ENGD *engd, long show) { intptr_t *data; cEngineCallback(engd, ECB_GUSR, (intptr_t)&data); ShowWindow((HWND)data[0], (show)? SW_SHOW : SW_HIDE); }
void lRestartEngine(ENGD *engd) { intptr_t *data; cEngineCallback(engd, ECB_GUSR, (intptr_t)&data); data[0] = 0; }