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

Side by Side Diff: chrome/browser/ui/gtk/tabs/dragged_view_gtk.cc

Issue 9359052: GTK: Closing in on being completely GSEALed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 10 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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/ui/gtk/tabs/dragged_view_gtk.h" 5 #include "chrome/browser/ui/gtk/tabs/dragged_view_gtk.h"
6 6
7 #include <gdk/gdk.h> 7 #include <gdk/gdk.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 10
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 attached_ = true; 136 attached_ = true;
137 parent_window_width_ = window_width; 137 parent_window_width_ = window_width;
138 normal_width_ = normal_width; 138 normal_width_ = normal_width;
139 mini_width_ = mini_width; 139 mini_width_ = mini_width;
140 140
141 int dragged_tab_width = 141 int dragged_tab_width =
142 drag_data_->GetSourceTabData()->mini_ ? mini_width : normal_width; 142 drag_data_->GetSourceTabData()->mini_ ? mini_width : normal_width;
143 143
144 Resize(dragged_tab_width); 144 Resize(dragged_tab_width);
145 145
146 if (ui::IsScreenComposited()) 146 if (ui::IsScreenComposited()) {
147 gdk_window_set_opacity(container_->window, kOpaqueAlpha); 147 GdkWindow* gdk_window = gtk_widget_get_window(container_);
148 gdk_window_set_opacity(gdk_window, kOpaqueAlpha);
149 }
148 } 150 }
149 151
150 void DraggedViewGtk::Resize(int width) { 152 void DraggedViewGtk::Resize(int width) {
151 attached_tab_size_.set_width(width); 153 attached_tab_size_.set_width(width);
152 ResizeContainer(); 154 ResizeContainer();
153 } 155 }
154 156
155 void DraggedViewGtk::Detach() { 157 void DraggedViewGtk::Detach() {
156 attached_ = false; 158 attached_ = false;
157 ResizeContainer(); 159 ResizeContainer();
158 160
159 if (ui::IsScreenComposited()) 161 if (ui::IsScreenComposited()) {
160 gdk_window_set_opacity(container_->window, kTransparentAlpha); 162 GdkWindow* gdk_window = gtk_widget_get_window(container_);
163 gdk_window_set_opacity(gdk_window, kTransparentAlpha);
164 }
161 } 165 }
162 166
163 void DraggedViewGtk::Update() { 167 void DraggedViewGtk::Update() {
164 gtk_widget_queue_draw(container_); 168 gtk_widget_queue_draw(container_);
165 } 169 }
166 170
167 int DraggedViewGtk::GetWidthInTabStripFromTo(int from, int to) { 171 int DraggedViewGtk::GetWidthInTabStripFromTo(int from, int to) {
168 DCHECK(from <= static_cast<int>(drag_data_->size())); 172 DCHECK(from <= static_cast<int>(drag_data_->size()));
169 DCHECK(to <= static_cast<int>(drag_data_->size())); 173 DCHECK(to <= static_cast<int>(drag_data_->size()));
170 174
(...skipping 29 matching lines...) Expand all
200 width -= 16; 204 width -= 16;
201 } 205 }
202 return width; 206 return width;
203 } 207 }
204 208
205 void DraggedViewGtk::AnimateToBounds(const gfx::Rect& bounds, 209 void DraggedViewGtk::AnimateToBounds(const gfx::Rect& bounds,
206 const base::Closure& callback) { 210 const base::Closure& callback) {
207 animation_callback_ = callback; 211 animation_callback_ = callback;
208 212
209 gint x, y, width, height; 213 gint x, y, width, height;
210 gdk_window_get_origin(container_->window, &x, &y); 214 GdkWindow* gdk_window = gtk_widget_get_window(container_);
211 gdk_window_get_geometry(container_->window, NULL, NULL, 215 gdk_window_get_origin(gdk_window, &x, &y);
216 gdk_window_get_geometry(gdk_window, NULL, NULL,
212 &width, &height, NULL); 217 &width, &height, NULL);
213 218
214 animation_start_bounds_ = gfx::Rect(x, y, width, height); 219 animation_start_bounds_ = gfx::Rect(x, y, width, height);
215 animation_end_bounds_ = bounds; 220 animation_end_bounds_ = bounds;
216 221
217 close_animation_.SetSlideDuration(kAnimateToBoundsDurationMs); 222 close_animation_.SetSlideDuration(kAnimateToBoundsDurationMs);
218 close_animation_.SetTweenType(ui::Tween::EASE_OUT); 223 close_animation_.SetTweenType(ui::Tween::EASE_OUT);
219 if (!close_animation_.IsShowing()) { 224 if (!close_animation_.IsShowing()) {
220 close_animation_.Reset(); 225 close_animation_.Reset();
221 close_animation_.Show(); 226 close_animation_.Show();
222 } 227 }
223 } 228 }
224 229
225 //////////////////////////////////////////////////////////////////////////////// 230 ////////////////////////////////////////////////////////////////////////////////
226 // DraggedViewGtk, ui::AnimationDelegate implementation: 231 // DraggedViewGtk, ui::AnimationDelegate implementation:
227 232
228 void DraggedViewGtk::AnimationProgressed(const ui::Animation* animation) { 233 void DraggedViewGtk::AnimationProgressed(const ui::Animation* animation) {
229 int delta_x = (animation_end_bounds_.x() - animation_start_bounds_.x()); 234 int delta_x = (animation_end_bounds_.x() - animation_start_bounds_.x());
230 int x = animation_start_bounds_.x() + 235 int x = animation_start_bounds_.x() +
231 static_cast<int>(delta_x * animation->GetCurrentValue()); 236 static_cast<int>(delta_x * animation->GetCurrentValue());
232 int y = animation_end_bounds_.y(); 237 int y = animation_end_bounds_.y();
233 gdk_window_move(container_->window, x, y); 238 GdkWindow* gdk_window = gtk_widget_get_window(container_);
239 gdk_window_move(gdk_window, x, y);
234 } 240 }
235 241
236 void DraggedViewGtk::AnimationEnded(const ui::Animation* animation) { 242 void DraggedViewGtk::AnimationEnded(const ui::Animation* animation) {
237 animation_callback_.Run(); 243 animation_callback_.Run();
238 } 244 }
239 245
240 void DraggedViewGtk::AnimationCanceled(const ui::Animation* animation) { 246 void DraggedViewGtk::AnimationCanceled(const ui::Animation* animation) {
241 AnimationEnded(animation); 247 AnimationEnded(animation);
242 } 248 }
243 249
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 GdkColormap* colormap = gdk_screen_get_rgba_colormap(screen); 312 GdkColormap* colormap = gdk_screen_get_rgba_colormap(screen);
307 313
308 // If rgba is not available, use rgb instead. 314 // If rgba is not available, use rgb instead.
309 if (!colormap) 315 if (!colormap)
310 colormap = gdk_screen_get_rgb_colormap(screen); 316 colormap = gdk_screen_get_rgb_colormap(screen);
311 317
312 gtk_widget_set_colormap(container_, colormap); 318 gtk_widget_set_colormap(container_, colormap);
313 } 319 }
314 320
315 void DraggedViewGtk::SetContainerTransparency() { 321 void DraggedViewGtk::SetContainerTransparency() {
316 cairo_t* cairo_context = gdk_cairo_create(container_->window); 322 cairo_t* cairo_context = gdk_cairo_create(gtk_widget_get_window(container_));
317 if (!cairo_context) 323 if (!cairo_context)
318 return; 324 return;
319 325
320 // Make the background of the dragged tab window fully transparent. All of 326 // Make the background of the dragged tab window fully transparent. All of
321 // the content of the window (child widgets) will be completely opaque. 327 // the content of the window (child widgets) will be completely opaque.
322 gfx::Size size = bounds().size(); 328 gfx::Size size = bounds().size();
323 cairo_scale(cairo_context, static_cast<double>(size.width()), 329 cairo_scale(cairo_context, static_cast<double>(size.width()),
324 static_cast<double>(size.height())); 330 static_cast<double>(size.height()));
325 cairo_set_source_rgba(cairo_context, 1.0f, 1.0f, 1.0f, 0.0f); 331 cairo_set_source_rgba(cairo_context, 1.0f, 1.0f, 1.0f, 0.0f);
326 cairo_set_operator(cairo_context, CAIRO_OPERATOR_SOURCE); 332 cairo_set_operator(cairo_context, CAIRO_OPERATOR_SOURCE);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 kDragFrameBorderSize); 371 kDragFrameBorderSize);
366 cairo_rectangle(cairo_context, 372 cairo_rectangle(cairo_context,
367 0, tab_height, 373 0, tab_height,
368 size.width(), size.height() - tab_height); 374 size.width(), size.height() - tab_height);
369 cairo_fill(cairo_context); 375 cairo_fill(cairo_context);
370 } 376 }
371 377
372 cairo_destroy(cairo_context); 378 cairo_destroy(cairo_context);
373 379
374 // Set the shape mask. 380 // Set the shape mask.
375 gdk_window_shape_combine_mask(container_->window, pixmap, 0, 0); 381 GdkWindow* gdk_window = gtk_widget_get_window(container_);
382 gdk_window_shape_combine_mask(gdk_window, pixmap, 0, 0);
376 g_object_unref(pixmap); 383 g_object_unref(pixmap);
377 } 384 }
378 385
379 gboolean DraggedViewGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event) { 386 gboolean DraggedViewGtk::OnExpose(GtkWidget* widget, GdkEventExpose* event) {
380 TRACE_EVENT0("ui::gtk", "DraggedViewGtk::OnExpose"); 387 TRACE_EVENT0("ui::gtk", "DraggedViewGtk::OnExpose");
381 388
382 if (ui::IsScreenComposited()) 389 if (ui::IsScreenComposited())
383 SetContainerTransparency(); 390 SetContainerTransparency();
384 else 391 else
385 SetContainerShapeMask(); 392 SetContainerShapeMask();
386 393
387 // Only used when not attached. 394 // Only used when not attached.
388 int tab_height = static_cast<int>( 395 int tab_height = static_cast<int>(
389 kScalingFactor * renderers_[drag_data_->source_tab_index()]->height()); 396 kScalingFactor * renderers_[drag_data_->source_tab_index()]->height());
390 397
391 GtkAllocation allocation; 398 GtkAllocation allocation;
392 gtk_widget_get_allocation(widget, &allocation); 399 gtk_widget_get_allocation(widget, &allocation);
393 400
394 // Draw the render area. 401 // Draw the render area.
395 BackingStore* backing_store = drag_data_->GetSourceWebContents()-> 402 BackingStore* backing_store = drag_data_->GetSourceWebContents()->
396 GetRenderViewHost()->GetBackingStore(false); 403 GetRenderViewHost()->GetBackingStore(false);
397 if (backing_store && !attached_) { 404 if (backing_store && !attached_) {
398 // This leaves room for the border. 405 // This leaves room for the border.
399 static_cast<BackingStoreGtk*>(backing_store)->PaintToRect( 406 static_cast<BackingStoreGtk*>(backing_store)->PaintToRect(
400 gfx::Rect(kDragFrameBorderSize, tab_height, 407 gfx::Rect(kDragFrameBorderSize, tab_height,
401 allocation.width - kTwiceDragFrameBorderSize, 408 allocation.width - kTwiceDragFrameBorderSize,
402 allocation.height - tab_height - 409 allocation.height - tab_height -
403 kDragFrameBorderSize), 410 kDragFrameBorderSize),
404 GDK_DRAWABLE(widget->window)); 411 GDK_DRAWABLE(gtk_widget_get_window(widget)));
405 } 412 }
406 413
407 cairo_t* cr = gdk_cairo_create(GDK_DRAWABLE(widget->window)); 414 cairo_t* cr = gdk_cairo_create(gtk_widget_get_window(widget));
408 // Draw the border. 415 // Draw the border.
409 if (!attached_) { 416 if (!attached_) {
410 cairo_set_line_width(cr, kDragFrameBorderSize); 417 cairo_set_line_width(cr, kDragFrameBorderSize);
411 cairo_set_source_rgb(cr, kDraggedTabBorderColor[0], 418 cairo_set_source_rgb(cr, kDraggedTabBorderColor[0],
412 kDraggedTabBorderColor[1], 419 kDraggedTabBorderColor[1],
413 kDraggedTabBorderColor[2]); 420 kDraggedTabBorderColor[2]);
414 // |offset| is the distance from the edge of the image to the middle of 421 // |offset| is the distance from the edge of the image to the middle of
415 // the border line. 422 // the border line.
416 double offset = kDragFrameBorderSize / 2.0 - 0.5; 423 double offset = kDragFrameBorderSize / 2.0 - 0.5;
417 double left_x = offset; 424 double left_x = offset;
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
460 if (!attached_) { 467 if (!attached_) {
461 paint_at = widget_width / kScalingFactor - 468 paint_at = widget_width / kScalingFactor -
462 GetWidthInTabStripFromTo(0, index + 1); 469 GetWidthInTabStripFromTo(0, index + 1);
463 } 470 }
464 } 471 }
465 472
466 cairo_set_source_surface(cr, surface, paint_at, 0); 473 cairo_set_source_surface(cr, surface, paint_at, 0);
467 cairo_paint(cr); 474 cairo_paint(cr);
468 cairo_surface_destroy(surface); 475 cairo_surface_destroy(surface);
469 } 476 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/gtk/tab_contents_container_gtk.cc ('k') | chrome/browser/ui/gtk/tabs/tab_renderer_gtk.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698