summaryrefslogtreecommitdiffstats
path: root/o3d/plugin
diff options
context:
space:
mode:
authormaf@google.com <maf@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-19 20:37:19 +0000
committermaf@google.com <maf@google.com@0039d316-1c4b-4281-b951-d872f2087c98>2009-06-19 20:37:19 +0000
commitb3ac9cdc41e5e4ded1ac249f336e044523c00977 (patch)
treea4b83e2f1e1d771fa0ac235c6e893581be0d752d /o3d/plugin
parent537500939e38473456b5faac5fbe29add9300d8a (diff)
downloadchromium_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.cc2
-rw-r--r--o3d/plugin/cross/o3d_glue.h3
-rw-r--r--o3d/plugin/linux/main_linux.cc4
-rw-r--r--o3d/plugin/mac/plugin_mac.mm72
-rw-r--r--o3d/plugin/win/main_win.cc5
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;