File: application.cpp

package info (click to toggle)
higan 098-2
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 11,904 kB
  • ctags: 13,286
  • sloc: cpp: 108,285; ansic: 778; makefile: 32; sh: 18
file content (59 lines) | stat: -rw-r--r-- 1,248 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#if defined(Hiro_Application)

namespace hiro {

XlibDisplay* pApplication::display = nullptr;

auto pApplication::run() -> void {
  if(Application::state.onMain) {
    while(!Application::state.quit) {
      Application::doMain();
      processEvents();
    }
  } else {
    QApplication::exec();
  }
}

auto pApplication::pendingEvents() -> bool {
  return QApplication::hasPendingEvents();
}

auto pApplication::processEvents() -> void {
  while(pendingEvents()) QApplication::processEvents();
}

auto pApplication::quit() -> void {
  QApplication::quit();
  qtApplication = nullptr;  //note: deleting QApplication will crash libQtGui
}

//this is sadly necessary for things like determining window frame geometry
//obviously, it is used as sparingly as possible
auto pApplication::syncX() -> void {
  for(auto n : range(8)) {
    QApplication::syncX();
    Application::processEvents();
    usleep(2000);
  }
}

auto pApplication::initialize() -> void {
  display = XOpenDisplay(0);

  settings = new Settings;
  settings->load();

  static int argc = 1;
  static char* argv[] = {new char[8], nullptr};
  strcpy(argv[0], "hiro");
  char** argvp = argv;

  qtApplication = new QApplication(argc, argvp);

  pKeyboard::initialize();
}

}

#endif