blob: 30b4746966d23cda7767c956d72206bbd70cc231 [file] [log] [blame]
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CC_SLIM_NINE_PATCH_LAYER_H_
#define CC_SLIM_NINE_PATCH_LAYER_H_
#include "base/component_export.h"
#include "cc/layers/nine_patch_generator.h"
#include "cc/slim/ui_resource_layer.h"
#include "ui/gfx/geometry/rect.h"
namespace cc::slim {
class COMPONENT_EXPORT(CC_SLIM) NinePatchLayer : public UIResourceLayer {
public:
static scoped_refptr<NinePatchLayer> Create();
// |border| is the space around the center rectangular region in layer space
// (known as aperture in image space). |border.x()| and |border.y()| are the
// size of the left and top boundary, respectively.
// |border.width()-border.x()| and |border.height()-border.y()| are the size
// of the right and bottom boundary, respectively.
// TODO(boliu): Should use gfx::Inset instead of gfx::Rect once this can
// diverge from cc.
void SetBorder(const gfx::Rect& border);
// aperture is in the pixel space of the bitmap resource and refers to
// the center patch of the ninepatch. We split off eight rects surrounding
// it and stick them on the edges of the layer. The corners are unscaled, the
// top and bottom rects are x-stretched to fit, and the left and right rects
// are y-stretched to fit.
void SetAperture(const gfx::Rect& aperture);
// Set whether to draw the center patch or not.
void SetFillCenter(bool fill_center);
// Use nearest neighbor sampling instead of linear (weighted average of 4
// closest pixels) when sampling from the bitmap.
void SetNearestNeighbor(bool nearest_neighbor);
void AppendQuads(viz::CompositorRenderPass& render_pass,
FrameData& data,
const gfx::Transform& transform_to_root,
const gfx::Transform& transform_to_target,
const gfx::Rect* clip_in_target,
const gfx::Rect& visible_rect,
float opacity) override;
private:
NinePatchLayer();
~NinePatchLayer() override;
gfx::Rect border_;
gfx::Rect aperture_;
bool fill_center_ = false;
bool nearest_neighbor_ = false;
cc::NinePatchGenerator quad_generator_;
};
} // namespace cc::slim
#endif // CC_SLIM_NINE_PATCH_LAYER_H_