OSDN Git Service

[UI][Qt][DRAW] Fix crash sometimes when exit emulator.
[csp-qt/common_source_project-fm7.git] / source / src / qt / gui / qt_gldraw.h
1 /*
2  * qt_gldraw.h
3  * (c) 2011 K.Ohta <whatisthis.sowhat@gmail.com>
4  * Modified to Common Source code Project, License is changed to GPLv2.
5  * 
6  */
7 #ifndef _CSP_QT_GLDRAW_H
8 #define _CSP_QT_GLDRAW_H
9
10 //#include "emu.h"
11 #include "../osd_types.h"
12 #include "dropdown_keyset.h"
13 #include "menu_flags.h"
14
15 #include <QGLWidget>
16 class EMU;
17 class QEvent;
18 class GLDraw_2_0;
19 class GLDraw_3_0;
20 class CSP_KeyTables;
21
22 struct NativeScanCode {
23         uint32_t vk;
24         uint32_t scan;
25 };
26 struct NativeVirtualKeyCode {
27         uint32_t vk;
28         uint32_t key;
29 };
30
31 class GLDrawClass: public QGLWidget 
32 {
33         Q_OBJECT
34  private:
35         EMU *p_emu;
36         bool is_mouse_enabled;
37         
38         bool enable_mouse;
39         GLfloat screen_width, screen_height;
40         int vram_width;
41         int vram_height;
42         int draw_width;
43         int draw_height;
44         
45         bool delay_update;
46
47  protected:
48         bool run_vm;
49
50         void keyReleaseEvent(QKeyEvent *event);
51         void keyPressEvent(QKeyEvent *event);
52         void initializeGL();
53         void paintGL();
54         void drawGrids(void);
55
56         uint32_t get106Scancode2VK(uint32_t data);
57 #ifdef _USE_OPENCL
58         //     extern class GLCLDraw *cldraw;
59 #endif
60         bool QueryGLExtensions(const char *str);
61         void InitGLExtensionVars(void);
62         void InitContextCL(void);
63         
64         QString filename_screen_pixmap;
65         bool save_pixmap_req;
66         void SaveToPixmap(void);
67         GLDraw_2_0 *extfunc;
68         CSP_KeyTables *key_table;
69
70 public:
71         GLDrawClass(QWidget *parent = 0);
72         ~GLDrawClass();
73
74         QSize minimumSizeHint() const;
75         QSize sizeHint() const;
76         QSize getCanvasSize();
77         QSize getDrawSize();
78         
79         QStringList *getKeyNames(void);
80         QStringList *getVKNames(void);
81         keydef_table_t *get_key_table(int index);
82         keydef_table_t *get_key_tables(void);
83         keydef_table_t *get_base_key_table(void);
84         const keydef_table_t *get_default_key_table(void);
85         int get_key_table_size(void);
86         uint32_t get_vk_from_index(int index);
87         uint32_t get_scan_from_index(int index);
88         const char *get_key_vk_name(int index);
89         quint32 getModState(void) { return modifier;}
90         quint32 modifier;
91         void InitFBO(void);
92         void closeEvent(QCloseEvent *event);
93         void drawUpdateTexture(bitmap_t *p);
94
95 public slots:
96         void initKeyCode(void);
97         void releaseKeyCode(void);
98         
99         void update_screen(bitmap_t *);
100         void resizeGL(int width, int height);
101         void mouseMoveEvent(QMouseEvent *event);
102         void mousePressEvent(QMouseEvent *event);
103         void mouseReleaseEvent(QMouseEvent *event);
104
105         void setEnableMouse(bool flag);
106         void setSmoosing(bool);
107         void setDrawGLGridVert(bool);
108         void setDrawGLGridHoriz(bool);
109         void setVirtualVramSize(int ,int);      
110         void setChangeBrightness(bool);
111         void setBrightness(GLfloat r, GLfloat g, GLfloat b);
112         
113         void updateBitmap(QImage *);
114
115         void setEmuPtr(EMU *p);
116         void enterEvent(QEvent *);
117         void leaveEvent(QEvent *);
118         void do_save_frame_screen(void);
119         void do_save_frame_screen(const char *);
120         void do_set_texture_size(QImage *p, int w, int h);
121         
122         void do_set_screen_multiply(float mul);
123         void do_update_keyboard_scan_code(uint32_t vk, uint32_t scan);
124         void do_set_mouse_enabled(bool flag);
125         void do_stop_run_vm();
126 signals:
127         void update_screenChanged(int tick);
128         void do_notify_move_mouse(int x, int y);
129
130         void sig_toggle_mouse(void);
131         void do_notify_button_pressed(Qt::MouseButton button);
132         void do_notify_button_released(Qt::MouseButton button);
133         void sig_check_grab_mouse(bool);
134         void sig_resize_uibar(int, int);
135         void sig_draw_timing(bool);
136         int sig_finished(void);
137         int sig_key_down(uint32_t, uint32_t, bool);
138         int sig_key_up(uint32_t, uint32_t);
139 };
140
141 #endif // End.