19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics.drawable.shapes;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas;
207979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craikimport android.graphics.Outline;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Paint;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.RectF;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/**
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Defines a rectangle shape.
26446d988b44b6e492e4cfc36be00a1e1aeaaf8c20Alan Viverette * <p>
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The rectangle can be drawn to a Canvas with its own draw() method,
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but more graphical control is available if you instead pass
299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the RectShape to a {@link android.graphics.drawable.ShapeDrawable}.
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class RectShape extends Shape {
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private RectF mRect = new RectF();
3331ba192dd201df2cad96a8c503f730130ab0d80fChris Craik
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public RectShape() {}
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void draw(Canvas canvas, Paint paint) {
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        canvas.drawRect(mRect, paint);
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
4231ba192dd201df2cad96a8c503f730130ab0d80fChris Craik    public void getOutline(Outline outline) {
437979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik        final RectF rect = rect();
447979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik        outline.setRect((int) Math.ceil(rect.left), (int) Math.ceil(rect.top),
457979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik                (int) Math.floor(rect.right), (int) Math.floor(rect.bottom));
467979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik    }
477979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik
487979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik    @Override
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected void onResize(float width, float height) {
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mRect.set(0, 0, width, height);
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
527979388d4f7d5d9dbfcf7e1cc4709f8088c034aeChris Craik
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    /**
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     * Returns the RectF that defines this rectangle's bounds.
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project     */
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    protected final RectF rect() {
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mRect;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public RectShape clone() throws CloneNotSupportedException {
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        final RectShape shape = (RectShape) super.clone();
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        shape.mRect = new RectF(mRect);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return shape;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
67