19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2008 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.text.style;
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.os.Parcel;
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.ParcelableSpan;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextPaint;
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.text.TextUtils;
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class AbsoluteSizeSpan extends MetricAffectingSpan implements ParcelableSpan {
259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    private final int mSize;
27a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    private boolean mDip;
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    /**
30a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     * Set the text size to <code>size</code> physical pixels.
31a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     */
329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public AbsoluteSizeSpan(int size) {
339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSize = size;
349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
36a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    /**
37a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     * Set the text size to <code>size</code> physical pixels,
38a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     * or to <code>size</code> device-independent pixels if
39a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     * <code>dip</code> is true.
40a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer     */
41a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    public AbsoluteSizeSpan(int size, boolean dip) {
42a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        mSize = size;
43a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        mDip = dip;
44a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    }
45a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public AbsoluteSizeSpan(Parcel src) {
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        mSize = src.readInt();
48a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        mDip = src.readInt() != 0;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getSpanTypeId() {
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return TextUtils.ABSOLUTE_SIZE_SPAN;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int describeContents() {
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return 0;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void writeToParcel(Parcel dest, int flags) {
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        dest.writeInt(mSize);
61a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        dest.writeInt(mDip ? 1 : 0);
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public int getSize() {
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        return mSize;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
68a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    public boolean getDip() {
69a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        return mDip;
70a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer    }
71a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void updateDrawState(TextPaint ds) {
74a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        if (mDip) {
75a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer            ds.setTextSize(mSize * ds.density);
76a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        } else {
77a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer            ds.setTextSize(mSize);
78a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        }
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    @Override
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    public void updateMeasureState(TextPaint ds) {
83a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        if (mDip) {
84a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer            ds.setTextSize(mSize * ds.density);
85a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        } else {
86a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer            ds.setTextSize(mSize);
87a9f1dd021f8f6ee777bc4d27913bd40c42e753afEric Fischer        }
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
90