18c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik/*
28c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Copyright (C) 2014 The Android Open Source Project
38c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik *
48c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Licensed under the Apache License, Version 2.0 (the "License");
58c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * you may not use this file except in compliance with the License.
68c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * You may obtain a copy of the License at
78c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik *
88c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik *      http://www.apache.org/licenses/LICENSE-2.0
98c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik *
108c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * Unless required by applicable law or agreed to in writing, software
118c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * distributed under the License is distributed on an "AS IS" BASIS,
128c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * See the License for the specific language governing permissions and
148c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik * limitations under the License.
158c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik */
168c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#ifndef REVEALCLIP_H
178c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#define REVEALCLIP_H
188c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
198c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include <SkPath.h>
208c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
218c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#include "Rect.h"
228c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
238c271ca63b62061fd22cfee78fd6a574b44476fdChris Craiknamespace android {
248c271ca63b62061fd22cfee78fd6a574b44476fdChris Craiknamespace uirenderer {
258c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
268c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikclass RevealClip {
278c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikpublic:
288c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    RevealClip()
298c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik            : mShouldClip(false)
308c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik            , mX(0)
318c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik            , mY(0)
328c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik            , mRadius(0) {}
338c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
34af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik    void set(bool shouldClip, float x, float y, float radius) {
358c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        mShouldClip = shouldClip;
368c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        mX = x;
378c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        mY = y;
388c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        mRadius = radius;
398c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
408c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        mPath.rewind();
418c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        if (mShouldClip) {
428c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik            mPath.addCircle(x, y, radius);
438c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        }
448c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    }
458c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
468c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    bool willClip() const {
478c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        return mShouldClip;
488c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    }
498c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
50af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik    void getBounds(Rect* outBounds) const {
51af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik        outBounds->set(mX - mRadius, mY - mRadius,
52af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik                mX + mRadius, mY + mRadius);
53d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck    }
54e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck
55af4d04cab6d48ae0d6a5e79bd30f679af87abaadChris Craik    float getRadius() const { return mRadius; }
56e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck    float getX() const { return mX; }
57e248bd1b2c3fcf8088429507e73b31f45ee2544bJohn Reck    float getY() const { return mY; }
58d3de42cae84fadfa1befd082a2cf1bf72f9ad82aJohn Reck
598c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    const SkPath* getPath() const {
60e84a208317e0ed388fcdad1e6743c7849acb51b0Chris Craik        if (!mShouldClip) return nullptr;
618c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
628c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik        return &mPath;
638c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    }
648c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
658c271ca63b62061fd22cfee78fd6a574b44476fdChris Craikprivate:
668c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    bool mShouldClip;
678c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    float mX;
688c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    float mY;
698c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    float mRadius;
708c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik    SkPath mPath;
718c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik};
728c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
738c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik} /* namespace uirenderer */
748c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik} /* namespace android */
758c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik
768c271ca63b62061fd22cfee78fd6a574b44476fdChris Craik#endif /* REVEALCLIP_H */
77