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

Unified Diff: content/browser/aura/software_output_device_x11.cc

Issue 130773002: Fix support for 16 and 8 bit depth X11 displays in software compositor. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/aura/software_output_device_x11.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « content/browser/aura/software_output_device_x11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698