1/*
2 * Copyright (C) 2007 Kevin Watters, Kevin Ollivier.  All rights reserved.
3 *
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions
6 * are met:
7 * 1. Redistributions of source code must retain the above copyright
8 *    notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright
10 *    notice, this list of conditions and the following disclaimer in the
11 *    documentation and/or other materials provided with the distribution.
12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */
25
26#include "config.h"
27#include "FloatSize.h"
28#include "GlyphBuffer.h"
29#include "GraphicsContext.h"
30#include "SimpleFontData.h"
31#include <wtf/Vector.h>
32
33#include <ApplicationServices/ApplicationServices.h>
34
35#include <dlfcn.h>
36
37#include <wx/defs.h>
38#include <wx/dcclient.h>
39#include <wx/dcgraph.h>
40#include <wx/gdicmn.h>
41
42namespace WebCore {
43
44void drawTextWithSpacing(GraphicsContext* graphicsContext, const SimpleFontData* font, const wxColour& color, const GlyphBuffer& glyphBuffer, int from, int numGlyphs, const FloatPoint& point)
45{
46    graphicsContext->save();
47
48    wxGCDC* dc = static_cast<wxGCDC*>(graphicsContext->platformContext());
49
50    wxFont* wxfont = font->getWxFont();
51    graphicsContext->setFillColor(graphicsContext->fillColor(), ColorSpaceDeviceRGB);
52
53    CGContextRef cgContext = static_cast<CGContextRef>(dc->GetGraphicsContext()->GetNativeContext());
54
55    CGFontRef cgFont = font->platformData().cgFont();
56
57    CGContextSetFont(cgContext, cgFont);
58
59    CGContextSetFontSize(cgContext, wxfont->GetPointSize());
60
61    CGFloat red, green, blue, alpha;
62    graphicsContext->fillColor().getRGBA(red, green, blue, alpha);
63    CGContextSetRGBFillColor(cgContext, red, green, blue, alpha);
64
65    CGAffineTransform matrix = CGAffineTransformIdentity;
66    matrix.b = -matrix.b;
67    matrix.d = -matrix.d;
68
69    CGContextSetTextMatrix(cgContext, matrix);
70
71    CGContextSetTextPosition(cgContext, point.x(), point.y());
72
73    CGContextShowGlyphsWithAdvances(cgContext, glyphBuffer.glyphs(from), glyphBuffer.advances(from), numGlyphs);
74
75    if (cgFont)
76        CGFontRelease(cgFont);
77    graphicsContext->restore();
78}
79
80}
81