18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2007 Kevin Ollivier <kevino@theolliviers.com> 38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "GraphicsContext.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 295e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block#include "AffineTransform.h" 308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatRect.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Font.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IntRect.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "NotImplemented.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wtf/MathExtras.h> 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <math.h> 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <stdio.h> 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/defs.h> 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/window.h> 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/dcclient.h> 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/dcgraph.h> 438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <wx/graphics.h> 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if __WXMAC__ 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <Carbon/Carbon.h> 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif __WXMSW__ 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <windows.h> 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint getWxCompositingOperation(CompositeOperator op, bool hasAlpha) 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Add support for more operators. 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (op == CompositeSourceOver && !hasAlpha) 578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project op = CompositeCopy; 588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int function; 608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project switch (op) { 618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CompositeClear: 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function = wxCLEAR; 638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project case CompositeCopy: 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function = wxCOPY; 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project break; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project default: 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project function = wxCOPY; 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return function; 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic int strokeStyleToWxPenStyle(int p) 738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (p == SolidStroke) 758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wxSOLID; 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (p == DottedStroke) 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wxDOT; 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (p == DashedStroke) 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wxLONG_DASH; 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (p == NoStroke) 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wxTRANSPARENT; 828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return wxSOLID; 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectclass GraphicsContextPlatformPrivate { 878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectpublic: 888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GraphicsContextPlatformPrivate(); 898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ~GraphicsContextPlatformPrivate(); 908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGCDC* context; 938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxWindowDC* context; 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project int mswDCStateID; 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxRegion gtkCurrentClipRgn; 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxRegion gtkPaintClipRgn; 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project}; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectGraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate() : 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context(0), 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project mswDCStateID(0), 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gtkCurrentClipRgn(wxRegion()), 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gtkPaintClipRgn(wxRegion()) 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectGraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate() 1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 114f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::platformInit(PlatformGraphicsContext* context) 115f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch{ 116f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch m_data = new GraphicsContextPlatformPrivate; 1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project setPaintingDisabled(!context); 118f05b935882198ccf7d81675736e3aeb089c5113aBen Murdoch 1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context) { 1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // Make sure the context starts in sync with our state. 121a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch setPlatformFillColor(fillColor(), ColorSpaceDeviceRGB); 122a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch setPlatformStrokeColor(strokeColor(), ColorSpaceDeviceRGB); 1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context = (wxGCDC*)context; 1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context = (wxWindowDC*)context; 1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 131f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::platformDestroy() 1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete m_data; 1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectPlatformGraphicsContext* GraphicsContext::platformContext() const 1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return (PlatformGraphicsContext*)m_data->context; 1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::savePlatformState() 1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc->PushState(); 1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // when everything is working with USE_WXGC, we can remove this 1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #if __WXMAC__ 1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CGContextRef context; 1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (gc) 1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context = (CGContextRef)gc->GetNativeContext(); 1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context) 1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CGContextSaveGState(context); 1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #elif __WXMSW__ 1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HDC dc = (HDC)m_data->context->GetHDC(); 1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->mswDCStateID = ::SaveDC(dc); 1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #elif __WXGTK__ 1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->gtkCurrentClipRgn = m_data->context->m_currentClippingRegion; 1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->gtkPaintClipRgn = m_data->context->m_paintClippingRegion; 1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #endif 1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // __WXMAC__ 1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::restorePlatformState() 1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project { 1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc->PopState(); 1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #if __WXMAC__ 1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CGContextRef context; 1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (gc) 1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project context = (CGContextRef)gc->GetNativeContext(); 1818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (context) 1828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project CGContextRestoreGState(context); 1838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #elif __WXMSW__ 1848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HDC dc = (HDC)m_data->context->GetHDC(); 1858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project ::RestoreDC(dc, m_data->mswDCStateID); 1868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #elif __WXGTK__ 1878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->m_currentClippingRegion = m_data->gtkCurrentClipRgn; 1888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->m_paintClippingRegion = m_data->gtkPaintClipRgn; 1898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project #endif 1908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif // USE_WXGC 1928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 1938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Draws a filled rectangle with a stroked border. 1968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::drawRect(const IntRect& rect) 1978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 1998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 2028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawRectangle(rect.x(), rect.y(), rect.width(), rect.height()); 2038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This is only used to draw borders. 2068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::drawLine(const IntPoint& point1, const IntPoint& point2) 2078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatPoint p1 = point1; 2128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatPoint p2 = point2; 2138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 2158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawLine(point1.x(), point1.y(), point2.x(), point2.y()); 2168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// This method is only used to draw the little circles used in lists. 2198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::drawEllipse(const IntRect& rect) 2208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 2258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawEllipse(rect.x(), rect.y(), rect.width(), rect.height()); 2268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::strokeArc(const IntRect& rect, int startAngle, int angleSpan) 2298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 2348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawEllipticArc(rect.x(), rect.y(), rect.width(), rect.height(), startAngle, angleSpan); 2358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::drawConvexPolygon(size_t npoints, const FloatPoint* points, bool shouldAntialias) 2388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (npoints <= 1) 2438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxPoint* polygon = new wxPoint[npoints]; 2468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project for (size_t i = 0; i < npoints; i++) 2478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project polygon[i] = wxPoint(points[i].x(), points[i].y()); 2488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 2498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawPolygon((int)npoints, polygon); 2508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project delete [] polygon; 2518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2530617145a89917ae7735fe1c9538688ab9a577df5Kristian Monsenvoid GraphicsContext::clipConvexPolygon(size_t numPoints, const FloatPoint* points, bool antialiased) 254ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block{ 255ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (paintingDisabled()) 256ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return; 257ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 258ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block if (numPoints <= 1) 259ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block return; 260ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 261ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block // FIXME: IMPLEMENT!! 262ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block} 263ca9cb53ed1119a3fd98fafa0972ffeb56dee1c24Steve Block 264643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsContext::fillRect(const FloatRect& rect, const Color& color, ColorSpace colorSpace) 2658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 269e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke savePlatformState(); 270e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 2718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(*wxTRANSPARENT_PEN); 2728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetBrush(wxBrush(color)); 2738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawRectangle(rect.x(), rect.y(), rect.width(), rect.height()); 274e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke 275e458d70a0d18538346f41b503114c9ebe6b2ce12Leon Clarke restorePlatformState(); 2768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsContext::fillRoundedRect(const IntRect& rect, const IntSize& topLeft, const IntSize& topRight, const IntSize& bottomLeft, const IntSize& bottomRight, const Color& color, ColorSpace colorSpace) 2798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2864576aa36e9a9671459299c7963ac95aa94beaea9Shimeng (Simon) Wangvoid GraphicsContext::drawFocusRing(const Path& path, int width, int offset, const Color& color) 287d0825bca7fe65beaee391d30da42e937db621564Steve Block{ 288d0825bca7fe65beaee391d30da42e937db621564Steve Block // FIXME: implement 289d0825bca7fe65beaee391d30da42e937db621564Steve Block} 290d0825bca7fe65beaee391d30da42e937db621564Steve Block 291d0825bca7fe65beaee391d30da42e937db621564Steve Blockvoid GraphicsContext::drawFocusRing(const Vector<IntRect>& rects, int width, int offset, const Color& color) 2928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 2938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 2948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 2958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 2978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 2988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 2998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::clip(const FloatRect& r) 3008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxWindowDC* windc = dynamic_cast<wxWindowDC*>(m_data->context); 3028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxPoint pos(0, 0); 3038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (windc) { 305635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if !defined(__WXGTK__) || wxCHECK_VERSION(2,9,0) 3068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxWindow* window = windc->GetWindow(); 3078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else 3088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxWindow* window = windc->m_owner; 3098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (window) { 3118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxWindow* parent = window->GetParent(); 3128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // we need to convert from WebView "global" to WebFrame "local" coords. 3138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: We only want to go to the top WebView. 3148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project while (parent) { 3158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project pos += window->GetPosition(); 3168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project parent = parent->GetParent(); 3178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetClippingRegion(r.x() - pos.x, r.y() - pos.y, r.width() + pos.x, r.height() + pos.y); 3228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::clipOut(const Path&) 3258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 3278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::clipOut(const IntRect&) 3308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 3328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 334f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::clipPath(const Path&, WindRule) 335dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 336dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block notImplemented(); 337dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 338dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 33981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GraphicsContext::drawLineForText(const FloatPoint& origin, float width, bool printing) 3408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 3428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 3438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch FloatPoint endPoint = origin + FloatSize(width, 0); 3458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), strokeThickness(), wxSOLID)); 3468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawLine(origin.x(), origin.y(), endPoint.x(), endPoint.y()); 3478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 34981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GraphicsContext::drawLineForTextChecking(const FloatPoint& origin, float width, TextCheckingLineStyle style) 3508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3515ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen switch (style) { 3525ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen case TextCheckingSpellingLineStyle: 3538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(*wxRED, 2, wxLONG_DASH)); 3545ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen break; 3555ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen case TextCheckingGrammarLineStyle: 3565ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen m_data->context->SetPen(wxPen(*wxGREEN, 2, wxLONG_DASH)); 3575ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen break; 3585ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen default: 3595ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen return; 3605ddde30071f639962dd557c453f2ad01f8f0fd00Kristian Monsen } 3618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->DrawLine(origin.x(), origin.y(), origin.x() + width, origin.y()); 3628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::clip(const Path&) 3658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 3678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 369cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Blockvoid GraphicsContext::canvasClip(const Path& path) 370cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block{ 371cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block clip(path); 372cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block} 373cac0f67c402d107cdb10971b95719e2ff9c7c76bSteve Block 3748a0914b749bbe7da7768e07a7db5c6d4bb09472bSteve BlockAffineTransform GraphicsContext::getCTM() const 3755e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 376dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(WXGC) 377dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 378dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (gc) { 379dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wxGraphicsMatrix matrix = gc->GetTransform(); 380dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block double a, b, c, d, e, f; 381dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block matrix.Get(&a, &b, &c, &d, &e, &f); 382dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block return AffineTransform(a, b, c, d, e, f); 383dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block } 384dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 3855e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return AffineTransform(); 3865e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 3875e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 3888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::translate(float tx, float ty) 3898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 3908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 3918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) { 3928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 3938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc->Translate(tx, ty); 3948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 3958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 3968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 3978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 3988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::rotate(float angle) 3998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 4018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) { 4028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 4038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc->Rotate(angle); 4048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::scale(const FloatSize& scale) 4098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#if USE(WXGC) 4118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) { 4128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 4138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project gc->Scale(scale.width(), scale.height()); 4148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project } 4158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif 4168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4192daae5fd11344eaa88a0d92b0f6d65f8d2255c00Ben MurdochFloatRect GraphicsContext::roundToDevicePixels(const FloatRect& frect, RoundingMode) 4208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project FloatRect result; 4228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxCoord x = (wxCoord)frect.x(); 4248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project wxCoord y = (wxCoord)frect.y(); 4258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x = m_data->context->LogicalToDeviceX(x); 4278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y = m_data->context->LogicalToDeviceY(y); 4288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.setX((float)x); 4298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.setY((float)y); 4308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x = (wxCoord)frect.width(); 4318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y = (wxCoord)frect.height(); 4328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project x = m_data->context->LogicalToDeviceXRel(x); 4338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project y = m_data->context->LogicalToDeviceYRel(y); 4348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.setWidth((float)x); 4358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project result.setHeight((float)y); 4368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return result; 4378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::setURLForRect(const KURL&, const IntRect&) 4408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 4428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 444f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::setPlatformCompositeOperation(CompositeOperator op) 4458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 447635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project { 448635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#if wxCHECK_VERSION(2,9,0) 449635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project m_data->context->SetLogicalFunction(static_cast<wxRasterOperationMode>(getWxCompositingOperation(op, false))); 450635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#else 4518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetLogicalFunction(getWxCompositingOperation(op, false)); 452635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project#endif 453635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Project } 4548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 456643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsContext::setPlatformStrokeColor(const Color& color, ColorSpace colorSpace) 4578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 4598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 4628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(color, strokeThickness(), strokeStyleToWxPenStyle(strokeStyle()))); 4638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::setPlatformStrokeThickness(float thickness) 4668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 4688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 4718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetPen(wxPen(strokeColor(), thickness, strokeStyleToWxPenStyle(strokeStyle()))); 4728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 475643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsContext::setPlatformFillColor(const Color& color, ColorSpace colorSpace) 4768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 4778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 4788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 4798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (m_data->context) 4818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project m_data->context->SetBrush(wxBrush(color)); 4828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 4838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 4845e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Blockvoid GraphicsContext::concatCTM(const AffineTransform& transform) 4855e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block{ 4865e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block if (paintingDisabled()) 4875e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return; 4885e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 489dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(WXGC) 490dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 491dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (gc) 492dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block gc->ConcatTransform(transform); 493dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 4945e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block return; 4955e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block} 4965e2bc6953fe6923165b8a5d7679939693a1d58d6Steve Block 49781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdochvoid GraphicsContext::setCTM(const AffineTransform& transform) 49881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch{ 49981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (paintingDisabled()) 50081bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 50181bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 50281bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#if USE(WXGC) 50381bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 50481bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch if (gc) 50581bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch gc->SetTransform(transform); 50681bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch#endif 50781bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch return; 50881bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch} 50981bc750723a18f21cd17d1b173cd2a4dda9cea6eBen Murdoch 510635860845790a19bf50bbc51ba8fb66a96dde068The Android Open Source Projectvoid GraphicsContext::setPlatformShouldAntialias(bool enable) 5118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 5138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project notImplemented(); 5158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::setImageInterpolationQuality(InterpolationQuality) 5188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectInterpolationQuality GraphicsContext::imageInterpolationQuality() const 5228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return InterpolationDefault; 5248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 526f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::fillPath(const Path& path) 5278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 528dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(WXGC) 529dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 530dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (gc) 5312fc2651226baac27029e38c9d6ef883fa32084dbSteve Block gc->FillPath(*path.platformPath()); 532dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 5338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 535f05b935882198ccf7d81675736e3aeb089c5113aBen Murdochvoid GraphicsContext::strokePath(const Path& path) 5368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 537dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#if USE(WXGC) 538dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block wxGraphicsContext* gc = m_data->context->GetGraphicsContext(); 539dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block if (gc) 5402fc2651226baac27029e38c9d6ef883fa32084dbSteve Block gc->StrokePath(*path.platformPath()); 541dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block#endif 5428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 5448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectvoid GraphicsContext::fillRect(const FloatRect& rect) 5458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 5468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project if (paintingDisabled()) 5478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return; 5488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 5498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 55006ea8e899e48f1f2f396b70e63fae369f2f23232Kristian Monsenvoid GraphicsContext::setPlatformShadow(FloatSize const&, float, Color const&, ColorSpace) 551231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 552231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 553231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 554231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 555231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::clearPlatformShadow() 556231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 557231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 558231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 559231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 560231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::beginTransparencyLayer(float) 561231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 562231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 563231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 564231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 565231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::endTransparencyLayer() 566231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 567231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 568231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 569231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 570231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::clearRect(const FloatRect&) 571231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 572231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 573231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 574231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 575231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::strokeRect(const FloatRect&, float) 576231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 577231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 578231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 579231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 580231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::setLineCap(LineCap) 581231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 582231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 583231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 584231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 585dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Blockvoid GraphicsContext::setLineDash(const DashArray&, float dashOffset) 586dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block{ 587dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block notImplemented(); 588dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block} 589dcc8cf2e65d1aa555cce12431a16547e66b469eeSteve Block 590231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::setLineJoin(LineJoin) 591231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 592231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 593231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 594231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 595231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::setMiterLimit(float) 596231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 597231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 598231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 599231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 600231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::setAlpha(float) 601231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 602231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 603231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 604231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 605231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Blockvoid GraphicsContext::addInnerRoundedRectClip(const IntRect& rect, int thickness) 606231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block{ 607231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block notImplemented(); 608231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block} 609231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block 610d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINDOWS) 611643ca7872b450ea4efacab6188849e5aac2ba161Steve BlockHDC GraphicsContext::getWindowsContext(const IntRect& dstRect, bool supportAlphaBlend, bool mayCreateBitmap) 612643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 613643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (dstRect.isEmpty()) 614643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; 615643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 616643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Create a bitmap DC in which to draw. 617643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BITMAPINFO bitmapInfo; 618643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER); 619643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biWidth = dstRect.width(); 620643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biHeight = dstRect.height(); 621643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biPlanes = 1; 622643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biBitCount = 32; 623643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biCompression = BI_RGB; 624643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biSizeImage = 0; 625643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biXPelsPerMeter = 0; 626643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biYPelsPerMeter = 0; 627643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biClrUsed = 0; 628643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bitmapInfo.bmiHeader.biClrImportant = 0; 629643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 630643ca7872b450ea4efacab6188849e5aac2ba161Steve Block void* pixels = 0; 631643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HBITMAP bitmap = ::CreateDIBSection(0, &bitmapInfo, DIB_RGB_COLORS, &pixels, 0, 0); 632643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!bitmap) 633643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return 0; 634643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 635643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HDC displayDC = ::GetDC(0); 636643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HDC bitmapDC = ::CreateCompatibleDC(displayDC); 637643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ::ReleaseDC(0, displayDC); 638643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 639643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ::SelectObject(bitmapDC, bitmap); 640643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 641643ca7872b450ea4efacab6188849e5aac2ba161Steve Block // Fill our buffer with clear if we're going to alpha blend. 642643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (supportAlphaBlend) { 643643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BITMAP bmpInfo; 644643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GetObject(bitmap, sizeof(bmpInfo), &bmpInfo); 645643ca7872b450ea4efacab6188849e5aac2ba161Steve Block int bufferSize = bmpInfo.bmWidthBytes * bmpInfo.bmHeight; 646643ca7872b450ea4efacab6188849e5aac2ba161Steve Block memset(bmpInfo.bmBits, 0, bufferSize); 647643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 648643ca7872b450ea4efacab6188849e5aac2ba161Steve Block return bitmapDC; 649643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 650643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 651643ca7872b450ea4efacab6188849e5aac2ba161Steve Blockvoid GraphicsContext::releaseWindowsContext(HDC hdc, const IntRect& dstRect, bool supportAlphaBlend, bool mayCreateBitmap) 652643ca7872b450ea4efacab6188849e5aac2ba161Steve Block{ 653643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (hdc) { 654643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 655643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (!dstRect.isEmpty()) { 656643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 657643ca7872b450ea4efacab6188849e5aac2ba161Steve Block HBITMAP bitmap = static_cast<HBITMAP>(GetCurrentObject(hdc, OBJ_BITMAP)); 658643ca7872b450ea4efacab6188849e5aac2ba161Steve Block BITMAP info; 659643ca7872b450ea4efacab6188849e5aac2ba161Steve Block GetObject(bitmap, sizeof(info), &info); 660643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ASSERT(info.bmBitsPixel == 32); 661643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 662643ca7872b450ea4efacab6188849e5aac2ba161Steve Block wxBitmap bmp; 663643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bmp.SetHBITMAP(bitmap); 664643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#if !wxCHECK_VERSION(2,9,0) 665643ca7872b450ea4efacab6188849e5aac2ba161Steve Block if (supportAlphaBlend) 666643ca7872b450ea4efacab6188849e5aac2ba161Steve Block bmp.UseAlpha(); 667643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 668643ca7872b450ea4efacab6188849e5aac2ba161Steve Block m_data->context->DrawBitmap(bmp, dstRect.x(), dstRect.y(), supportAlphaBlend); 669643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 670643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ::DeleteObject(bitmap); 671643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 672643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 673643ca7872b450ea4efacab6188849e5aac2ba161Steve Block ::DeleteDC(hdc); 674643ca7872b450ea4efacab6188849e5aac2ba161Steve Block } 675643ca7872b450ea4efacab6188849e5aac2ba161Steve Block} 676643ca7872b450ea4efacab6188849e5aac2ba161Steve Block#endif 677643ca7872b450ea4efacab6188849e5aac2ba161Steve Block 6788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 679