You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

122 lines
3.0 KiB

2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
2 years ago
  1. #include "main-window.hpp"
  2. #include "obs-manager.hpp"
  3. #include <iostream>
  4. #include <string>
  5. #include <gdk/gdkx.h>
  6. using namespace std;
  7. MainWindow::MainWindow(Glib::RefPtr<Gtk::Application> app, OBSManager *obs)
  8. : mBoxMain(Gtk::Orientation::ORIENTATION_VERTICAL, 6),
  9. mBoxSpacer(Gtk::Orientation::ORIENTATION_VERTICAL, 0),
  10. mButtonPreview("View Preview"),
  11. mButtonStart("Start Recording"),
  12. mButtonSettings("Settings"),
  13. mButtonExit("Exit"),
  14. mLabelVersion("Version: "),
  15. mSettingsWindow(obs),
  16. mPreviewWindow(obs)
  17. {
  18. set_title("New Recording");
  19. set_default_size(1048, 720);
  20. set_border_width(10);
  21. mApp = app;
  22. mOBS = obs;
  23. mOBS->sigStartPreview.connect(sigc::mem_fun(*this, &MainWindow::onPreviewStarted));
  24. mOBS->sigStartRecording.connect(sigc::mem_fun(*this, &MainWindow::onRecordingStarted));
  25. mOBS->sigStopRecording.connect(sigc::mem_fun(*this, &MainWindow::onRecordingStopped));
  26. mButtonPreview.signal_clicked().connect(
  27. sigc::mem_fun(*this, &MainWindow::onPreviewClicked));
  28. mButtonStart.signal_clicked().connect(
  29. sigc::mem_fun(*this, &MainWindow::onStartClicked));
  30. mButtonSettings.signal_clicked().connect(
  31. sigc::mem_fun(*this, &MainWindow::onSettingsClicked));
  32. mButtonExit.signal_clicked().connect(
  33. sigc::mem_fun(*this, &MainWindow::onExitClicked));
  34. mButtonStart.set_sensitive(false);
  35. mBoxMain.pack_start(mButtonPreview, Gtk::PACK_SHRINK);
  36. mBoxMain.pack_start(mButtonStart, Gtk::PACK_SHRINK);
  37. mBoxMain.pack_start(mBoxSpacer, Gtk::PACK_EXPAND_WIDGET);
  38. mBoxMain.pack_start(mButtonSettings, Gtk::PACK_SHRINK);
  39. mBoxMain.pack_start(mButtonExit, Gtk::PACK_SHRINK);
  40. mBoxMain.pack_start(mLabelVersion, Gtk::PACK_SHRINK);
  41. add(mBoxMain);
  42. mBoxMain.show_all();
  43. string version;
  44. version.append("OBS Version: ");
  45. version.append(obs->GetVersion());
  46. mLabelVersion.set_text(version);
  47. }
  48. MainWindow::~MainWindow()
  49. {
  50. mOBS->Cleanup();
  51. }
  52. void MainWindow::on_show()
  53. {
  54. Gtk::Widget::on_show();
  55. Gdk::Rectangle rect;
  56. auto screen = get_screen();
  57. auto monitor = screen->get_monitor_at_window(screen->get_active_window());
  58. screen->get_monitor_geometry(monitor, rect);
  59. mOBS->Initialize(rect);
  60. onSettingsClicked();
  61. }
  62. void MainWindow::onPreviewClicked()
  63. {
  64. mPreviewWindow.show();
  65. }
  66. void MainWindow::onStartClicked()
  67. {
  68. if (mOBS->IsRecording())
  69. mOBS->StopRecording();
  70. else
  71. mOBS->StartRecording();
  72. }
  73. void MainWindow::onSettingsClicked()
  74. {
  75. mSettingsWindow.set_transient_for(*this);
  76. mSettingsWindow.show();
  77. }
  78. void MainWindow::onExitClicked()
  79. {
  80. mOBS->sigCleanup.connect(sigc::mem_fun(*this, &MainWindow::onCleanupDone));
  81. mOBS->Cleanup();
  82. }
  83. void MainWindow::onCleanupDone()
  84. {
  85. mApp->quit();
  86. }
  87. void MainWindow::onPreviewStarted()
  88. {
  89. mButtonStart.set_sensitive(true);
  90. }
  91. void MainWindow::onRecordingStarted()
  92. {
  93. mButtonStart.set_label("Stop Recording");
  94. }
  95. void MainWindow::onRecordingStopped()
  96. {
  97. mButtonStart.set_label("Start Recording");
  98. }