| /* |
| * Copyright (C) 2013 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.gallery3d.filtershow.filters; |
| |
| import android.util.JsonReader; |
| import android.util.JsonWriter; |
| import android.util.Log; |
| |
| import com.android.gallery3d.R; |
| import com.android.gallery3d.filtershow.editors.EditorRotate; |
| import com.android.gallery3d.filtershow.editors.ImageOnlyEditor; |
| |
| import java.io.IOException; |
| |
| public class FilterRotateRepresentation extends FilterRepresentation { |
| public static final String SERIALIZATION_NAME = "ROTATION"; |
| public static final String SERIALIZATION_ROTATE_VALUE = "value"; |
| private static final String TAG = FilterRotateRepresentation.class.getSimpleName(); |
| |
| Rotation mRotation; |
| |
| public enum Rotation { |
| ZERO(0), NINETY(90), ONE_EIGHTY(180), TWO_SEVENTY(270); |
| private final int mValue; |
| |
| private Rotation(int value) { |
| mValue = value; |
| } |
| |
| public int value() { |
| return mValue; |
| } |
| |
| public static Rotation fromValue(int value) { |
| switch (value) { |
| case 0: |
| return ZERO; |
| case 90: |
| return NINETY; |
| case 180: |
| return ONE_EIGHTY; |
| case 270: |
| return TWO_SEVENTY; |
| default: |
| return null; |
| } |
| } |
| } |
| |
| public FilterRotateRepresentation(Rotation rotation) { |
| super(SERIALIZATION_NAME); |
| setSerializationName(SERIALIZATION_NAME); |
| setShowParameterValue(false); |
| setFilterClass(FilterRotateRepresentation.class); |
| setFilterType(FilterRepresentation.TYPE_GEOMETRY); |
| setSupportsPartialRendering(true); |
| setTextId(R.string.rotate); |
| setEditorId(ImageOnlyEditor.ID); |
| setRotation(rotation); |
| } |
| |
| public FilterRotateRepresentation(FilterRotateRepresentation r) { |
| this(r.getRotation()); |
| setName(r.getName()); |
| } |
| |
| public FilterRotateRepresentation() { |
| this(getNil()); |
| } |
| |
| public Rotation getRotation() { |
| return mRotation; |
| } |
| |
| public void rotateCW() { |
| switch(mRotation) { |
| case ZERO: |
| mRotation = Rotation.NINETY; |
| break; |
| case NINETY: |
| mRotation = Rotation.ONE_EIGHTY; |
| break; |
| case ONE_EIGHTY: |
| mRotation = Rotation.TWO_SEVENTY; |
| break; |
| case TWO_SEVENTY: |
| mRotation = Rotation.ZERO; |
| break; |
| } |
| } |
| |
| public void set(FilterRotateRepresentation r) { |
| mRotation = r.mRotation; |
| } |
| |
| public void setRotation(Rotation rotation) { |
| if (rotation == null) { |
| throw new IllegalArgumentException("Argument to setRotation is null"); |
| } |
| mRotation = rotation; |
| } |
| |
| @Override |
| public boolean allowsSingleInstanceOnly() { |
| return true; |
| } |
| |
| @Override |
| public FilterRepresentation copy() { |
| return new FilterRotateRepresentation(this); |
| } |
| |
| @Override |
| protected void copyAllParameters(FilterRepresentation representation) { |
| if (!(representation instanceof FilterRotateRepresentation)) { |
| throw new IllegalArgumentException("calling copyAllParameters with incompatible types!"); |
| } |
| super.copyAllParameters(representation); |
| representation.useParametersFrom(this); |
| } |
| |
| @Override |
| public void useParametersFrom(FilterRepresentation a) { |
| if (!(a instanceof FilterRotateRepresentation)) { |
| throw new IllegalArgumentException("calling useParametersFrom with incompatible types!"); |
| } |
| setRotation(((FilterRotateRepresentation) a).getRotation()); |
| } |
| |
| @Override |
| public boolean isNil() { |
| return mRotation == getNil(); |
| } |
| |
| public static Rotation getNil() { |
| return Rotation.ZERO; |
| } |
| |
| @Override |
| public void serializeRepresentation(JsonWriter writer) throws IOException { |
| writer.beginObject(); |
| writer.name(SERIALIZATION_ROTATE_VALUE).value(mRotation.value()); |
| writer.endObject(); |
| } |
| |
| @Override |
| public boolean equals(FilterRepresentation rep) { |
| if (!(rep instanceof FilterRotateRepresentation)) { |
| return false; |
| } |
| FilterRotateRepresentation rotate = (FilterRotateRepresentation) rep; |
| if (rotate.mRotation.value() != mRotation.value()) { |
| return false; |
| } |
| return true; |
| } |
| |
| @Override |
| public void deSerializeRepresentation(JsonReader reader) throws IOException { |
| boolean unset = true; |
| reader.beginObject(); |
| while (reader.hasNext()) { |
| String name = reader.nextName(); |
| if (SERIALIZATION_ROTATE_VALUE.equals(name)) { |
| Rotation r = Rotation.fromValue(reader.nextInt()); |
| if (r != null) { |
| setRotation(r); |
| unset = false; |
| } |
| } else { |
| reader.skipValue(); |
| } |
| } |
| if (unset) { |
| Log.w(TAG, "WARNING: bad value when deserializing " + SERIALIZATION_NAME); |
| } |
| reader.endObject(); |
| } |
| } |