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

Side by Side Diff: chrome/browser/renderer_host/render_widget_host_view_views.cc

Issue 6261019: Make a hole only as big as is necessary. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Paint hole early, and sanitize invalid_rect_ Created 9 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/renderer_host/render_widget_host_view_views.h" 5 #include "chrome/browser/renderer_host/render_widget_host_view_views.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 9
10 #include "app/l10n_util.h" 10 #include "app/l10n_util.h"
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 // Paint(scroll_rect) above. 275 // Paint(scroll_rect) above.
276 gfx::Rect rect = copy_rects[i].Subtract(scroll_rect); 276 gfx::Rect rect = copy_rects[i].Subtract(scroll_rect);
277 if (rect.IsEmpty()) 277 if (rect.IsEmpty())
278 continue; 278 continue;
279 279
280 if (about_to_validate_and_paint_) 280 if (about_to_validate_and_paint_)
281 invalid_rect_ = invalid_rect_.Union(rect); 281 invalid_rect_ = invalid_rect_.Union(rect);
282 else 282 else
283 SchedulePaint(rect, false); 283 SchedulePaint(rect, false);
284 } 284 }
285 invalid_rect_ = invalid_rect_.Intersect(bounds());
sadrul 2011/01/21 16:36:19 We need to either sanitize invalid_rect_ here, or
285 } 286 }
286 287
287 void RenderWidgetHostViewViews::RenderViewGone(base::TerminationStatus status, 288 void RenderWidgetHostViewViews::RenderViewGone(base::TerminationStatus status,
288 int error_code) { 289 int error_code) {
289 GetRenderWidgetHost()->ViewDestroyed(); 290 GetRenderWidgetHost()->ViewDestroyed();
290 Destroy(); 291 Destroy();
291 } 292 }
292 293
293 void RenderWidgetHostViewViews::Destroy() { 294 void RenderWidgetHostViewViews::Destroy() {
294 // host_'s destruction brought us here, null it out so we don't use it 295 // host_'s destruction brought us here, null it out so we don't use it
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
351 } 352 }
352 353
353 void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) { 354 void RenderWidgetHostViewViews::Paint(gfx::Canvas* canvas) {
354 if (is_hidden_) { 355 if (is_hidden_) {
355 return; 356 return;
356 } 357 }
357 358
358 // Paint a "hole" in the canvas so that the render of the web page is on 359 // Paint a "hole" in the canvas so that the render of the web page is on
359 // top of whatever else has already been painted in the views hierarchy. 360 // top of whatever else has already been painted in the views hierarchy.
360 // Later views might still get to paint on top. 361 // Later views might still get to paint on top.
361 canvas->FillRectInt(SK_ColorBLACK, 0, 0, kMaxWindowWidth, kMaxWindowHeight, 362 canvas->FillRectInt(SK_ColorBLACK, 0, 0,
363 bounds().width(), bounds().height(),
362 SkXfermode::kClear_Mode); 364 SkXfermode::kClear_Mode);
363 365
364 // Don't do any painting if the GPU process is rendering directly 366 // Don't do any painting if the GPU process is rendering directly
365 // into the View. 367 // into the View.
366 RenderWidgetHost* render_widget_host = GetRenderWidgetHost(); 368 RenderWidgetHost* render_widget_host = GetRenderWidgetHost();
367 if (render_widget_host->is_accelerated_compositing_active()) { 369 if (render_widget_host->is_accelerated_compositing_active()) {
368 return; 370 return;
369 } 371 }
370 372
371 GdkWindow* window = GetInnerNativeView()->window; 373 GdkWindow* window = GetInnerNativeView()->window;
(...skipping 394 matching lines...) Expand 10 before | Expand all | Expand 10 after
766 } 768 }
767 769
768 // static 770 // static
769 RenderWidgetHostView* 771 RenderWidgetHostView*
770 RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView( 772 RenderWidgetHostView::GetRenderWidgetHostViewFromNativeView(
771 gfx::NativeView widget) { 773 gfx::NativeView widget) {
772 gpointer user_data = g_object_get_data(G_OBJECT(widget), 774 gpointer user_data = g_object_get_data(G_OBJECT(widget),
773 kRenderWidgetHostViewKey); 775 kRenderWidgetHostViewKey);
774 return reinterpret_cast<RenderWidgetHostView*>(user_data); 776 return reinterpret_cast<RenderWidgetHostView*>(user_data);
775 } 777 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698