diff options
author | maf@google.com <maf@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 20:37:19 +0000 |
---|---|---|
committer | maf@google.com <maf@google.com@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-06-19 20:37:19 +0000 |
commit | b3ac9cdc41e5e4ded1ac249f336e044523c00977 (patch) | |
tree | a4b83e2f1e1d771fa0ac235c6e893581be0d752d /o3d/plugin | |
parent | 537500939e38473456b5faac5fbe29add9300d8a (diff) | |
download | chromium_src-b3ac9cdc41e5e4ded1ac249f336e044523c00977.zip chromium_src-b3ac9cdc41e5e4ded1ac249f336e044523c00977.tar.gz chromium_src-b3ac9cdc41e5e4ded1ac249f336e044523c00977.tar.bz2 |
Add Mac support for setting plugin fullscreen area.
Review URL: http://codereview.chromium.org/126252
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@18847 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'o3d/plugin')
-rw-r--r-- | o3d/plugin/cross/o3d_glue.cc | 2 | ||||
-rw-r--r-- | o3d/plugin/cross/o3d_glue.h | 3 | ||||
-rw-r--r-- | o3d/plugin/linux/main_linux.cc | 4 | ||||
-rw-r--r-- | o3d/plugin/mac/plugin_mac.mm | 72 | ||||
-rw-r--r-- | o3d/plugin/win/main_win.cc | 5 |
5 files changed, 59 insertions, 27 deletions
diff --git a/o3d/plugin/cross/o3d_glue.cc b/o3d/plugin/cross/o3d_glue.cc index e14bb00..cc21c45 100644 --- a/o3d/plugin/cross/o3d_glue.cc +++ b/o3d/plugin/cross/o3d_glue.cc @@ -674,7 +674,7 @@ bool PluginObject::SetFullscreenClickRegion(int x, int y, int width, int height, bool success = false; o3d::DisplayMode mode; // Make sure it's a valid ID first. - if (renderer()->GetDisplayMode(mode_id, &mode)) { + if (GetDisplayMode(mode_id, &mode)) { fullscreen_region_valid_ = true; fullscreen_region_x_ = x; fullscreen_region_y_ = y; diff --git a/o3d/plugin/cross/o3d_glue.h b/o3d/plugin/cross/o3d_glue.h index 1b49e02..6c6eacc 100644 --- a/o3d/plugin/cross/o3d_glue.h +++ b/o3d/plugin/cross/o3d_glue.h @@ -291,6 +291,9 @@ class PluginObject: public NPObject { return fullscreen_; } + // Fetch one mode by externally visible id, returning true on success. + bool GetDisplayMode(int id, o3d::DisplayMode *mode); + // Get a vector of the available fullscreen display modes. // Clears *modes on error. void GetDisplayModes(std::vector<o3d::DisplayMode> *modes); diff --git a/o3d/plugin/linux/main_linux.cc b/o3d/plugin/linux/main_linux.cc index 7168333..e96419a 100644 --- a/o3d/plugin/linux/main_linux.cc +++ b/o3d/plugin/linux/main_linux.cc @@ -365,6 +365,10 @@ void LinuxEnterLeaveHandler(Widget w, } } +bool PluginObject::GetDisplayMode(int id, o3d::DisplayMode *mode) { + return false; +} + // TODO: Where should this really live? It's platform-specific, but in // PluginObject, which mainly lives in cross/o3d_glue.h+cc. bool PluginObject::RequestFullscreenDisplay() { diff --git a/o3d/plugin/mac/plugin_mac.mm b/o3d/plugin/mac/plugin_mac.mm index 94327b4..aa66ca2 100644 --- a/o3d/plugin/mac/plugin_mac.mm +++ b/o3d/plugin/mac/plugin_mac.mm @@ -770,11 +770,13 @@ void CleanupFullscreenWindow(PluginObject *obj) { obj->SetFullscreenOverlayMacWindow(NULL); if (fs_window) { + HideWindow(fs_window); ReleaseWindowGroup(GetWindowGroup(fs_window)); DisposeWindow(fs_window); } if(fs_o_window) { + HideWindow(fs_o_window); ReleaseWindowGroup(GetWindowGroup(fs_o_window)); DisposeWindow(fs_o_window); } @@ -817,34 +819,11 @@ static bool ExtractDisplayModeData(NSDictionary *mode_dict, return true; } -void PluginObject::GetDisplayModes(std::vector<o3d::DisplayMode> *modes) { - NSArray* mac_modes = (NSArray*)CGDisplayAvailableModes(CGMainDisplayID()); - int num_modes = [mac_modes count]; - std::vector<o3d::DisplayMode> modes_found; - - for (int i = 0; i < num_modes; ++i) { - int width = 0; - int height = 0; - int refresh_rate = 0; - int bpp = 0; - - if (ExtractDisplayModeData([mac_modes objectAtIndex:i], - &width, - &height, - &refresh_rate, - &bpp) && bpp == 32) - modes_found.push_back(o3d::DisplayMode(width, height, refresh_rate, - i + kO3D_MODE_OFFSET)); - } - - modes->swap(modes_found); -} - // Returns information on a display mode, which is mode n - kO3D_MODE_OFFSET // in the raw list returned by CGDisplayAvailableModes on the main screen, // with kO3D_MODE_OFFSET + 0 being the first entry in the array. -static bool GetDisplayMode(int id, o3d::DisplayMode *mode) { +static bool GetOtherDisplayMode(int id, o3d::DisplayMode *mode) { NSArray *mac_modes = (NSArray*) CGDisplayAvailableModes(CGMainDisplayID()); int num_modes = [mac_modes count]; int array_offset = id - kO3D_MODE_OFFSET; @@ -864,6 +843,7 @@ static bool GetDisplayMode(int id, o3d::DisplayMode *mode) { return false; } + static int GetCGDisplayModeID(NSDictionary* mode_dict) { return [[mode_dict valueForKey:@"Mode"] intValue]; } @@ -901,6 +881,41 @@ static void GetCurrentDisplayMode(o3d::DisplayMode *mode) { mode->Set(width, height, refresh_rate, mode_id); } + +bool PluginObject::GetDisplayMode(int id, o3d::DisplayMode *mode) { + if (id == o3d::Renderer::DISPLAY_MODE_DEFAULT) { + GetCurrentDisplayMode(mode); + return true; + } else { + return GetOtherDisplayMode(id, mode); + } +} + + +void PluginObject::GetDisplayModes(std::vector<o3d::DisplayMode> *modes) { + NSArray* mac_modes = (NSArray*)CGDisplayAvailableModes(CGMainDisplayID()); + int num_modes = [mac_modes count]; + std::vector<o3d::DisplayMode> modes_found; + + for (int i = 0; i < num_modes; ++i) { + int width = 0; + int height = 0; + int refresh_rate = 0; + int bpp = 0; + + if (ExtractDisplayModeData([mac_modes objectAtIndex:i], + &width, + &height, + &refresh_rate, + &bpp) && bpp == 32) + modes_found.push_back(o3d::DisplayMode(width, height, refresh_rate, + i + kO3D_MODE_OFFSET)); + } + + modes->swap(modes_found); +} + + #pragma mark ____FULLSCREEN_SWITCHING @@ -912,7 +927,8 @@ bool PluginObject::RequestFullscreenDisplay() { int target_width = 0; int target_height = 0; - if (fullscreen_region_valid_) { + if (fullscreen_region_valid_ && + fullscreen_region_mode_id_ != Renderer::DISPLAY_MODE_DEFAULT) { o3d::DisplayMode the_mode; if (GetDisplayMode(fullscreen_region_mode_id_, &the_mode)) { target_width = the_mode.width(); @@ -956,6 +972,8 @@ bool PluginObject::RequestFullscreenDisplay() { renderer()->SetClientOriginOffset(0, 0); renderer_->Resize(bounds.right - bounds.left, bounds.bottom - bounds.top); + fullscreen_ = true; + client()->SendResizeEvent(renderer_->width(), renderer_->height(), true); const double kFadeOutTime = 3.0; SetFullscreenOverlayMacWindow(CreateOverlayWindow()); @@ -989,6 +1007,8 @@ void PluginObject::CancelFullscreenDisplay() { } else { SetSystemUIMode(kUIModeNormal, 0); } + fullscreen_ = false; + client()->SendResizeEvent(prev_width_, prev_height_, false); // Somehow the browser window does not automatically activate again @@ -996,7 +1016,7 @@ void PluginObject::CancelFullscreenDisplay() { if (mac_cocoa_window_) { NSWindow* browser_window = (NSWindow*) mac_cocoa_window_; [browser_window makeKeyAndOrderFront:browser_window]; - } else { + } else if (mac_window_) { SelectWindow(mac_window_); } } diff --git a/o3d/plugin/win/main_win.cc b/o3d/plugin/win/main_win.cc index 01f8704..4cc9d33 100644 --- a/o3d/plugin/win/main_win.cc +++ b/o3d/plugin/win/main_win.cc @@ -804,6 +804,11 @@ extern "C" { return NPERR_NO_ERROR; } + bool PluginObject::GetDisplayMode(int id, o3d::DisplayMode *mode) { + return renderer()->GetDisplayMode(mode_id, mode); + } + + HWND CreateFullscreenWindow(PluginObject *obj, int mode_id) { o3d::DisplayMode mode; |