Reviewed by ap.
[WebKit-https.git] / WebCore / platform / qt / FontQt.cpp
1 /*
2  * Copyright (C) 2006 Dirk Mueller <mueller@kde.org>
3  * Copyright (C) 2006 Zack Rusin <zack@kde.org>
4  * Copyright (C) 2006 Simon Hausmann <hausmann@kde.org>
5  * Copyright (C) 2006 Allan Sandfeld Jensen <sandfeld@kde.org>
6  * 
7  * All rights reserved.
8  *
9  * Redistribution and use in source and binary forms, with or without
10  * modification, are permitted provided that the following conditions
11  * are met:
12  * 1. Redistributions of source code must retain the above copyright
13  *    notice, this list of conditions and the following disclaimer.
14  * 2. Redistributions in binary form must reproduce the above copyright
15  *    notice, this list of conditions and the following disclaimer in the
16  *    documentation and/or other materials provided with the distribution.
17  *
18  * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
19  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
21  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
22  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
25  * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
26  * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */
30
31 #include "config.h"
32 #include "Font.h"
33
34 #include "FontData.h"
35 #include "GraphicsContext.h"
36
37 #include <QPainter>
38 #include <QDebug>
39
40 namespace WebCore {
41
42 Font::operator QFont() const
43 {
44     Q_ASSERT(primaryFont() != 0);
45     return primaryFont()->platformData().font();
46 }
47
48 void Font::drawGlyphs(GraphicsContext* graphicsContext, const FontData* font, const GlyphBuffer& glyphBuffer,
49                       int from, int numGlyphs, const FloatPoint& point) const
50 {
51     QPainter& p = *graphicsContext->platformContext();
52
53     Color color = graphicsContext->pen().color();
54     p.setPen(QColor(color.red(), color.green(), color.blue()));
55     p.setFont(font->platformData().font());
56
57     QChar* buffer = reinterpret_cast<QChar*>(glyphBuffer.glyphs(from));
58     QString str = QString::fromRawData(buffer, numGlyphs);
59
60     p.drawText(QPointF(point.x(),point.y()), str);
61 }
62
63 void Font::drawComplexText(GraphicsContext* ctx, const TextRun& run, const TextStyle&, const FloatPoint& point) const
64 {
65     // ### style, run.from()/length() cut-off
66     ctx->platformContext()->drawText(point.x(),
67                                      point.y(),
68                                      QString::fromRawData(reinterpret_cast<const QChar*>(run.characters() + run.from()), run.length()));
69 }
70
71 float Font::floatWidthForComplexText(const TextRun& run, const TextStyle&) const
72 {
73     // ### style
74     QFontMetricsF metrics(primaryFont()->m_font.font());
75     return metrics.width(QString::fromRawData(reinterpret_cast<const QChar*>(run.characters() + run.from()), run.length()));
76 }
77
78 }
79
80 // vim: ts=4 sw=4 et