Я начал строить свою программу с SDL. Я использую SDL для рендеринга буфера кадров в реальном времени на экране, а также ищу пользовательский ввод с клавиатуры и мыши.
Я использовал следующий код для отображения буфера кадров 5-6-5 RGB на экране.
SDL_Surface* screen = SDL_SetVideoMode(width, height, bitsPerPixel, SDL_SWSURFACE);
SDL_Surface* surface = SDL_CreateRGBSurfaceFrom(frameBuffer, width, height, depth, lineWidth, Rmask, Gmask, Bmask, Amask);
SDL_BlitSurface(surface, NULL, screen, NULL);
SDL_Flip(screen);
Обратите внимание, что Rmask, Gmask, Bmask и Amask - все 0. Я использую маскировку SDL по умолчанию.
Для клавиатуры и мыши я использовал следующий код:
while (run) {
SDL_WaitEvent(&event);
switch (event.type) {
// Key is pressed
case SDL_KEYDOWN:
map<int, int>::iterator it = SDLToAndroid.find(event.key.keysym.sym);
if (it != SDLToAndroid.end()) { /* ... */ }
break;
case SDL_MOUSEBUTTONDOWN:
// Left click
if (event.button.button == SDL_BUTTON_LEFT) { /* ... */ }
break;
Где для нажатия клавиш я ищу их на карте, чтобы преобразовать их в другие ключи.
Это прекрасно работает, но я бы хотел использовать возможности GTK (с точки зрения пользовательского интерфейса). Я начал включать SDL в окно GTK + с помощью среды putenv ( Хак SDL_WINDOWID ), но у меня есть две проблемы:
a) С этим решением не принимаются события SDL.
б) Экран буфера кадров всегда помещается в верхнем левом углу окна (0,0), но я бы хотел, чтобы этот экран отображался где-то посередине моего окна с некоторыми кнопками выше и ниже.
Я думаю о том, чтобы избавиться от SDL и просто использовать GTK + сам. Я хотел бы спросить вас о нескольких вещах, так как я очень новичок в GTK +.
Не могли бы вы сказать, какой тип GtkWidget следует использовать для отображения моего буфера кадров в окне? Кто-нибудь также, пожалуйста, знает, какую функцию я мог бы использовать в GTK для выполнения той же задачи, что и SDL_CreateRGBSurfaceFrom () (если это вообще возможно)? И, наконец, не могли бы вы связать меня со способом получения координат x и y в GtkWidget, который щелкается или перемещается, а не с координатами всего окна, а также с клавиатуры?
(Я нашел какое-то решение для мыши и клавиатуры. Я видел "configure-event", используемый для получения значений x и y, но я не уверен, работает ли это событие на любом GtkWidget. Также для клавиатуры я обнаружил, что нужно использовать «активировать», но я хотел бы подтвердить, что это правильный подход.)