#include "wx/about_dialog.h"
#include "wx/file_dialog.h"
#include "wx/film_viewer.h"
+#include "wx/id.h"
#include "wx/nag_dialog.h"
#include "wx/player_config_dialog.h"
#include "wx/player_information.h"
#include "lib/player.h"
#include "lib/player_video.h"
#include "lib/ratio.h"
-#include "lib/scope_guard.h"
#include "lib/scoped_temporary.h"
#include "lib/server.h"
#include "lib/text_content.h"
#include <dcp/exceptions.h>
#include <dcp/filesystem.h>
#include <dcp/raw_convert.h>
+#include <dcp/scope_guard.h>
#include <dcp/search.h>
#include <dcp/warnings.h>
LIBDCP_DISABLE_WARNINGS
enum {
- ID_file_open = 1,
+ ID_file_open = DCPOMATIC_MAIN_MENU,
ID_file_add_ov,
ID_file_add_kdm,
ID_file_save_frame,
ID_file_history,
/* Allow spare IDs after _history for the recent files list */
- ID_file_close = 100,
+ ID_file_close = DCPOMATIC_MAIN_MENU + 100,
ID_view_cpl,
/* Allow spare IDs for CPLs */
- ID_view_full_screen = 200,
+ ID_view_full_screen = DCPOMATIC_MAIN_MENU + 200,
ID_view_dual_screen,
ID_view_closed_captions,
ID_view_scale_appropriate,
j->set_use (true);
}
- if (i->video) {
- auto const r = Ratio::nearest_from_ratio(i->video->size().ratio());
+ if (i->video && i->video->size()) {
+ auto const r = Ratio::nearest_from_ratio(i->video->size()->ratio());
if (r->id() == "239") {
/* Any scope content means we use scope */
_film->set_container(r);
#endif
#ifdef __WXOSX__
- auto prefs = _file_menu->Append (wxID_PREFERENCES, _("&Preferences...\tCtrl-P"));
+ auto prefs = _file_menu->Append(wxID_PREFERENCES, _("&Preferences...\tCtrl-,"));
#else
auto edit = new wxMenu;
auto prefs = edit->Append (wxID_PREFERENCES, _("&Preferences...\tCtrl-P"));
for (auto i: dcp->text) {
i->set_use (true);
}
- if (dcp->video) {
- auto const r = Ratio::nearest_from_ratio(dcp->video->size().ratio());
+ if (dcp->video && dcp->video->size()) {
+ auto const r = Ratio::nearest_from_ratio(dcp->video->size()->ratio());
if (r) {
_film->set_container(r);
}
DCPOMATIC_ASSERT (dcp);
try {
if (dcp) {
- ScopeGuard sg([this]() {
+ dcp::ScopeGuard sg([this]() {
_viewer.set_coalesce_player_changes(false);
});
_viewer.set_coalesce_player_changes(true);
_viewer.panel()->Reparent(_dual_screen);
_viewer.panel()->SetFocus();
_dual_screen->Show ();
+ LOG_DEBUG_PLAYER("Setting up dual screen mode with %1 displays", wxDisplay::GetCount());
+ for (auto index = 0U; index < wxDisplay::GetCount(); ++index) {
+ wxDisplay display(index);
+ auto client = display.GetClientArea();
+ auto mode = display.GetCurrentMode();
+ auto geometry = display.GetGeometry();
+ LOG_DEBUG_PLAYER("Display %1", index);
+ LOG_DEBUG_PLAYER(" ClientArea position=(%1, %2) size=(%3, %4)", client.GetX(), client.GetY(), client.GetWidth(), client.GetHeight());
+ LOG_DEBUG_PLAYER(" Geometry position=(%1, %2) size=(%3, %4)", geometry.GetX(), geometry.GetY(), geometry.GetWidth(), geometry.GetHeight());
+ LOG_DEBUG_PLAYER(" Mode size=(%1, %2)", mode.GetWidth(), mode.GetHeight());
+ LOG_DEBUG_PLAYER(" Primary? %1", static_cast<int>(display.IsPrimary()));
+ }
if (wxDisplay::GetCount() > 1) {
- switch (Config::instance()->image_display()) {
- case 0:
- _dual_screen->Move (0, 0);
- Move (wxDisplay(0U).GetClientArea().GetWidth(), 0);
- break;
- case 1:
- _dual_screen->Move (wxDisplay(0U).GetClientArea().GetWidth(), 0);
- // (0, 0) doesn't seem to work for some strange reason
- Move (8, 8);
- break;
- }
+ wxRect geometry[2] = {
+ wxDisplay(0U).GetGeometry(),
+ wxDisplay(1U).GetGeometry()
+ };
+ auto const image_display = Config::instance()->image_display();
+ _dual_screen->Move(geometry[image_display].GetX(), geometry[image_display].GetY());
+ _viewer.panel()->SetSize(geometry[image_display].GetWidth(), geometry[image_display].GetHeight());
+ Move(geometry[1 - image_display].GetX(), geometry[1 - image_display].GetY());
}
_dual_screen->Bind(wxEVT_CHAR_HOOK, boost::bind(&DOMFrame::dual_screen_key_press, this, _1));
} else {