| Index: content/browser/aura/software_output_device_x11.cc
|
| diff --git a/content/browser/aura/software_output_device_x11.cc b/content/browser/aura/software_output_device_x11.cc
|
| index abdb116ed34b5bd0cfe8c21773da4cb4c72bf232..51e54db4487dad26dd078b6cae7409bbad809879 100644
|
| --- a/content/browser/aura/software_output_device_x11.cc
|
| +++ b/content/browser/aura/software_output_device_x11.cc
|
| @@ -11,55 +11,27 @@
|
| #include "third_party/skia/include/core/SkBitmap.h"
|
| #include "third_party/skia/include/core/SkDevice.h"
|
| #include "ui/compositor/compositor.h"
|
| +#include "ui/gfx/x/x11_types.h"
|
|
|
| namespace content {
|
|
|
| SoftwareOutputDeviceX11::SoftwareOutputDeviceX11(ui::Compositor* compositor)
|
| - : compositor_(compositor),
|
| - display_(gfx::GetXDisplay()),
|
| - gc_(NULL),
|
| - image_(NULL) {
|
| + : compositor_(compositor), display_(gfx::GetXDisplay()), gc_(NULL) {
|
| // TODO(skaslev) Remove this when crbug.com/180702 is fixed.
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| gc_ = XCreateGC(display_, compositor_->widget(), 0, NULL);
|
| + if (!XGetWindowAttributes(display_, compositor_->widget(), &attributes_)) {
|
| + LOG(ERROR) << "XGetWindowAttributes failed for window "
|
| + << compositor_->widget();
|
| + return;
|
| + }
|
| }
|
|
|
| SoftwareOutputDeviceX11::~SoftwareOutputDeviceX11() {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| XFreeGC(display_, gc_);
|
| - ClearImage();
|
| -}
|
| -
|
| -void SoftwareOutputDeviceX11::ClearImage() {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - if (image_) {
|
| - // XDestroyImage deletes the data referenced by the image which
|
| - // is actually owned by the device_. So we have to reset data here.
|
| - image_->data = NULL;
|
| - XDestroyImage(image_);
|
| - image_ = NULL;
|
| - }
|
| -}
|
| -
|
| -void SoftwareOutputDeviceX11::Resize(gfx::Size viewport_size) {
|
| - DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
| -
|
| - cc::SoftwareOutputDevice::Resize(viewport_size);
|
| -
|
| - ClearImage();
|
| - if (!device_)
|
| - return;
|
| -
|
| - const SkBitmap& bitmap = device_->accessBitmap(false);
|
| - image_ = XCreateImage(display_, CopyFromParent,
|
| - DefaultDepth(display_, DefaultScreen(display_)),
|
| - ZPixmap, 0,
|
| - static_cast<char*>(bitmap.getPixels()),
|
| - viewport_size_.width(), viewport_size_.height(),
|
| - 32, 4 * viewport_size_.width());
|
| }
|
|
|
| void SoftwareOutputDeviceX11::EndPaint(cc::SoftwareFrameData* frame_data) {
|
| @@ -77,11 +49,22 @@ void SoftwareOutputDeviceX11::EndPaint(cc::SoftwareFrameData* frame_data) {
|
| if (rect.IsEmpty())
|
| return;
|
|
|
| - // TODO(skaslev): Maybe switch XShmPutImage since it's async.
|
| - XPutImage(display_, compositor_->widget(), gc_, image_,
|
| - rect.x(), rect.y(),
|
| - rect.x(), rect.y(),
|
| - rect.width(), rect.height());
|
| + // TODO(jbauman): Switch to XShmPutImage since it's async.
|
| + const SkBitmap& bitmap = device_->accessBitmap(false);
|
| + gfx::PutARGBImage(display_,
|
| + attributes_.visual,
|
| + attributes_.depth,
|
| + compositor_->widget(),
|
| + gc_,
|
| + static_cast<const uint8*>(bitmap.getPixels()),
|
| + viewport_size_.width(),
|
| + viewport_size_.height(),
|
| + rect.x(),
|
| + rect.y(),
|
| + rect.x(),
|
| + rect.y(),
|
| + rect.width(),
|
| + rect.height());
|
| }
|
|
|
| } // namespace content
|
|
|