blob: 5254f656c653f04ab515db9db75d83061df6bca3 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_VIEWS_ANIMATION_INK_DROP_MASK_H_
#define UI_VIEWS_ANIMATION_INK_DROP_MASK_H_
#include "base/macros.h"
#include "ui/compositor/layer.h"
#include "ui/compositor/layer_delegate.h"
#include "ui/gfx/geometry/insets_f.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/views/views_export.h"
class SkPath;
namespace views {
// Base class for different ink drop masks. It is responsible for creating the
// ui::Layer that can be set as the mask layer for ink drop layer. Note that the
// mask's layer size (passed in the constructor) should always match size of the
// layer it is masking.
class VIEWS_EXPORT InkDropMask : public ui::LayerDelegate {
public:
~InkDropMask() override;
ui::Layer* layer() { return &layer_; }
protected:
explicit InkDropMask(const gfx::Size& layer_size);
private:
// ui::LayerDelegate:
void OnDeviceScaleFactorChanged(float old_device_scale_factor,
float new_device_scale_factor) override;
ui::Layer layer_;
DISALLOW_COPY_AND_ASSIGN(InkDropMask);
};
// A rectangular ink drop mask with rounded corners.
class VIEWS_EXPORT RoundRectInkDropMask : public InkDropMask {
public:
RoundRectInkDropMask(const gfx::Size& layer_size,
const gfx::InsetsF& mask_insets,
float corner_radius);
private:
// InkDropMask:
void OnPaintLayer(const ui::PaintContext& context) override;
gfx::InsetsF mask_insets_;
float corner_radius_;
DISALLOW_COPY_AND_ASSIGN(RoundRectInkDropMask);
};
// A circular ink drop mask.
class VIEWS_EXPORT CircleInkDropMask : public InkDropMask {
public:
CircleInkDropMask(const gfx::Size& layer_size,
const gfx::Point& mask_center,
int mask_radius);
private:
// InkDropMask:
void OnPaintLayer(const ui::PaintContext& context) override;
gfx::Point mask_center_;
int mask_radius_;
DISALLOW_COPY_AND_ASSIGN(CircleInkDropMask);
};
// An ink-drop mask that paints a specified path.
class VIEWS_EXPORT PathInkDropMask : public InkDropMask {
public:
PathInkDropMask(const gfx::Size& layer_size, const SkPath& path);
private:
// InkDropMask:
void OnPaintLayer(const ui::PaintContext& context) override;
SkPath path_;
DISALLOW_COPY_AND_ASSIGN(PathInkDropMask);
};
} // namespace views
#endif // UI_VIEWS_ANIMATION_INK_DROP_MASK_H_