6909be2acaa73c7be81148029a594d5135a93e1c
[ipdf/code.git] / src / screen.cpp
1 #include "common.h"
2 #include "screen.h"
3
4 #include "SDL_opengl.h"
5
6 using namespace IPDF;
7 using namespace std;
8
9 Screen::Screen()
10 {
11         SDL_Init(SDL_INIT_VIDEO);
12         m_window = SDL_CreateWindow("IPDF", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED,
13                         800, 600, SDL_WINDOW_OPENGL | SDL_WINDOW_RESIZABLE);
14
15         if (!m_window)
16         {
17                 Fatal("Couldn't create window!");
18         }
19
20         m_gl_context = SDL_GL_CreateContext(m_window);
21
22 }
23
24 Screen::~Screen()
25 {
26         SDL_GL_DeleteContext(m_gl_context);
27         SDL_DestroyWindow(m_window);
28         SDL_Quit();
29 }
30
31 void Screen::ResizeViewport(int width, int height)
32 {
33         glViewport(0, 0, width, height);
34         m_viewport_width = width;
35         m_viewport_height = height;
36 }
37
38 bool Screen::PumpEvents()
39 {
40         SDL_Event evt;
41         bool no_quit_requested = true;
42         while (SDL_PollEvent(&evt))
43         {
44                 switch (evt.type)
45                 {
46                 case SDL_QUIT:
47                         no_quit_requested = false;
48                         break;
49                 case SDL_WINDOWEVENT:
50                         switch (evt.window.event)
51                         {
52                         case SDL_WINDOWEVENT_RESIZED:
53                         case SDL_WINDOWEVENT_SIZE_CHANGED:
54                                 ResizeViewport(evt.window.data1, evt.window.data2);
55                                 break;
56                         }
57                         break;
58                 default:
59                         break;
60                 }
61         }
62         return no_quit_requested;
63 }
64
65 void Screen::Present()
66 {
67         SDL_GL_SwapWindow(m_window);
68 }
69

UCC git Repository :: git.ucc.asn.au