/*
 * Copyright 2015 Google Inc. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef COBALT_RENDER_TREE_OPACITY_FILTER_H_
#define COBALT_RENDER_TREE_OPACITY_FILTER_H_

#include "base/logging.h"

namespace cobalt {
namespace render_tree {

// An OpacityFilter can be used to express the desire to modify a given source
// image to become transparent.  Opacity should be a value between [0, 1] where
// 0 is completely invisible and 1 is fully opaque.
class OpacityFilter {
 public:
  explicit OpacityFilter(float opacity) { set_opacity(opacity); }

  void set_opacity(float opacity) {
    DCHECK_LE(0.0f, opacity);
    DCHECK_GE(1.0f, opacity);
    opacity_ = opacity;
  }
  float opacity() const { return opacity_; }

 private:
  float opacity_;
};

}  // namespace render_tree
}  // namespace cobalt

#endif  // COBALT_RENDER_TREE_OPACITY_FILTER_H_
