diff -r 000000000000 -r 6474c204b198 gfx/thebes/gfxQtNativeRenderer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/thebes/gfxQtNativeRenderer.cpp Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,49 @@ +/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 4 -*- + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "gfxQtNativeRenderer.h" +#include "gfxContext.h" +#include "gfxXlibSurface.h" + +nsresult +gfxQtNativeRenderer::Draw(gfxContext* ctx, nsIntSize size, + uint32_t flags, Screen* screen, Visual* visual) +{ + Display *dpy = DisplayOfScreen(screen); + bool isOpaque = (flags & DRAW_IS_OPAQUE) ? true : false; + int screenNumber = screen - ScreenOfDisplay(dpy, 0); + + if (!isOpaque) { + int depth = 32; + XVisualInfo vinfo; + int foundVisual = XMatchVisualInfo(dpy, screenNumber, + depth, TrueColor, + &vinfo); + if (!foundVisual) + return NS_ERROR_FAILURE; + + visual = vinfo.visual; + } + + nsRefPtr xsurf = + gfxXlibSurface::Create(screen, visual, + gfxIntSize(size.width, size.height)); + + if (!isOpaque) { + nsRefPtr tempCtx = new gfxContext(xsurf); + tempCtx->SetOperator(gfxContext::OPERATOR_CLEAR); + tempCtx->Paint(); + } + + nsresult rv = DrawWithXlib(xsurf->CairoSurface(), nsIntPoint(0, 0), nullptr, 0); + + if (NS_FAILED(rv)) + return rv; + + ctx->SetSource(xsurf); + ctx->Paint(); + + return rv; +}