# include <cassert>
# include <iostream>
# include <cmath>
# include <iostream>
# include <signal.h>
# include <QVBoxLayout>
# include <QMouseEvent>
# include <QPushButton>
# include <QGridLayout>
# include "window.hpp"
# include "settings.hpp"
# include "paint.hpp"
volatile sig_atomic_t do_exit = 0 ;
MainWindow : : MainWindow ( QWidget * parent ) : QWidget ( parent ) {
main_layout = new QStackedLayout ;
GLWindow * glWindow = new GLWindow ( this ) ;
main_layout - > addWidget ( glWindow ) ;
SettingsWindow * settingsWindow = new SettingsWindow ( this ) ;
main_layout - > addWidget ( settingsWindow ) ;
main_layout - > setMargin ( 0 ) ;
setLayout ( main_layout ) ;
QObject : : connect ( glWindow , SIGNAL ( openSettings ( ) ) , this , SLOT ( openSettings ( ) ) ) ;
QObject : : connect ( settingsWindow , SIGNAL ( closeSettings ( ) ) , this , SLOT ( closeSettings ( ) ) ) ;
setStyleSheet ( R " (
* {
color : white ;
background - color : # 07233 9 ;
}
) " );
}
void MainWindow : : openSettings ( ) {
main_layout - > setCurrentIndex ( 1 ) ;
}
void MainWindow : : closeSettings ( ) {
main_layout - > setCurrentIndex ( 0 ) ;
}
GLWindow : : GLWindow ( QWidget * parent ) : QOpenGLWidget ( parent ) {
timer = new QTimer ( this ) ;
QObject : : connect ( timer , SIGNAL ( timeout ( ) ) , this , SLOT ( timerUpdate ( ) ) ) ;
}
GLWindow : : ~ GLWindow ( ) {
makeCurrent ( ) ;
doneCurrent ( ) ;
}
void GLWindow : : initializeGL ( ) {
initializeOpenGLFunctions ( ) ;
std : : cout < < " OpenGL version: " < < glGetString ( GL_VERSION ) < < std : : endl ;
std : : cout < < " OpenGL vendor: " < < glGetString ( GL_VENDOR ) < < std : : endl ;
std : : cout < < " OpenGL renderer: " < < glGetString ( GL_RENDERER ) < < std : : endl ;
std : : cout < < " OpenGL language version: " < < glGetString ( GL_SHADING_LANGUAGE_VERSION ) < < std : : endl ;
ui_state = new UIState ( ) ;
ui_init ( ui_state ) ;
ui_state - > sound = & sound ;
ui_state - > fb_w = vwp_w ;
ui_state - > fb_h = vwp_h ;
timer - > start ( 50 ) ;
}
void GLWindow : : timerUpdate ( ) {
ui_update ( ui_state ) ;
update ( ) ;
}
void GLWindow : : resizeGL ( int w , int h ) {
std : : cout < < " resize " < < w < < " x " < < h < < std : : endl ;
}
void GLWindow : : paintGL ( ) {
ui_draw ( ui_state ) ;
}
void GLWindow : : mousePressEvent ( QMouseEvent * e ) {
// Settings button click
if ( ! ui_state - > scene . uilayout_sidebarcollapsed & & e - > x ( ) < = sbr_w ) {
if ( e - > x ( ) > = settings_btn_x & & e - > x ( ) < ( settings_btn_x + settings_btn_w )
& & e - > y ( ) > = settings_btn_y & & e - > y ( ) < ( settings_btn_y + settings_btn_h ) ) {
emit openSettings ( ) ;
}
}
// Vision click
if ( ui_state - > started & & ( e - > x ( ) > = ui_state - > scene . ui_viz_rx - bdr_s ) ) {
ui_state - > scene . uilayout_sidebarcollapsed = ! ui_state - > scene . uilayout_sidebarcollapsed ;
}
}
GLuint visionimg_to_gl ( const VisionImg * img , EGLImageKHR * pkhr , void * * pph ) {
unsigned int texture ;
glGenTextures ( 1 , & texture ) ;
glBindTexture ( GL_TEXTURE_2D , texture ) ;
glTexImage2D ( GL_TEXTURE_2D , 0 , GL_RGB , img - > width , img - > height , 0 , GL_RGB , GL_UNSIGNED_BYTE , * pph ) ;
glGenerateMipmap ( GL_TEXTURE_2D ) ;
* pkhr = ( EGLImageKHR ) 1 ; // not NULL
return texture ;
}
void visionimg_destroy_gl ( EGLImageKHR khr , void * ph ) {
// empty
}
FramebufferState * framebuffer_init ( const char * name , int32_t layer , int alpha ,
int * out_w , int * out_h ) {
return ( FramebufferState * ) 1 ; // not null
}