Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(554)

Side by Side Diff: content/browser/renderer_host/render_widget_host_view_mac.mm

Issue 388803003: [Mac] Replace SetOverlayView with AllowOtherViews. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "content/browser/renderer_host/render_widget_host_view_mac.h" 5 #include "content/browser/renderer_host/render_widget_host_view_mac.h"
6 6
7 #import <objc/runtime.h> 7 #import <objc/runtime.h>
8 #include <OpenGL/gl.h> 8 #include <OpenGL/gl.h>
9 #include <QuartzCore/QuartzCore.h> 9 #include <QuartzCore/QuartzCore.h>
10 10
(...skipping 489 matching lines...) Expand 10 before | Expand all | Expand 10 after
500 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget) 500 RenderWidgetHostViewMac::RenderWidgetHostViewMac(RenderWidgetHost* widget)
501 : render_widget_host_(RenderWidgetHostImpl::From(widget)), 501 : render_widget_host_(RenderWidgetHostImpl::From(widget)),
502 text_input_type_(ui::TEXT_INPUT_TYPE_NONE), 502 text_input_type_(ui::TEXT_INPUT_TYPE_NONE),
503 can_compose_inline_(true), 503 can_compose_inline_(true),
504 browser_compositor_has_pending_paint_(false), 504 browser_compositor_has_pending_paint_(false),
505 browser_compositor_view_placeholder_( 505 browser_compositor_view_placeholder_(
506 new BrowserCompositorViewPlaceholderMac), 506 new BrowserCompositorViewPlaceholderMac),
507 backing_store_scale_factor_(1), 507 backing_store_scale_factor_(1),
508 is_loading_(false), 508 is_loading_(false),
509 is_paused_for_resize_or_repaint_(false), 509 is_paused_for_resize_or_repaint_(false),
510 allow_pause_for_resize_or_repaint_(true),
510 weak_factory_(this), 511 weak_factory_(this),
511 fullscreen_parent_host_view_(NULL), 512 fullscreen_parent_host_view_(NULL),
512 overlay_view_weak_factory_(this),
513 software_frame_weak_ptr_factory_(this) { 513 software_frame_weak_ptr_factory_(this) {
514 software_frame_manager_.reset(new SoftwareFrameManager( 514 software_frame_manager_.reset(new SoftwareFrameManager(
515 software_frame_weak_ptr_factory_.GetWeakPtr())); 515 software_frame_weak_ptr_factory_.GetWeakPtr()));
516 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_| 516 // |cocoa_view_| owns us and we will be deleted when |cocoa_view_|
517 // goes away. Since we autorelease it, our caller must put 517 // goes away. Since we autorelease it, our caller must put
518 // |GetNativeView()| into the view hierarchy right after calling us. 518 // |GetNativeView()| into the view hierarchy right after calling us.
519 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc] 519 cocoa_view_ = [[[RenderWidgetHostViewCocoa alloc]
520 initWithRenderWidgetHostViewMac:this] autorelease]; 520 initWithRenderWidgetHostViewMac:this] autorelease];
521 521
522 background_layer_.reset([[CALayer alloc] init]); 522 background_layer_.reset([[CALayer alloc] init]);
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
555 555
556 void RenderWidgetHostViewMac::SetDelegate( 556 void RenderWidgetHostViewMac::SetDelegate(
557 NSObject<RenderWidgetHostViewMacDelegate>* delegate) { 557 NSObject<RenderWidgetHostViewMacDelegate>* delegate) {
558 [cocoa_view_ setResponderDelegate:delegate]; 558 [cocoa_view_ setResponderDelegate:delegate];
559 } 559 }
560 560
561 void RenderWidgetHostViewMac::SetAllowOverlappingViews(bool overlapping) { 561 void RenderWidgetHostViewMac::SetAllowOverlappingViews(bool overlapping) {
562 // TODO(ccameron): Remove callers of this function. 562 // TODO(ccameron): Remove callers of this function.
563 } 563 }
564 564
565 void RenderWidgetHostViewMac::SetAllowPauseForResizeOrRepaint(bool allow) {
566 allow_pause_for_resize_or_repaint_ = allow;
567 }
568
565 /////////////////////////////////////////////////////////////////////////////// 569 ///////////////////////////////////////////////////////////////////////////////
566 // RenderWidgetHostViewMac, RenderWidgetHostView implementation: 570 // RenderWidgetHostViewMac, RenderWidgetHostView implementation:
567 571
568 bool RenderWidgetHostViewMac::EnsureCompositedIOSurface() { 572 bool RenderWidgetHostViewMac::EnsureCompositedIOSurface() {
569 // If the context or the IOSurface's context has had an error, re-build 573 // If the context or the IOSurface's context has had an error, re-build
570 // everything from scratch. 574 // everything from scratch.
571 if (compositing_iosurface_context_ && 575 if (compositing_iosurface_context_ &&
572 compositing_iosurface_context_->HasBeenPoisoned()) { 576 compositing_iosurface_context_->HasBeenPoisoned()) {
573 LOG(ERROR) << "Failing EnsureCompositedIOSurface because " 577 LOG(ERROR) << "Failing EnsureCompositedIOSurface because "
574 << "context was poisoned"; 578 << "context was poisoned";
(...skipping 1010 matching lines...) Expand 10 before | Expand all | Expand 10 after
1585 // Request that a new frame be generated and dirty the view. 1589 // Request that a new frame be generated and dirty the view.
1586 if (render_widget_host_) 1590 if (render_widget_host_)
1587 render_widget_host_->ScheduleComposite(); 1591 render_widget_host_->ScheduleComposite();
1588 [cocoa_view_ setNeedsDisplay:YES]; 1592 [cocoa_view_ setNeedsDisplay:YES];
1589 1593
1590 // TODO(ccameron): It may be a good idea to request that the renderer recreate 1594 // TODO(ccameron): It may be a good idea to request that the renderer recreate
1591 // its GL context as well, and fall back to software if this happens 1595 // its GL context as well, and fall back to software if this happens
1592 // repeatedly. 1596 // repeatedly.
1593 } 1597 }
1594 1598
1595 void RenderWidgetHostViewMac::SetOverlayView(
1596 RenderWidgetHostViewMac* overlay, const gfx::Point& offset) {
1597 if (overlay_view_)
1598 overlay_view_->underlay_view_.reset();
1599
1600 overlay_view_ = overlay->overlay_view_weak_factory_.GetWeakPtr();
1601 overlay_view_->underlay_view_ = overlay_view_weak_factory_.GetWeakPtr();
1602 }
1603
1604 void RenderWidgetHostViewMac::RemoveOverlayView() {
1605 if (overlay_view_) {
1606 overlay_view_->underlay_view_.reset();
1607 overlay_view_.reset();
1608 }
1609 }
1610
1611 bool RenderWidgetHostViewMac::GetLineBreakIndex( 1599 bool RenderWidgetHostViewMac::GetLineBreakIndex(
1612 const std::vector<gfx::Rect>& bounds, 1600 const std::vector<gfx::Rect>& bounds,
1613 const gfx::Range& range, 1601 const gfx::Range& range,
1614 size_t* line_break_point) { 1602 size_t* line_break_point) {
1615 DCHECK(line_break_point); 1603 DCHECK(line_break_point);
1616 if (range.start() >= bounds.size() || range.is_reversed() || range.is_empty()) 1604 if (range.start() >= bounds.size() || range.is_reversed() || range.is_empty())
1617 return false; 1605 return false;
1618 1606
1619 // We can't check line breaking completely from only rectangle array. Thus we 1607 // We can't check line breaking completely from only rectangle array. Thus we
1620 // assume the line breaking as the next character's y offset is larger than 1608 // assume the line breaking as the next character's y offset is larger than
(...skipping 591 matching lines...) Expand 10 before | Expand all | Expand 10 after
2212 RenderWidgetHostImpl::AcknowledgeBufferPresent(pending_swap_ack_->route_id, 2200 RenderWidgetHostImpl::AcknowledgeBufferPresent(pending_swap_ack_->route_id,
2213 pending_swap_ack_->gpu_host_id, 2201 pending_swap_ack_->gpu_host_id,
2214 ack_params); 2202 ack_params);
2215 pending_swap_ack_.reset(); 2203 pending_swap_ack_.reset();
2216 } 2204 }
2217 2205
2218 void RenderWidgetHostViewMac::PauseForPendingResizeOrRepaintsAndDraw() { 2206 void RenderWidgetHostViewMac::PauseForPendingResizeOrRepaintsAndDraw() {
2219 if (!render_widget_host_ || render_widget_host_->is_hidden()) 2207 if (!render_widget_host_ || render_widget_host_->is_hidden())
2220 return; 2208 return;
2221 2209
2222 // Pausing for the overlay/underlay view prevents the other one from receiving 2210 // Pausing for one view prevents others from receiving frames.
2223 // frames. This may lead to large delays, causing overlaps. 2211 // This may lead to large delays, causing overlaps. See crbug.com/352020.
2224 // See crbug.com/352020. 2212 if (!allow_pause_for_resize_or_repaint_)
2225 if (underlay_view_ || overlay_view_)
2226 return; 2213 return;
2227 2214
2228 // Ensure that all frames are acked before waiting for a frame to come in. 2215 // Ensure that all frames are acked before waiting for a frame to come in.
2229 // Note that we will draw a frame at the end of this function, so it is safe 2216 // Note that we will draw a frame at the end of this function, so it is safe
2230 // to ack a never-drawn frame here. 2217 // to ack a never-drawn frame here.
2231 SendPendingSwapAck(); 2218 SendPendingSwapAck();
2232 2219
2233 // Wait for a frame of the right size to come in. 2220 // Wait for a frame of the right size to come in.
2234 is_paused_for_resize_or_repaint_ = true; 2221 is_paused_for_resize_or_repaint_ = true;
2235 render_widget_host_->PauseForPendingResizeOrRepaints(); 2222 render_widget_host_->PauseForPendingResizeOrRepaints();
(...skipping 1745 matching lines...) Expand 10 before | Expand all | Expand 10 after
3981 3968
3982 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding 3969 // "-webkit-app-region: drag | no-drag" is implemented on Mac by excluding
3983 // regions that are not draggable. (See ControlRegionView in 3970 // regions that are not draggable. (See ControlRegionView in
3984 // native_app_window_cocoa.mm). This requires the render host view to be 3971 // native_app_window_cocoa.mm). This requires the render host view to be
3985 // draggable by default. 3972 // draggable by default.
3986 - (BOOL)mouseDownCanMoveWindow { 3973 - (BOOL)mouseDownCanMoveWindow {
3987 return YES; 3974 return YES;
3988 } 3975 }
3989 3976
3990 @end 3977 @end
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698