<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (c) 2009, The Android Open Source Project
+<!-- 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.
<dimen name="capture_margin_top">16dip</dimen>
<dimen name="camera_controls_size">0dip</dimen>
<dimen name="camera_film_strip_gap">32dip</dimen>
+
+ <dimen name="appwidget_width">180dp</dimen>
+ <dimen name="appwidget_height">180dp</dimen>
+ <dimen name="stack_photo_width">160dp</dimen>
+ <dimen name="stack_photo_height">120dp</dimen>
+
+ <!-- configuration for legacy album set page -->
+ <integer name="albumset_rows_land">2</integer>
+ <integer name="albumset_rows_port">3</integer>
+ <dimen name="albumset_padding_top">7dp</dimen>
+ <dimen name="albumset_padding_bottom">7dp</dimen>
+ <dimen name="albumset_slot_gap">7dp</dimen>
+
+ <dimen name="albumset_label_background_height">30dp</dimen>
+ <dimen name="albumset_title_offset">10dp</dimen>
+ <dimen name="albumset_count_offset">10dp</dimen>
+ <dimen name="albumset_title_font_size">12sp</dimen>
+ <dimen name="albumset_count_font_size">9sp</dimen>
+ <dimen name="albumset_left_margin">2dp</dimen>
+ <dimen name="albumset_title_right_margin">20dp</dimen>
+ <dimen name="albumset_icon_size">25dp</dimen>
+
+ <!-- configuration for album page -->
+ <integer name="album_rows_land">2</integer>
+ <integer name="album_rows_port">4</integer>
+ <dimen name="album_slot_gap">5dp</dimen>
+
+ <!-- configuration for manage page -->
+ <dimen name="cache_pin_size">24dp</dimen>
+ <dimen name="cache_pin_margin">8dp</dimen>
+
+ <!-- for manage cache bar -->
+ <dimen name="manage_cache_bottom_height">48dp</dimen>
+
+ <!-- configuration for filtershow UI -->
+ <dimen name="thumbnail_size">96dip</dimen>
+ <dimen name="thumbnail_margin">3dip</dimen>
+ <dimen name="action_item_height">175dip</dimen>
+
+ <!-- configuration for album set page -->
+ <dimen name="album_set_item_image_height">120dp</dimen>
+ <dimen name="album_set_item_width">140dp</dimen>
+
+ <!-- configuration for preview in editor -->
+ <dimen name="photoeditor_text_size">12dp</dimen>
+ <dimen name="photoeditor_text_padding">10dp</dimen>
+ <dimen name="photoeditor_original_text_size">18dp</dimen>
+ <dimen name="photoeditor_original_text_margin">4dp</dimen>
</resources>
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 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.
--->
-<resources>
- <dimen name="appwidget_width">180dp</dimen>
- <dimen name="appwidget_height">180dp</dimen>
- <dimen name="stack_photo_width">160dp</dimen>
- <dimen name="stack_photo_height">120dp</dimen>
-
- <!-- configuration for legacy album set page -->
- <integer name="albumset_rows_land">2</integer>
- <integer name="albumset_rows_port">3</integer>
- <dimen name="albumset_padding_top">7dp</dimen>
- <dimen name="albumset_padding_bottom">7dp</dimen>
- <dimen name="albumset_slot_gap">7dp</dimen>
-
- <dimen name="albumset_label_background_height">30dp</dimen>
- <dimen name="albumset_title_offset">10dp</dimen>
- <dimen name="albumset_count_offset">10dp</dimen>
- <dimen name="albumset_title_font_size">12sp</dimen>
- <dimen name="albumset_count_font_size">9sp</dimen>
- <dimen name="albumset_left_margin">2dp</dimen>
- <dimen name="albumset_title_right_margin">20dp</dimen>
- <dimen name="albumset_icon_size">25dp</dimen>
-
- <!-- configuration for album page -->
- <integer name="album_rows_land">2</integer>
- <integer name="album_rows_port">4</integer>
- <dimen name="album_slot_gap">5dp</dimen>
-
- <!-- configuration for manage page -->
- <dimen name="cache_pin_size">24dp</dimen>
- <dimen name="cache_pin_margin">8dp</dimen>
-
- <!-- for manage cache bar -->
- <dimen name="manage_cache_bottom_height">48dp</dimen>
-
- <!-- configuration for filtershow UI -->
- <dimen name="thumbnail_size">96dip</dimen>
- <dimen name="thumbnail_margin">3dip</dimen>
- <dimen name="action_item_height">175dip</dimen>
-
- <!-- configuration for album set page -->
- <dimen name="album_set_item_image_height">120dp</dimen>
- <dimen name="album_set_item_width">140dp</dimen>
-</resources>
package com.android.gallery3d.filtershow.imageshow;
import android.content.Context;
+import android.content.res.Resources;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Point;
import android.graphics.Rect;
import android.graphics.RectF;
-import android.net.Uri;
-import android.os.Handler;
import android.util.AttributeSet;
import android.view.GestureDetector;
import android.view.GestureDetector.OnDoubleTapListener;
import android.view.View;
import android.widget.LinearLayout;
+import com.android.gallery3d.R;
import com.android.gallery3d.filtershow.FilterShowActivity;
import com.android.gallery3d.filtershow.cache.ImageLoader;
import com.android.gallery3d.filtershow.filters.ImageFilter;
private static final boolean ENABLE_ZOOMED_COMPARISON = false;
protected Paint mPaint = new Paint();
- protected static int mTextSize = 24;
- protected static int mTextPadding = 20;
+ protected int mTextSize;
+ protected int mTextPadding;
protected ImageLoader mImageLoader = null;
- private boolean mDirtyGeometry = false;
- private Bitmap mBackgroundImage = null;
- private final boolean USE_BACKGROUND_IMAGE = false;
- private static int mBackgroundColor = Color.RED;
+ protected int mBackgroundColor;
private GestureDetector mGestureDetector = null;
private ScaleGestureDetector mScaleGestureDetector = null;
private boolean mTouchShowOriginal = false;
private long mTouchShowOriginalDate = 0;
private final long mTouchShowOriginalDelayMin = 200; // 200ms
- private final long mTouchShowOriginalDelayMax = 300; // 300ms
private int mShowOriginalDirection = 0;
private static int UNVEIL_HORIZONTAL = 1;
private static int UNVEIL_VERTICAL = 2;
private Point mTouch = new Point();
private boolean mFinishedScalingOperation = false;
- private static int mOriginalTextMargin = 8;
- private static int mOriginalTextSize = 26;
- private static String mOriginalText = "Original";
+ private int mOriginalTextMargin;
+ private int mOriginalTextSize;
+ private String mOriginalText;
private boolean mZoomIn = false;
Point mOriginalTranslation = new Point();
float mOriginalScale;
SCALE,
MOVE
}
- private String mToast = null;
- private boolean mShowToast = false;
- private boolean mImportantToast = false;
InteractionMode mInteractionMode = InteractionMode.NONE;
protected GeometryMetadata getGeometry() {
private FilterShowActivity mActivity = null;
- public static void setDefaultBackgroundColor(int value) {
- mBackgroundColor = value;
- }
-
public FilterShowActivity getActivity() {
return mActivity;
}
- public int getDefaultBackgroundColor() {
- return mBackgroundColor;
- }
-
- public static void setTextSize(int value) {
- mTextSize = value;
- }
-
- public static void setTextPadding(int value) {
- mTextPadding = value;
- }
-
- public static void setOriginalTextMargin(int value) {
- mOriginalTextMargin = value;
- }
-
- public static void setOriginalTextSize(int value) {
- mOriginalTextSize = value;
- }
-
- public static void setOriginalText(String text) {
- mOriginalText = text;
- }
-
- private final Handler mHandler = new Handler();
-
- public void select() {
- }
-
- public void unselect() {
- }
-
public boolean hasModifications() {
if (getImagePreset() == null) {
return false;
mActivity.enableSave(hasModifications());
}
- public Point getTouchPoint() {
- return mTouch;
+ public ImageShow(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ setupImageShow(context);
}
public ImageShow(Context context, AttributeSet attrs) {
super(context, attrs);
+ setupImageShow(context);
- setupGestureDetector(context);
- mActivity = (FilterShowActivity) context;
- MasterImage.getImage().addObserver(this);
}
public ImageShow(Context context) {
super(context);
+ setupImageShow(context);
+ }
+ private void setupImageShow(Context context) {
+ Resources res = context.getResources();
+ mTextSize = res.getDimensionPixelSize(R.dimen.photoeditor_text_size);
+ mTextPadding = res.getDimensionPixelSize(R.dimen.photoeditor_text_padding);
+ mOriginalTextMargin = res.getDimensionPixelSize(R.dimen.photoeditor_original_text_margin);
+ mOriginalTextSize = res.getDimensionPixelSize(R.dimen.photoeditor_original_text_size);
+ mBackgroundColor = res.getColor(R.color.background_screen);
+ mOriginalText = res.getString(R.string.original_picture_text);
setupGestureDetector(context);
mActivity = (FilterShowActivity) context;
MasterImage.getImage().addObserver(this);
return MasterImage.getImage().getCurrentFilter();
}
- public void showToast(String text) {
- showToast(text, false);
- }
-
- public void showToast(String text, boolean important) {
- mToast = text;
- mShowToast = true;
- mImportantToast = important;
- invalidate();
-
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- mShowToast = false;
- invalidate();
- }
- }, 400);
- }
-
public Rect getImageBounds() {
Rect dst = new Rect();
getImagePreset().mGeoData.getPhotoBounds().roundOut(dst);
return invert;
}
- public Rect getDisplayedImageBounds() {
- return mImageBounds;
- }
-
public ImagePreset getImagePreset() {
return MasterImage.getImage().getPreset();
}
- public void drawToast(Canvas canvas) {
- if (mShowToast && mToast != null) {
- Paint paint = new Paint();
- paint.setTextSize(128);
- float textWidth = paint.measureText(mToast);
- int toastX = (int) ((getWidth() - textWidth) / 2.0f);
- int toastY = (int) (getHeight() / 3.0f);
-
- paint.setARGB(255, 0, 0, 0);
- canvas.drawText(mToast, toastX - 2, toastY - 2, paint);
- canvas.drawText(mToast, toastX - 2, toastY, paint);
- canvas.drawText(mToast, toastX, toastY - 2, paint);
- canvas.drawText(mToast, toastX + 2, toastY + 2, paint);
- canvas.drawText(mToast, toastX + 2, toastY, paint);
- canvas.drawText(mToast, toastX, toastY + 2, paint);
- if (mImportantToast) {
- paint.setARGB(255, 200, 0, 0);
- } else {
- paint.setARGB(255, 255, 255, 255);
- }
- canvas.drawText(mToast, toastX, toastY, paint);
- }
- }
-
@Override
public void onDraw(Canvas canvas) {
MasterImage.getImage().setImageShowSize(getWidth(), getHeight());
// TODO: center scale on gesture
canvas.scale(scaleFactor, scaleFactor, cx, cy);
canvas.translate(translation.x, translation.y);
- drawBackground(canvas);
drawImage(canvas, getFilteredImage(), true);
Bitmap highresPreview = MasterImage.getImage().getHighresImage();
if (highresPreview != null) {
}
canvas.restore();
- if (showTitle() && getImagePreset() != null) {
- mPaint.setARGB(200, 0, 0, 0);
- mPaint.setTextSize(mTextSize);
-
- Rect textRect = new Rect(0, 0, getWidth(), mTextSize + mTextPadding);
- canvas.drawRect(textRect, mPaint);
- mPaint.setARGB(255, 200, 200, 200);
- canvas.drawText(getImagePreset().name(), mTextPadding,
- 1.5f * mTextPadding, mPaint);
- }
-
Bitmap partialPreview = MasterImage.getImage().getPartialImage();
if (partialPreview != null) {
Rect src = new Rect(0, 0, partialPreview.getWidth(), partialPreview.getHeight());
canvas.restore();
canvas.restore();
-
- drawToast(canvas);
}
public void resetImageCaches(ImageShow caller) {
canvas.restore();
}
- public void drawBackground(Canvas canvas) {
- if (USE_BACKGROUND_IMAGE) {
- if (mBackgroundImage == null) {
- mBackgroundImage = mImageLoader.getBackgroundBitmap(getResources());
- }
- if (mBackgroundImage != null) {
- Rect s = new Rect(0, 0, mBackgroundImage.getWidth(),
- mBackgroundImage.getHeight());
- Rect d = new Rect(0, 0, getWidth(), getHeight());
- canvas.drawBitmap(mBackgroundImage, s, d, mPaint);
- }
- } else {
- canvas.drawARGB(0, 0, 0, 0);
- }
- }
-
- public boolean showTitle() {
- return false;
- }
-
public void setImageLoader(ImageLoader loader) {
mImageLoader = loader;
if (mImageLoader != null) {
}
}
- private void setDirtyGeometryFlag() {
- mDirtyGeometry = true;
- }
-
- protected void clearDirtyGeometryFlag() {
- mDirtyGeometry = false;
- }
-
- protected boolean getDirtyGeometryFlag() {
- return mDirtyGeometry;
- }
-
private void imageSizeChanged(Bitmap image) {
if (image == null || getImagePreset() == null)
return;
}
- public boolean updateGeometryFlags() {
- return true;
- }
-
public void updateImage() {
invalidate();
- if (!updateGeometryFlags()) {
- return;
- }
Bitmap bitmap = mImageLoader.getOriginalBitmapLarge();
if (bitmap != null) {
imageSizeChanged(bitmap);
return mScaleGestureDetector.isInProgress();
}
- protected boolean isOriginalDisabled() {
- return mOriginalDisabled;
- }
-
- protected void setOriginalDisabled(boolean originalDisabled) {
- mOriginalDisabled = originalDisabled;
- }
-
@Override
public boolean onTouchEvent(MotionEvent event) {
super.onTouchEvent(event);
return true;
}
- // listview stuff
- public void showOriginal(boolean show) {
- invalidate();
- }
-
@Override
public boolean onDoubleTap(MotionEvent arg0) {
mZoomIn = !mZoomIn;
@Override
public boolean onDoubleTapEvent(MotionEvent arg0) {
- // TODO Auto-generated method stub
return false;
}
@Override
public boolean onSingleTapConfirmed(MotionEvent arg0) {
- // TODO Auto-generated method stub
return false;
}
@Override
public boolean onDown(MotionEvent arg0) {
- // TODO Auto-generated method stub
return false;
}
@Override
public void onLongPress(MotionEvent arg0) {
- // TODO Auto-generated method stub
}
@Override
public boolean onScroll(MotionEvent arg0, MotionEvent arg1, float arg2, float arg3) {
- // TODO Auto-generated method stub
return false;
}
@Override
public void onShowPress(MotionEvent arg0) {
- // TODO Auto-generated method stub
}
@Override
public boolean onSingleTapUp(MotionEvent arg0) {
- // TODO Auto-generated method stub
return false;
}
}
public void openUtilityPanel(final LinearLayout accessoryViewList) {
- // TODO Auto-generated method stub
}
@Override
public boolean onScale(ScaleGestureDetector detector) {
MasterImage img = MasterImage.getImage();
float scaleFactor = img.getScaleFactor();
- Point pos = img.getTranslation();
scaleFactor = scaleFactor * detector.getScaleFactor();
if (scaleFactor > MasterImage.getImage().getMaxScaleFactor()) {
}
MasterImage.getImage().setScaleFactor(scaleFactor);
scaleFactor = img.getScaleFactor();
- pos = img.getTranslation();
float focusx = detector.getFocusX();
float focusy = detector.getFocusY();
float translateX = (focusx - mStartFocusX) / scaleFactor;