blob: 4299dd3969d9fa553660a5ce5532e40117c890e1 [file] [log] [blame]
/*
* 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();
}
}