OLD | NEW |
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 "ui/views/widget/desktop_aura/x11_whole_screen_move_loop.h" | 5 #include "ui/views/widget/desktop_aura/x11_whole_screen_move_loop.h" |
6 | 6 |
7 #include <X11/Xlib.h> | 7 #include <X11/Xlib.h> |
8 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. | 8 // Get rid of a macro from Xlib.h that conflicts with Aura's RootWindow class. |
9 #undef RootWindow | 9 #undef RootWindow |
10 | 10 |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 image->SetImage(drag_image_); | 356 image->SetImage(drag_image_); |
357 image->SetBounds(0, 0, drag_image_.width(), drag_image_.height()); | 357 image->SetBounds(0, 0, drag_image_.width(), drag_image_.height()); |
358 widget->SetContentsView(image); | 358 widget->SetContentsView(image); |
359 widget->Show(); | 359 widget->Show(); |
360 widget->GetNativeWindow()->layer()->SetFillsBoundsOpaquely(false); | 360 widget->GetNativeWindow()->layer()->SetFillsBoundsOpaquely(false); |
361 | 361 |
362 drag_widget_.reset(widget); | 362 drag_widget_.reset(widget); |
363 } | 363 } |
364 | 364 |
365 bool X11WholeScreenMoveLoop::CheckIfIconValid() { | 365 bool X11WholeScreenMoveLoop::CheckIfIconValid() { |
366 // TODO(erg): I've tried at least five different strategies for trying to | 366 // Because we need a GL context per window, we do a quick check so that we |
367 // build a mask based off the alpha channel. While all of them have worked, | 367 // don't make another context if the window would just be displaying a mostly |
368 // none of them have been performant and introduced multiple second | 368 // transparent image. |
369 // delays. (I spent a day getting a rectangle segmentation algorithm polished | |
370 // here...and then found that even through I had the rectangle extraction | |
371 // down to mere milliseconds, SkRegion still fell over on the number of | |
372 // rectangles.) | |
373 // | |
374 // Creating a mask here near instantaneously should be possible, as GTK does | |
375 // it, but I've blown days on this and I'm punting now. | |
376 | |
377 const SkBitmap* in_bitmap = drag_image_.bitmap(); | 369 const SkBitmap* in_bitmap = drag_image_.bitmap(); |
378 SkAutoLockPixels in_lock(*in_bitmap); | 370 SkAutoLockPixels in_lock(*in_bitmap); |
379 for (int y = 0; y < in_bitmap->height(); ++y) { | 371 for (int y = 0; y < in_bitmap->height(); ++y) { |
380 uint32* in_row = in_bitmap->getAddr32(0, y); | 372 uint32* in_row = in_bitmap->getAddr32(0, y); |
381 | 373 |
382 for (int x = 0; x < in_bitmap->width(); ++x) { | 374 for (int x = 0; x < in_bitmap->width(); ++x) { |
383 if (SkColorGetA(in_row[x]) > kMinAlpha) | 375 if (SkColorGetA(in_row[x]) > kMinAlpha) |
384 return true; | 376 return true; |
385 } | 377 } |
386 } | 378 } |
387 | 379 |
388 return false; | 380 return false; |
389 } | 381 } |
390 | 382 |
391 } // namespace views | 383 } // namespace views |
OLD | NEW |