| Index: src/core/SkDeviceProperties.h
|
| diff --git a/src/core/SkDeviceProperties.h b/src/core/SkDeviceProperties.h
|
| index 11ecd651570dcb4c9cfc5994b2be83a93a98f4eb..80e0177650baea7d114e9bc099dfc76e6db6e1f1 100644
|
| --- a/src/core/SkDeviceProperties.h
|
| +++ b/src/core/SkDeviceProperties.h
|
| @@ -1,26 +1,103 @@
|
| -/*
|
| - * Copyright 2014 Google Inc.
|
| - *
|
| - * Use of this source code is governed by a BSD-style license that can be
|
| - * found in the LICENSE file.
|
| - */
|
| -
|
| #ifndef SkDeviceProperties_DEFINED
|
| #define SkDeviceProperties_DEFINED
|
|
|
| -#include "SkSurfacePriv.h"
|
| +//TODO: get everyone to stop using SkFontLCDConfig::SetSubpixel* and remove this import.
|
| +#include "SkFontLCDConfig.h"
|
|
|
| struct SkDeviceProperties {
|
| - enum InitType {
|
| - kLegacyLCD_InitType
|
| + struct Geometry {
|
| + /** The orientation of the pixel specifies the interpretation of the
|
| + * layout. If the orientation is horizontal, the layout is interpreted as
|
| + * left to right. It the orientation is vertical, the layout is
|
| + * interpreted top to bottom (rotated 90deg cw from horizontal).
|
| + */
|
| + enum Orientation {
|
| + kUnknown_Orientation = 0x0,
|
| + kKnown_Orientation = 0x2,
|
| +
|
| + kHorizontal_Orientation = 0x2, //!< this is the default
|
| + kVertical_Orientation = 0x3,
|
| +
|
| + kOrientationMask = 0x3,
|
| + };
|
| +
|
| + /** The layout of the pixel specifies its subpixel geometry.
|
| + *
|
| + * kUnknown_Layout means that the subpixel elements are not spatially
|
| + * separated in any known or usable fashion.
|
| + */
|
| + enum Layout {
|
| + kUnknown_Layout = 0x0,
|
| + kKnown_Layout = 0x8,
|
| +
|
| + kRGB_Layout = 0x8, //!< this is the default
|
| + kBGR_Layout = 0xC,
|
| +
|
| + kLayoutMask = 0xC,
|
| + };
|
| +
|
| + Orientation getOrientation() {
|
| + return static_cast<Orientation>(fGeometry & kOrientationMask);
|
| + }
|
| + Layout getLayout() {
|
| + return static_cast<Layout>(fGeometry & kLayoutMask);
|
| + }
|
| +
|
| + bool isOrientationKnown() {
|
| + return SkToBool(fGeometry & kKnown_Orientation);
|
| + }
|
| + bool isLayoutKnown() {
|
| + return SkToBool(fGeometry & kKnown_Layout);
|
| + }
|
| +
|
| + private:
|
| + //TODO: get everyone to stop using SkFontLCDConfig::SetSubpixel* and replace these calls with constants.
|
| + static Orientation fromOldOrientation(SkFontLCDConfig::LCDOrientation orientation) {
|
| + switch (orientation) {
|
| + case SkFontLCDConfig::kHorizontal_LCDOrientation: return kHorizontal_Orientation;
|
| + case SkFontLCDConfig::kVertical_LCDOrientation: return kVertical_Orientation;
|
| + default: return kUnknown_Orientation;
|
| + }
|
| + }
|
| + static Layout fromOldLayout(SkFontLCDConfig::LCDOrder order) {
|
| + switch (order) {
|
| + case SkFontLCDConfig::kRGB_LCDOrder: return kRGB_Layout;
|
| + case SkFontLCDConfig::kBGR_LCDOrder: return kBGR_Layout;
|
| + default: return kUnknown_Layout;
|
| + }
|
| + }
|
| + public:
|
| + static Geometry MakeDefault() {
|
| + Orientation orientation = fromOldOrientation(SkFontLCDConfig::GetSubpixelOrientation()); //kHorizontal_Orientation
|
| + Layout layout = fromOldLayout(SkFontLCDConfig::GetSubpixelOrder()); //kRGB_Layout
|
| + Geometry ret = { SkToU8(orientation | layout) };
|
| + return ret;
|
| + }
|
| +
|
| + static Geometry Make(Orientation orientation, Layout layout) {
|
| + Geometry ret = { SkToU8(orientation | layout) };
|
| + return ret;
|
| + }
|
| +
|
| + uint8_t fGeometry;
|
| };
|
| - SkDeviceProperties(InitType) : fPixelGeometry(SkSurfacePropsDefaultPixelGeometry()) {}
|
| - SkDeviceProperties(SkPixelGeometry geo) : fPixelGeometry(geo) {}
|
|
|
| - SkPixelGeometry fPixelGeometry;
|
| + static SkDeviceProperties MakeDefault() {
|
| + SkDeviceProperties ret = { Geometry::MakeDefault(), SK_GAMMA_EXPONENT };
|
| + return ret;
|
| + }
|
|
|
| - // read-only attribute -- until we actually store a value (future CL)
|
| - float getGamma() const { return SK_GAMMA_EXPONENT; }
|
| + static SkDeviceProperties Make(Geometry geometry, SkScalar gamma) {
|
| + SkDeviceProperties ret = { geometry, gamma };
|
| + return ret;
|
| + }
|
| +
|
| + /** Each pixel of an image will have some number of channels.
|
| + * Can the layout of those channels be exploited? */
|
| + Geometry fGeometry;
|
| +
|
| + /** Represents the color space of the image. This is a woefully inadequate beginning. */
|
| + SkScalar fGamma;
|
| };
|
|
|
| #endif
|
|
|