123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- /*
- * Copyright 2017 Google Inc.
- *
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
- #ifndef SkHighContrastFilter_DEFINED
- #define SkHighContrastFilter_DEFINED
- #include "include/core/SkColorFilter.h"
- #include "include/core/SkPaint.h"
- /**
- * Configuration struct for SkHighContrastFilter.
- *
- * Provides transformations to improve contrast for users with low vision.
- */
- struct SkHighContrastConfig {
- enum class InvertStyle {
- kNoInvert,
- kInvertBrightness,
- kInvertLightness,
- kLast = kInvertLightness
- };
- SkHighContrastConfig() {
- fGrayscale = false;
- fInvertStyle = InvertStyle::kNoInvert;
- fContrast = 0.0f;
- }
- SkHighContrastConfig(bool grayscale,
- InvertStyle invertStyle,
- SkScalar contrast)
- : fGrayscale(grayscale),
- fInvertStyle(invertStyle),
- fContrast(contrast) {}
- // Returns true if all of the fields are set within the valid range.
- bool isValid() const {
- return fInvertStyle >= InvertStyle::kNoInvert &&
- fInvertStyle <= InvertStyle::kInvertLightness &&
- fContrast >= -1.0 &&
- fContrast <= 1.0;
- }
- // If true, the color will be converted to grayscale.
- bool fGrayscale;
- // Whether to invert brightness, lightness, or neither.
- InvertStyle fInvertStyle;
- // After grayscale and inverting, the contrast can be adjusted linearly.
- // The valid range is -1.0 through 1.0, where 0.0 is no adjustment.
- SkScalar fContrast;
- };
- /**
- * Color filter that provides transformations to improve contrast
- * for users with low vision.
- *
- * Applies the following transformations in this order. Each of these
- * can be configured using SkHighContrastConfig.
- *
- * - Conversion to grayscale
- * - Color inversion (either in RGB or HSL space)
- * - Increasing the resulting contrast.
- *
- * Calling SkHighContrastFilter::Make will return nullptr if the config is
- * not valid, e.g. if you try to call it with a contrast outside the range of
- * -1.0 to 1.0.
- */
- class SK_API SkHighContrastFilter {
- public:
- // Returns the filter, or nullptr if the config is invalid.
- static sk_sp<SkColorFilter> Make(const SkHighContrastConfig& config);
- static void RegisterFlattenables();
- };
- #endif
|