1b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren/*
2b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Copyright (C) 2014 The Android Open Source Project
3b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren *
4b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Licensed under the Apache License, Version 2.0 (the "License");
5b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * you may not use this file except in compliance with the License.
6b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * You may obtain a copy of the License at
7b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren *
8b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren *      http://www.apache.org/licenses/LICENSE-2.0
9b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren *
10b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * Unless required by applicable law or agreed to in writing, software
11b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * distributed under the License is distributed on an "AS IS" BASIS,
12b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * See the License for the specific language governing permissions and
14b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * limitations under the License.
15b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren */
16b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
17b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenpackage com.android.camera.ui;
18b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
19b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.content.Context;
20b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.Canvas;
21b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.Paint;
22b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.graphics.RectF;
23b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.util.AttributeSet;
24b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport android.view.View;
25b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
26b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenimport com.android.camera2.R;
27b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
28b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren/**
29b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * GridLines is a view which directly overlays the preview and draws
30b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren * evenly spaced grid lines.
31b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren */
32b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgrenpublic class GridLines extends View
332bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong    implements PreviewStatusListener.PreviewAreaChangedListener {
34b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
352bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong    private RectF mDrawBounds;
36b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    Paint mPaint = new Paint();
37b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
38b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    public GridLines(Context context, AttributeSet attrs) {
39b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren        super(context, attrs);
402bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong        mPaint.setStrokeWidth(getResources().getDimensionPixelSize(R.dimen.grid_line_width));
41b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren        mPaint.setColor(getResources().getColor(R.color.grid_line));
42b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    }
43b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
44b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    @Override
45b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    public void onDraw(Canvas canvas) {
46b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren        super.onDraw(canvas);
472bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong        if (mDrawBounds != null) {
482bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong            float thirdWidth = mDrawBounds.width() / 3;
492bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong            float thirdHeight = mDrawBounds.height() / 3;
502bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong            for (int i = 1; i < 3; i++) {
512bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                // Draw the vertical lines.
522bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                final float x = thirdWidth * i;
532bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                canvas.drawLine(mDrawBounds.left + x, mDrawBounds.top,
542bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                        mDrawBounds.left + x, mDrawBounds.bottom, mPaint);
552bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                // Draw the horizontal lines.
562bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                final float y = thirdHeight * i;
572bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                canvas.drawLine(mDrawBounds.left, mDrawBounds.top + y,
582bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong                        mDrawBounds.right, mDrawBounds.top + y, mPaint);
592bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong            }
60b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren        }
61b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    }
62b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
63b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    @Override
642bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong    public void onPreviewAreaChanged(final RectF previewArea) {
652bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong        setDrawBounds(previewArea);
66b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    }
67b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren
682bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong    private void setDrawBounds(final RectF previewArea) {
692bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong        mDrawBounds = new RectF(previewArea);
702bacca795a1b0adb0daf515c43c48234b44bbba5Angus Kong        invalidate();
71b3f59a874f675ceb7542298760a3c813c5e0d9acErin Dahlgren    }
72fe60979d7d7ce78de503404da8e91e118242071aAngus Kong}
73