| Index: Source/WebCore/platform/graphics/win/FontCGWin.cpp
|
| diff --git a/Source/WebCore/platform/graphics/win/FontCGWin.cpp b/Source/WebCore/platform/graphics/win/FontCGWin.cpp
|
| deleted file mode 100644
|
| index 170c9f07c7b147a461ac6d704eb3c0754d5658e4..0000000000000000000000000000000000000000
|
| --- a/Source/WebCore/platform/graphics/win/FontCGWin.cpp
|
| +++ /dev/null
|
| @@ -1,221 +0,0 @@
|
| -/*
|
| - * Copyright (C) 2006, 2007, 2008, 2009 Apple Inc. All rights reserved.
|
| - *
|
| - * Redistribution and use in source and binary forms, with or without
|
| - * modification, are permitted provided that the following conditions
|
| - * are met:
|
| - * 1. Redistributions of source code must retain the above copyright
|
| - * notice, this list of conditions and the following disclaimer.
|
| - * 2. Redistributions in binary form must reproduce the above copyright
|
| - * notice, this list of conditions and the following disclaimer in the
|
| - * documentation and/or other materials provided with the distribution.
|
| - *
|
| - * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
|
| - * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
|
| - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
| - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR
|
| - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
| - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
| - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
| - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
|
| - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
| - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
| - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
| - */
|
| -
|
| -#include "config.h"
|
| -#include "Font.h"
|
| -
|
| -#include "AffineTransform.h"
|
| -#include "FloatConversion.h"
|
| -#include "GlyphBuffer.h"
|
| -#include "GraphicsContext.h"
|
| -#include "IntRect.h"
|
| -#include "SimpleFontData.h"
|
| -#include "UniscribeController.h"
|
| -#include "WebCoreTextRenderer.h"
|
| -#include <ApplicationServices/ApplicationServices.h>
|
| -#include <WebKitSystemInterface/WebKitSystemInterface.h>
|
| -#include <wtf/MathExtras.h>
|
| -
|
| -namespace WebCore {
|
| -
|
| -const int syntheticObliqueAngle = 14;
|
| -
|
| -static inline CGFloat toCGFloat(FIXED f)
|
| -{
|
| - return f.value + f.fract / CGFloat(65536.0);
|
| -}
|
| -
|
| -static CGPathRef createPathForGlyph(HDC hdc, Glyph glyph)
|
| -{
|
| - CGMutablePathRef path = CGPathCreateMutable();
|
| -
|
| - static const MAT2 identity = { 0, 1, 0, 0, 0, 0, 0, 1 };
|
| - GLYPHMETRICS glyphMetrics;
|
| - // GGO_NATIVE matches the outline perfectly when Windows font smoothing is off.
|
| - // GGO_NATIVE | GGO_UNHINTED does not match perfectly either when Windows font smoothing is on or off.
|
| - DWORD outlineLength = GetGlyphOutline(hdc, glyph, GGO_GLYPH_INDEX | GGO_NATIVE, &glyphMetrics, 0, 0, &identity);
|
| - ASSERT(outlineLength >= 0);
|
| - if (outlineLength < 0)
|
| - return path;
|
| -
|
| - Vector<UInt8> outline(outlineLength);
|
| - GetGlyphOutline(hdc, glyph, GGO_GLYPH_INDEX | GGO_NATIVE, &glyphMetrics, outlineLength, outline.data(), &identity);
|
| -
|
| - unsigned offset = 0;
|
| - while (offset < outlineLength) {
|
| - LPTTPOLYGONHEADER subpath = reinterpret_cast<LPTTPOLYGONHEADER>(outline.data() + offset);
|
| - ASSERT(subpath->dwType == TT_POLYGON_TYPE);
|
| - if (subpath->dwType != TT_POLYGON_TYPE)
|
| - return path;
|
| -
|
| - CGPathMoveToPoint(path, 0, toCGFloat(subpath->pfxStart.x), toCGFloat(subpath->pfxStart.y));
|
| -
|
| - unsigned subpathOffset = sizeof(*subpath);
|
| - while (subpathOffset < subpath->cb) {
|
| - LPTTPOLYCURVE segment = reinterpret_cast<LPTTPOLYCURVE>(reinterpret_cast<UInt8*>(subpath) + subpathOffset);
|
| - switch (segment->wType) {
|
| - case TT_PRIM_LINE:
|
| - for (unsigned i = 0; i < segment->cpfx; i++)
|
| - CGPathAddLineToPoint(path, 0, toCGFloat(segment->apfx[i].x), toCGFloat(segment->apfx[i].y));
|
| - break;
|
| -
|
| - case TT_PRIM_QSPLINE:
|
| - for (unsigned i = 0; i < segment->cpfx; i++) {
|
| - CGFloat x = toCGFloat(segment->apfx[i].x);
|
| - CGFloat y = toCGFloat(segment->apfx[i].y);
|
| - CGFloat cpx;
|
| - CGFloat cpy;
|
| -
|
| - if (i == segment->cpfx - 2) {
|
| - cpx = toCGFloat(segment->apfx[i + 1].x);
|
| - cpy = toCGFloat(segment->apfx[i + 1].y);
|
| - i++;
|
| - } else {
|
| - cpx = (toCGFloat(segment->apfx[i].x) + toCGFloat(segment->apfx[i + 1].x)) / 2;
|
| - cpy = (toCGFloat(segment->apfx[i].y) + toCGFloat(segment->apfx[i + 1].y)) / 2;
|
| - }
|
| -
|
| - CGPathAddQuadCurveToPoint(path, 0, x, y, cpx, cpy);
|
| - }
|
| - break;
|
| -
|
| - case TT_PRIM_CSPLINE:
|
| - for (unsigned i = 0; i < segment->cpfx; i += 3) {
|
| - CGFloat cp1x = toCGFloat(segment->apfx[i].x);
|
| - CGFloat cp1y = toCGFloat(segment->apfx[i].y);
|
| - CGFloat cp2x = toCGFloat(segment->apfx[i + 1].x);
|
| - CGFloat cp2y = toCGFloat(segment->apfx[i + 1].y);
|
| - CGFloat x = toCGFloat(segment->apfx[i + 2].x);
|
| - CGFloat y = toCGFloat(segment->apfx[i + 2].y);
|
| -
|
| - CGPathAddCurveToPoint(path, 0, cp1x, cp1y, cp2x, cp2y, x, y);
|
| - }
|
| - break;
|
| -
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - return path;
|
| - }
|
| -
|
| - subpathOffset += sizeof(*segment) + (segment->cpfx - 1) * sizeof(segment->apfx[0]);
|
| - }
|
| - CGPathCloseSubpath(path);
|
| - offset += subpath->cb;
|
| - }
|
| - return path;
|
| -}
|
| -
|
| -void Font::drawGlyphs(GraphicsContext* graphicsContext, const SimpleFontData* font, const GlyphBuffer& glyphBuffer,
|
| - int from, int numGlyphs, const FloatPoint& point) const
|
| -{
|
| - CGContextRef cgContext = graphicsContext->platformContext();
|
| - bool shouldUseFontSmoothing = WebCoreShouldUseFontSmoothing();
|
| -
|
| - switch(fontDescription().fontSmoothing()) {
|
| - case Antialiased: {
|
| - graphicsContext->setShouldAntialias(true);
|
| - shouldUseFontSmoothing = false;
|
| - break;
|
| - }
|
| - case SubpixelAntialiased: {
|
| - graphicsContext->setShouldAntialias(true);
|
| - shouldUseFontSmoothing = true;
|
| - break;
|
| - }
|
| - case NoSmoothing: {
|
| - graphicsContext->setShouldAntialias(false);
|
| - shouldUseFontSmoothing = false;
|
| - break;
|
| - }
|
| - case AutoSmoothing: {
|
| - // For the AutoSmooth case, don't do anything! Keep the default settings.
|
| - break;
|
| - }
|
| - default:
|
| - ASSERT_NOT_REACHED();
|
| - }
|
| -
|
| - uint32_t oldFontSmoothingStyle = wkSetFontSmoothingStyle(cgContext, shouldUseFontSmoothing);
|
| -
|
| - const FontPlatformData& platformData = font->platformData();
|
| -
|
| - CGContextSetFont(cgContext, platformData.cgFont());
|
| -
|
| - CGAffineTransform matrix = CGAffineTransformIdentity;
|
| - matrix.b = -matrix.b;
|
| - matrix.d = -matrix.d;
|
| -
|
| - if (platformData.syntheticOblique()) {
|
| - static float skew = -tanf(syntheticObliqueAngle * piFloat / 180.0f);
|
| - matrix = CGAffineTransformConcat(matrix, CGAffineTransformMake(1, 0, skew, 1, 0, 0));
|
| - }
|
| -
|
| - CGContextSetTextMatrix(cgContext, matrix);
|
| -
|
| - // Uniscribe gives us offsets to help refine the positioning of combining glyphs.
|
| - FloatSize translation = glyphBuffer.offsetAt(from);
|
| -
|
| - CGContextSetFontSize(cgContext, platformData.size());
|
| - wkSetCGContextFontRenderingStyle(cgContext, font->isSystemFont(), false, font->platformData().useGDI());
|
| -
|
| - FloatSize shadowOffset;
|
| - float shadowBlur;
|
| - Color shadowColor;
|
| - ColorSpace shadowColorSpace;
|
| - graphicsContext->getShadow(shadowOffset, shadowBlur, shadowColor, shadowColorSpace);
|
| -
|
| - bool hasSimpleShadow = graphicsContext->textDrawingMode() == TextModeFill && shadowColor.isValid() && !shadowBlur && (!graphicsContext->shadowsIgnoreTransforms() || graphicsContext->getCTM().isIdentityOrTranslationOrFlipped());
|
| - if (hasSimpleShadow) {
|
| - // Paint simple shadows ourselves instead of relying on CG shadows, to avoid losing subpixel antialiasing.
|
| - graphicsContext->clearShadow();
|
| - Color fillColor = graphicsContext->fillColor();
|
| - Color shadowFillColor(shadowColor.red(), shadowColor.green(), shadowColor.blue(), shadowColor.alpha() * fillColor.alpha() / 255);
|
| - graphicsContext->setFillColor(shadowFillColor, ColorSpaceDeviceRGB);
|
| - float shadowTextX = point.x() + translation.width() + shadowOffset.width();
|
| - // If shadows are ignoring transforms, then we haven't applied the Y coordinate flip yet, so down is negative.
|
| - float shadowTextY = point.y() + translation.height() + shadowOffset.height() * (graphicsContext->shadowsIgnoreTransforms() ? -1 : 1);
|
| - CGContextSetTextPosition(cgContext, shadowTextX, shadowTextY);
|
| - CGContextShowGlyphsWithAdvances(cgContext, glyphBuffer.glyphs(from), static_cast<const CGSize*>(glyphBuffer.advances(from)), numGlyphs);
|
| - if (font->syntheticBoldOffset()) {
|
| - CGContextSetTextPosition(cgContext, point.x() + translation.width() + shadowOffset.width() + font->syntheticBoldOffset(), point.y() + translation.height() + shadowOffset.height());
|
| - CGContextShowGlyphsWithAdvances(cgContext, glyphBuffer.glyphs(from), static_cast<const CGSize*>(glyphBuffer.advances(from)), numGlyphs);
|
| - }
|
| - graphicsContext->setFillColor(fillColor, ColorSpaceDeviceRGB);
|
| - }
|
| -
|
| - CGContextSetTextPosition(cgContext, point.x() + translation.width(), point.y() + translation.height());
|
| - CGContextShowGlyphsWithAdvances(cgContext, glyphBuffer.glyphs(from), static_cast<const CGSize*>(glyphBuffer.advances(from)), numGlyphs);
|
| - if (font->syntheticBoldOffset()) {
|
| - CGContextSetTextPosition(cgContext, point.x() + translation.width() + font->syntheticBoldOffset(), point.y() + translation.height());
|
| - CGContextShowGlyphsWithAdvances(cgContext, glyphBuffer.glyphs(from), static_cast<const CGSize*>(glyphBuffer.advances(from)), numGlyphs);
|
| - }
|
| -
|
| - if (hasSimpleShadow)
|
| - graphicsContext->setShadow(shadowOffset, shadowBlur, shadowColor, ColorSpaceDeviceRGB);
|
| -
|
| - wkRestoreFontSmoothingStyle(cgContext, oldFontSmoothingStyle);
|
| -}
|
| -
|
| -}
|
|
|