18ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy/*
28ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Copyright (C) 2010 The Android Open Source Project
38ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy *
48ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
58ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * you may not use this file except in compliance with the License.
68ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * You may obtain a copy of the License at
78ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy *
88ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
98ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy *
108ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * Unless required by applicable law or agreed to in writing, software
118ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
128ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
138ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * See the License for the specific language governing permissions and
148ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy * limitations under the License.
158ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy */
168ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
178ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guypackage com.android.test.hwui;
188ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
198ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.app.Activity;
208ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.content.Context;
218ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.graphics.Canvas;
228ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.graphics.Region;
238ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.os.Bundle;
248ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.widget.FrameLayout;
258ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guyimport android.widget.TextView;
268ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
278ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy@SuppressWarnings({"UnusedDeclaration"})
288ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guypublic class ClipRegion2Activity extends Activity {
298ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    @Override
308ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    protected void onCreate(Bundle savedInstanceState) {
318ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        super.onCreate(savedInstanceState);
328ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
338ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        final RegionView group = new RegionView(this);
348ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
358ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        final TextView text = new TextView(this);
368ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        text.setText(buildText());
378ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        group.addView(text);
388ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
398ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        setContentView(group);
408ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    }
418ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
428ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    private static CharSequence buildText() {
438ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        StringBuffer buffer = new StringBuffer();
448ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        for (int i = 0; i < 10; i++) {
458ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            buffer.append(LOREM_IPSUM);
468ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        }
478ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        return buffer;
488ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    }
498ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
508ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    public static class RegionView extends FrameLayout {
51b7b93e00893f5c690a96bd3e0e10583bc5721f83Romain Guy        private Region mRegion = new Region();
528ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        private float mClipPosition = 0.0f;
538ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
548ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        public RegionView(Context c) {
558ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            super(c);
568ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        }
578ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
588ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        public float getClipPosition() {
598ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            return mClipPosition;
608ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        }
618ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
628ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        public void setClipPosition(float clipPosition) {
638ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            mClipPosition = clipPosition;
648ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            invalidate();
658ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        }
668ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
678ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        @Override
688ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        protected void dispatchDraw(Canvas canvas) {
698ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
708ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            canvas.save();
718ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
72b7b93e00893f5c690a96bd3e0e10583bc5721f83Romain Guy            mRegion.set(0, 0, getWidth(), getHeight());
738ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            mRegion.op(getWidth() / 4, getHeight() / 4, 3 * getWidth() / 4, 3 * getHeight() / 4,
748ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy                    Region.Op.DIFFERENCE);
758ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
768ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            canvas.clipRegion(mRegion);
778ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            super.dispatchDraw(canvas);
788ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
798ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy            canvas.restore();
808ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy        }
818ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    }
828ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy
838ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy    private static final String LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed sagittis molestie aliquam. Donec metus metus, laoreet nec sagittis vitae, ultricies sit amet eros. Suspendisse sed massa sit amet felis consectetur gravida. In vitae erat mi, in egestas nisl. Phasellus quis ipsum massa, at scelerisque arcu. Nam lectus est, pellentesque eget lacinia non, congue vitae augue. Aliquam erat volutpat. Pellentesque bibendum tincidunt viverra. Aliquam erat volutpat. Maecenas pretium vulputate placerat. Nulla varius elementum rutrum. Aenean mollis blandit imperdiet. Pellentesque interdum fringilla ligula.";
848ce00301a023eecaeb8891ce906f67b513ebb42aRomain Guy}
85