Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(294)

Unified Diff: Source/WebCore/platform/graphics/win/FontCGWin.cpp

Issue 13642009: WebCore: Remove PLATFORM(WIN) files we do not use. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 7 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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);
-}
-
-}
« no previous file with comments | « Source/WebCore/platform/graphics/win/DIBPixelData.cpp ('k') | Source/WebCore/platform/graphics/win/FontCacheWin.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698