14a8126e7f81384526629b1e21bf89b632ea13cd9reed/*
24a8126e7f81384526629b1e21bf89b632ea13cd9reed * Copyright 2014 Google Inc.
34a8126e7f81384526629b1e21bf89b632ea13cd9reed *
44a8126e7f81384526629b1e21bf89b632ea13cd9reed * Use of this source code is governed by a BSD-style license that can be
54a8126e7f81384526629b1e21bf89b632ea13cd9reed * found in the LICENSE file.
64a8126e7f81384526629b1e21bf89b632ea13cd9reed */
74a8126e7f81384526629b1e21bf89b632ea13cd9reed
84a8126e7f81384526629b1e21bf89b632ea13cd9reed#ifndef SkSurfaceProps_DEFINED
94a8126e7f81384526629b1e21bf89b632ea13cd9reed#define SkSurfaceProps_DEFINED
104a8126e7f81384526629b1e21bf89b632ea13cd9reed
114a8126e7f81384526629b1e21bf89b632ea13cd9reed#include "SkTypes.h"
124a8126e7f81384526629b1e21bf89b632ea13cd9reed
134a8126e7f81384526629b1e21bf89b632ea13cd9reed/**
144a8126e7f81384526629b1e21bf89b632ea13cd9reed *  Description of how the LCD strips are arranged for each pixel. If this is unknown, or the
154a8126e7f81384526629b1e21bf89b632ea13cd9reed *  pixels are meant to be "portable" and/or transformed before showing (e.g. rotated, scaled)
164a8126e7f81384526629b1e21bf89b632ea13cd9reed *  then use kUnknown_SkPixelGeometry.
174a8126e7f81384526629b1e21bf89b632ea13cd9reed */
184a8126e7f81384526629b1e21bf89b632ea13cd9reedenum SkPixelGeometry {
194a8126e7f81384526629b1e21bf89b632ea13cd9reed    kUnknown_SkPixelGeometry,
204a8126e7f81384526629b1e21bf89b632ea13cd9reed    kRGB_H_SkPixelGeometry,
214a8126e7f81384526629b1e21bf89b632ea13cd9reed    kBGR_H_SkPixelGeometry,
224a8126e7f81384526629b1e21bf89b632ea13cd9reed    kRGB_V_SkPixelGeometry,
234a8126e7f81384526629b1e21bf89b632ea13cd9reed    kBGR_V_SkPixelGeometry,
244a8126e7f81384526629b1e21bf89b632ea13cd9reed};
254a8126e7f81384526629b1e21bf89b632ea13cd9reed
264a8126e7f81384526629b1e21bf89b632ea13cd9reed// Returns true iff geo is a known geometry and is RGB.
274a8126e7f81384526629b1e21bf89b632ea13cd9reedstatic inline bool SkPixelGeometryIsRGB(SkPixelGeometry geo) {
284a8126e7f81384526629b1e21bf89b632ea13cd9reed    return kRGB_H_SkPixelGeometry == geo || kRGB_V_SkPixelGeometry == geo;
294a8126e7f81384526629b1e21bf89b632ea13cd9reed}
304a8126e7f81384526629b1e21bf89b632ea13cd9reed
314a8126e7f81384526629b1e21bf89b632ea13cd9reed// Returns true iff geo is a known geometry and is BGR.
324a8126e7f81384526629b1e21bf89b632ea13cd9reedstatic inline bool SkPixelGeometryIsBGR(SkPixelGeometry geo) {
334a8126e7f81384526629b1e21bf89b632ea13cd9reed    return kBGR_H_SkPixelGeometry == geo || kBGR_V_SkPixelGeometry == geo;
344a8126e7f81384526629b1e21bf89b632ea13cd9reed}
354a8126e7f81384526629b1e21bf89b632ea13cd9reed
364a8126e7f81384526629b1e21bf89b632ea13cd9reed// Returns true iff geo is a known geometry and is horizontal.
374a8126e7f81384526629b1e21bf89b632ea13cd9reedstatic inline bool SkPixelGeometryIsH(SkPixelGeometry geo) {
384a8126e7f81384526629b1e21bf89b632ea13cd9reed    return kRGB_H_SkPixelGeometry == geo || kBGR_H_SkPixelGeometry == geo;
394a8126e7f81384526629b1e21bf89b632ea13cd9reed}
404a8126e7f81384526629b1e21bf89b632ea13cd9reed
414a8126e7f81384526629b1e21bf89b632ea13cd9reed// Returns true iff geo is a known geometry and is vertical.
424a8126e7f81384526629b1e21bf89b632ea13cd9reedstatic inline bool SkPixelGeometryIsV(SkPixelGeometry geo) {
434a8126e7f81384526629b1e21bf89b632ea13cd9reed    return kRGB_V_SkPixelGeometry == geo || kBGR_V_SkPixelGeometry == geo;
444a8126e7f81384526629b1e21bf89b632ea13cd9reed}
454a8126e7f81384526629b1e21bf89b632ea13cd9reed
464a8126e7f81384526629b1e21bf89b632ea13cd9reed/**
474a8126e7f81384526629b1e21bf89b632ea13cd9reed *  Describes properties and constraints of a given SkSurface. The rendering engine can parse these
484a8126e7f81384526629b1e21bf89b632ea13cd9reed *  during drawing, and can sometimes optimize its performance (e.g. disabling an expensive
494a8126e7f81384526629b1e21bf89b632ea13cd9reed *  feature).
504a8126e7f81384526629b1e21bf89b632ea13cd9reed */
517c11aadd8268a1b003771ebb2aa82d53a909fe86fmalitaclass SK_API SkSurfaceProps {
524a8126e7f81384526629b1e21bf89b632ea13cd9reedpublic:
534a8126e7f81384526629b1e21bf89b632ea13cd9reed    enum Flags {
544a8126e7f81384526629b1e21bf89b632ea13cd9reed        kDisallowAntiAlias_Flag     = 1 << 0,
554a8126e7f81384526629b1e21bf89b632ea13cd9reed        kDisallowDither_Flag        = 1 << 1,
564a8126e7f81384526629b1e21bf89b632ea13cd9reed        kUseDistanceFieldFonts_Flag = 1 << 2,
574a8126e7f81384526629b1e21bf89b632ea13cd9reed    };
584a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkSurfaceProps(uint32_t flags, SkPixelGeometry);
594a8126e7f81384526629b1e21bf89b632ea13cd9reed
604a8126e7f81384526629b1e21bf89b632ea13cd9reed    enum InitType {
614a8126e7f81384526629b1e21bf89b632ea13cd9reed        kLegacyFontHost_InitType
624a8126e7f81384526629b1e21bf89b632ea13cd9reed    };
634a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkSurfaceProps(InitType);
644a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkSurfaceProps(uint32_t flags, InitType);
654af267b11964d4a8acdb232ac46094c84d890e88reed    SkSurfaceProps(const SkSurfaceProps& other);
664a8126e7f81384526629b1e21bf89b632ea13cd9reed
674a8126e7f81384526629b1e21bf89b632ea13cd9reed    uint32_t flags() const { return fFlags; }
684a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkPixelGeometry pixelGeometry() const { return fPixelGeometry; }
694a8126e7f81384526629b1e21bf89b632ea13cd9reed
704a8126e7f81384526629b1e21bf89b632ea13cd9reed    bool isDisallowAA() const { return SkToBool(fFlags & kDisallowAntiAlias_Flag); }
714a8126e7f81384526629b1e21bf89b632ea13cd9reed    bool isDisallowDither() const { return SkToBool(fFlags & kDisallowDither_Flag); }
724a8126e7f81384526629b1e21bf89b632ea13cd9reed    bool isUseDistanceFieldFonts() const { return SkToBool(fFlags & kUseDistanceFieldFonts_Flag); }
734a8126e7f81384526629b1e21bf89b632ea13cd9reed
744a8126e7f81384526629b1e21bf89b632ea13cd9reedprivate:
754a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkSurfaceProps();
764a8126e7f81384526629b1e21bf89b632ea13cd9reed
774a8126e7f81384526629b1e21bf89b632ea13cd9reed    uint32_t        fFlags;
784a8126e7f81384526629b1e21bf89b632ea13cd9reed    SkPixelGeometry fPixelGeometry;
794a8126e7f81384526629b1e21bf89b632ea13cd9reed};
804a8126e7f81384526629b1e21bf89b632ea13cd9reed
814a8126e7f81384526629b1e21bf89b632ea13cd9reed#endif
82