From 3eb4f642da18e1d4510b251fb136344595456372 Mon Sep 17 00:00:00 2001 From: nicolasroard Date: Fri, 5 Oct 2012 03:48:34 -0700 Subject: New UI... bug:7289525 bug:7289361 Change-Id: Ifde15d57f0d307417a1c7a7ae9b1122be873558f --- .../gallery3d/filtershow/FilterShowActivity.java | 539 ++++----------------- .../gallery3d/filtershow/PanelController.java | 474 ++++++++++++++++++ .../gallery3d/filtershow/imageshow/ImageShow.java | 119 ++++- .../gallery3d/filtershow/imageshow/ImageSlave.java | 20 + .../filtershow/imageshow/ImageStraighten.java | 29 +- .../gallery3d/filtershow/presets/ImagePreset.java | 4 +- .../gallery3d/filtershow/ui/ImageCurves.java | 24 +- .../gallery3d/filtershow/ui/SliderController.java | 11 +- 8 files changed, 730 insertions(+), 490 deletions(-) create mode 100644 src/com/android/gallery3d/filtershow/PanelController.java (limited to 'src/com/android/gallery3d') diff --git a/src/com/android/gallery3d/filtershow/FilterShowActivity.java b/src/com/android/gallery3d/filtershow/FilterShowActivity.java index 964c950dc..641259a48 100644 --- a/src/com/android/gallery3d/filtershow/FilterShowActivity.java +++ b/src/com/android/gallery3d/filtershow/FilterShowActivity.java @@ -1,26 +1,6 @@ package com.android.gallery3d.filtershow; -import java.io.File; -import java.io.IOException; -import java.util.Vector; - -import com.android.gallery3d.filtershow.cache.ImageLoader; -import com.android.gallery3d.filtershow.filters.*; -import com.android.gallery3d.filtershow.imageshow.ImageBorder; -import com.android.gallery3d.filtershow.imageshow.ImageShow; -import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; -import com.android.gallery3d.filtershow.imageshow.ImageStraighten; -import com.android.gallery3d.filtershow.imageshow.ImageZoom; -import com.android.gallery3d.filtershow.presets.*; -import com.android.gallery3d.filtershow.provider.SharedImageProvider; -import com.android.gallery3d.filtershow.tools.SaveCopyTask; -import com.android.gallery3d.filtershow.ui.ImageCurves; -import com.android.gallery3d.R; - -import android.net.Uri; -import android.os.Bundle; -import android.renderscript.RenderScript; import android.annotation.TargetApi; import android.app.ActionBar; import android.app.Activity; @@ -28,7 +8,8 @@ import android.content.ContentValues; import android.content.Intent; import android.content.res.Resources; import android.graphics.drawable.Drawable; -import android.graphics.drawable.NinePatchDrawable; +import android.net.Uri; +import android.os.Bundle; import android.util.Log; import android.util.TypedValue; import android.view.Gravity; @@ -40,20 +21,44 @@ import android.view.View.OnClickListener; import android.view.View.OnTouchListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; -import android.widget.Button; -import android.widget.FrameLayout; -import android.widget.FrameLayout.LayoutParams; import android.widget.ImageButton; import android.widget.LinearLayout; import android.widget.ListView; +import android.widget.SeekBar; import android.widget.ShareActionProvider; import android.widget.ShareActionProvider.OnShareTargetSelectedListener; import android.widget.Toast; +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.cache.ImageLoader; +import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.filters.ImageFilterBorder; +import com.android.gallery3d.filtershow.filters.ImageFilterRS; +import com.android.gallery3d.filtershow.imageshow.ImageBorder; +import com.android.gallery3d.filtershow.imageshow.ImageShow; +import com.android.gallery3d.filtershow.imageshow.ImageSmallFilter; +import com.android.gallery3d.filtershow.imageshow.ImageStraighten; +import com.android.gallery3d.filtershow.imageshow.ImageZoom; +import com.android.gallery3d.filtershow.presets.ImagePreset; +import com.android.gallery3d.filtershow.presets.ImagePresetBW; +import com.android.gallery3d.filtershow.presets.ImagePresetBWBlue; +import com.android.gallery3d.filtershow.presets.ImagePresetBWGreen; +import com.android.gallery3d.filtershow.presets.ImagePresetBWRed; +import com.android.gallery3d.filtershow.presets.ImagePresetOld; +import com.android.gallery3d.filtershow.presets.ImagePresetSaturated; +import com.android.gallery3d.filtershow.presets.ImagePresetXProcessing; +import com.android.gallery3d.filtershow.provider.SharedImageProvider; +import com.android.gallery3d.filtershow.tools.SaveCopyTask; +import com.android.gallery3d.filtershow.ui.ImageCurves; + +import java.io.File; +import java.util.Vector; + @TargetApi(16) public class FilterShowActivity extends Activity implements OnItemClickListener, OnShareTargetSelectedListener { + private final PanelController mPanelController = new PanelController(); private ImageLoader mImageLoader = null; private ImageShow mImageShow = null; private ImageCurves mImageCurves = null; @@ -65,34 +70,23 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, private View mListBorders = null; private View mListGeometry = null; private View mListColors = null; + private View mListFilterButtons = null; private ImageButton mFxButton = null; private ImageButton mBorderButton = null; private ImageButton mGeometryButton = null; private ImageButton mColorsButton = null; - private ImageButton mVignetteButton = null; - private ImageButton mCurvesButtonRGB = null; - private ImageButton mSharpenButton = null; - - private ImageButton mContrastButton = null; - private ImageButton mSaturationButton = null; - private ImageButton mTintButton = null; - private ImageButton mVibranceButton = null; - private ImageButton mExposureButton = null; - private ImageButton mShadowRecoveryButton = null; - private static final int SELECT_PICTURE = 1; private static final String LOGTAG = "FilterShowActivity"; - protected static final boolean ANIMATE_PANELS = false; + protected static final boolean ANIMATE_PANELS = true; private boolean mShowingHistoryPanel = false; private boolean mShowingImageStatePanel = false; - private Vector mImageViews = new Vector(); - private Vector mListViews = new Vector(); - private Vector mBottomPanelButtons = new Vector(); - private Vector mColorsPanelButtons = new Vector(); + private final Vector mImageViews = new Vector(); + private final Vector mListViews = new Vector(); + private final Vector mBottomPanelButtons = new Vector(); private ShareActionProvider mShareActionProvider; private File mSharedOutputFile = null; @@ -136,67 +130,60 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mListFx = findViewById(R.id.fxList); mListBorders = findViewById(R.id.bordersList); - mListGeometry = findViewById(R.id.gemoetryList); + mListGeometry = findViewById(R.id.geometryList); + mListFilterButtons = findViewById(R.id.filterButtonsList); mListColors = findViewById(R.id.colorsFxList); mListViews.add(mListFx); mListViews.add(mListBorders); mListViews.add(mListGeometry); + mListViews.add(mListFilterButtons); mListViews.add(mListColors); mFxButton = (ImageButton) findViewById(R.id.fxButton); mBorderButton = (ImageButton) findViewById(R.id.borderButton); mGeometryButton = (ImageButton) findViewById(R.id.geometryButton); mColorsButton = (ImageButton) findViewById(R.id.colorsButton); - mBottomPanelButtons.add(mFxButton); - mBottomPanelButtons.add(mBorderButton); - mBottomPanelButtons.add(mGeometryButton); - mBottomPanelButtons.add(mColorsButton); - mFxButton.setSelected(true); - - mVignetteButton = (ImageButton) findViewById(R.id.vignetteButton); - mCurvesButtonRGB = (ImageButton) findViewById(R.id.curvesButtonRGB); - mSharpenButton = (ImageButton) findViewById(R.id.sharpenButton); - mVibranceButton = (ImageButton) findViewById(R.id.vibranceButton); - mContrastButton = (ImageButton) findViewById(R.id.contrastButton); - mSaturationButton = (ImageButton) findViewById(R.id.saturationButton); - mTintButton = (ImageButton) findViewById(R.id.tintButton); - mExposureButton = (ImageButton) findViewById(R.id.exposureButton); - mShadowRecoveryButton = (ImageButton) findViewById(R.id.shadowRecoveryButton); - - mColorsPanelButtons.add(mVignetteButton); - mColorsPanelButtons.add(mCurvesButtonRGB); - mColorsPanelButtons.add(mSharpenButton); - mColorsPanelButtons.add(mContrastButton); - mColorsPanelButtons.add(mSaturationButton); - mColorsPanelButtons.add(mTintButton); - mColorsPanelButtons.add(mVibranceButton); - mColorsPanelButtons.add(mExposureButton); - mColorsPanelButtons.add(mShadowRecoveryButton); - - // TODO: instead of click listeners, make the activity the single - // listener and do a dispatch in the listener callback method. - findViewById(R.id.showOriginalButton).setOnTouchListener(createOnTouchShowOriginalButton()); - findViewById(R.id.straightenButton).setOnClickListener(createOnClickStraightenButton()); - findViewById(R.id.cropButton).setOnClickListener(createOnClickCropButton()); - findViewById(R.id.rotateButton).setOnClickListener(createOnClickRotateButton()); - findViewById(R.id.flipButton).setOnClickListener(createOnClickFlipButton()); - - mVignetteButton.setOnClickListener(createOnClickVignetteButton()); - mCurvesButtonRGB.setOnClickListener(createOnClickCurvesRGBButton()); - - mSharpenButton.setOnClickListener(createOnClickSharpenButton()); - mContrastButton.setOnClickListener(createOnClickContrastButton()); - mSaturationButton.setOnClickListener(createOnClickSaturationButton()); - - mTintButton.setOnClickListener(createOnClickTintButton()); - mVibranceButton.setOnClickListener(createOnClickVibranceButton()); - mExposureButton.setOnClickListener(createOnClickExposureButton()); - mShadowRecoveryButton.setOnClickListener(createOnClickShadowRecoveryButton()); - - mFxButton.setOnClickListener(createOnClickFxButton()); - mBorderButton.setOnClickListener(createOnClickBorderButton()); - mGeometryButton.setOnClickListener(createOnClickGeometryButton()); - mColorsButton.setOnClickListener(createOnClickColorsButton()); + + mImageShow.setImageLoader(mImageLoader); + mImageCurves.setImageLoader(mImageLoader); + mImageCurves.setMaster(mImageShow); + mImageBorders.setImageLoader(mImageLoader); + mImageBorders.setMaster(mImageShow); + mImageStraighten.setImageLoader(mImageLoader); + mImageStraighten.setMaster(mImageShow); + mImageZoom.setImageLoader(mImageLoader); + mImageZoom.setMaster(mImageShow); + + mPanelController.addImageView(findViewById(R.id.imageShow)); + mPanelController.addImageView(findViewById(R.id.imageCurves)); + mPanelController.addImageView(findViewById(R.id.imageBorder)); + mPanelController.addImageView(findViewById(R.id.imageStraighten)); + mPanelController.addImageView(findViewById(R.id.imageZoom)); + + mPanelController.addPanel(mFxButton, mListFx, 0); + mPanelController.addPanel(mBorderButton, mListBorders, 1); + + mPanelController.addPanel(mGeometryButton, mListGeometry, 2); + mPanelController.addComponent(mGeometryButton, findViewById(R.id.straightenButton)); + mPanelController.addComponent(mGeometryButton, findViewById(R.id.cropButton)); + mPanelController.addComponent(mGeometryButton, findViewById(R.id.rotateButton)); + mPanelController.addComponent(mGeometryButton, findViewById(R.id.flipButton)); + + mPanelController.addPanel(mColorsButton, mListColors, 3); + mPanelController.addComponent(mColorsButton, findViewById(R.id.vignetteButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.curvesButtonRGB)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.sharpenButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.vibranceButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.contrastButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.saturationButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.tintButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.exposureButton)); + mPanelController.addComponent(mColorsButton, findViewById(R.id.shadowRecoveryButton)); + + mPanelController.addView(findViewById(R.id.resetEffect)); + mPanelController.addView(findViewById(R.id.applyEffect)); + + findViewById(R.id.compareWithOriginalImage).setOnTouchListener(createOnTouchShowOriginalButton()); findViewById(R.id.resetOperationsButton).setOnClickListener( createOnClickResetOperationsButton()); @@ -211,15 +198,15 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, fillListImages(listFilters); fillListBorders(listBorders); - mImageShow.setImageLoader(mImageLoader); - mImageCurves.setImageLoader(mImageLoader); - mImageCurves.setMaster(mImageShow); - mImageBorders.setImageLoader(mImageLoader); - mImageBorders.setMaster(mImageShow); - mImageStraighten.setImageLoader(mImageLoader); - mImageStraighten.setMaster(mImageShow); - mImageZoom.setImageLoader(mImageLoader); - mImageZoom.setMaster(mImageShow); + SeekBar seekBar = (SeekBar) findViewById(R.id.filterSeekBar); + seekBar.setMax(200); + mImageShow.setSeekBar(seekBar); + mPanelController.setRowPanel(findViewById(R.id.secondRowPanel)); + mPanelController.setUtilityPanel(findViewById(R.id.filterButtonsList), + findViewById(R.id.compareWithOriginalImage), + findViewById(R.id.applyEffect)); + mPanelController.setMasterImage(mImageShow); + mPanelController.setCurrentPanel(mFxButton); Intent intent = getIntent(); String data = intent.getDataString(); @@ -246,7 +233,8 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, @Override public boolean onShareTargetSelected(ShareActionProvider arg0, Intent arg1) { - // First, let's tell the SharedImageProvider that it will need to wait for the image + // First, let's tell the SharedImageProvider that it will need to wait + // for the image Uri uri = Uri.withAppendedPath(SharedImageProvider.CONTENT_URI, Uri.encode(mSharedOutputFile.getAbsolutePath())); ContentValues values = new ContentValues(); @@ -293,6 +281,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, return true; } + @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.undoButton: { @@ -395,6 +384,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, // ////////////////////////////////////////////////////////////////////////////// // Some utility functions + // TODO: finish the cleanup. public void showOriginalViews(boolean value) { for (ImageShow views : mImageViews) { @@ -467,6 +457,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mShowingImageStatePanel = true; view.animate().setDuration(200).x(-viewList.getWidth()) .withLayer().withEndAction(new Runnable() { + @Override public void run() { viewList.setAlpha(0); viewList.setVisibility(View.VISIBLE); @@ -499,6 +490,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, mShowingHistoryPanel = true; view.animate().setDuration(200).x(-viewList.getWidth()) .withLayer().withEndAction(new Runnable() { + @Override public void run() { viewList.setAlpha(0); viewList.setVisibility(View.VISIBLE); @@ -534,350 +526,6 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, }; } - // ////////////////////////////////////////////////////////////////////////////// - // Now, let's deal with the bottom panel. - - private OnClickListener createOnClickFxButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - hideListViews(); - unselectBottomPanelButtons(); - mImageShow.setVisibility(View.VISIBLE); - mListFx.setVisibility(View.VISIBLE); - mFxButton.setSelected(true); - } - }; - } - - private OnClickListener createOnClickBorderButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - hideListViews(); - unselectBottomPanelButtons(); - mImageBorders.setVisibility(View.VISIBLE); - mListBorders.setVisibility(View.VISIBLE); - mBorderButton.setSelected(true); - } - }; - } - - private OnClickListener createOnClickGeometryButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - hideListViews(); - unselectBottomPanelButtons(); - mImageStraighten.setVisibility(View.VISIBLE); - mListGeometry.setVisibility(View.VISIBLE); - mGeometryButton.setSelected(true); - - if (ANIMATE_PANELS) { - mListGeometry.setX(mListGeometry.getWidth()); - mListGeometry.animate().setDuration(200).x(0).withLayer().start(); - } - } - }; - } - - private OnClickListener createOnClickColorsButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - hideListViews(); - unselectBottomPanelButtons(); - mListColors.setVisibility(View.VISIBLE); - mImageShow.setVisibility(View.VISIBLE); - mColorsButton.setSelected(true); - - if (ANIMATE_PANELS) { - View view = findViewById(R.id.listColorsFx); - view.setX(mListColors.getWidth()); - view.animate().setDuration(200).x(0).withLayer().start(); - } - } - }; - } - - // ////////////////////////////////////////////////////////////////////////////// - // Geometry sub-panel - - private OnClickListener createOnClickStraightenButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageStraighten.setVisibility(View.VISIBLE); - mImageStraighten.showToast("Straighten", true); - } - }; - } - - private OnClickListener createOnClickCropButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.showToast("Crop", true); - } - }; - } - - private OnClickListener createOnClickRotateButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.showToast("Rotate", true); - } - }; - } - - private OnClickListener createOnClickFlipButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.showToast("Flip", true); - } - }; - } - - // ////////////////////////////////////////////////////////////////////////////// - // Filters sub-panel - - private OnClickListener createOnClickVignetteButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Vignette"); - if (filter == null) { - ImageFilterVignette vignette = new ImageFilterVignette(); - ImagePreset copy = new ImagePreset(preset); - copy.add(vignette); - copy.setHistoryName(vignette.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Vignette"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mVignetteButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickCurvesRGBButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageCurves.setVisibility(View.VISIBLE); - unselectPanelButtons(mColorsPanelButtons); - mCurvesButtonRGB.setSelected(true); - mImageCurves.setUseRed(true); - mImageCurves.setUseGreen(true); - mImageCurves.setUseBlue(true); - mImageCurves.reloadCurve(); - } - }; - } - - private OnClickListener createOnClickSharpenButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageZoom.setVisibility(View.VISIBLE); - mImageZoom.setShowControls(true); - ImagePreset preset = mImageZoom.getImagePreset(); - ImageFilter filter = preset.getFilter("Sharpen"); - if (filter == null) { - ImageFilterSharpen sharpen = new ImageFilterSharpen(); - ImagePreset copy = new ImagePreset(preset); - copy.add(sharpen); - copy.setHistoryName(sharpen.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Sharpen"); - mImageZoom.setImagePreset(copy); - } - mImageZoom.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mSharpenButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickContrastButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Contrast"); - if (filter == null) { - ImageFilterContrast contrast = new ImageFilterContrast(); - ImagePreset copy = new ImagePreset(preset); - copy.add(contrast); - copy.setHistoryName(contrast.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Contrast"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mContrastButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickSaturationButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Saturated"); - if (filter == null) { - ImageFilterSaturated sat = new ImageFilterSaturated(); - ImagePreset copy = new ImagePreset(preset); - copy.add(sat); - copy.setHistoryName(sat.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Saturated"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mSaturationButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickTintButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Hue"); - if (filter == null) { - ImageFilterHue contrast = new ImageFilterHue(); - ImagePreset copy = new ImagePreset(preset); - copy.add(contrast); - copy.setHistoryName(contrast.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Hue"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mTintButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickVibranceButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Vibrance"); - if (filter == null) { - ImageFilterVibrance contrast = new ImageFilterVibrance(); - ImagePreset copy = new ImagePreset(preset); - copy.add(contrast); - copy.setHistoryName(contrast.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Vibrance"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mVibranceButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickExposureButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Exposure"); - if (filter == null) { - ImageFilterExposure bright = new ImageFilterExposure(); - ImagePreset copy = new ImagePreset(preset); - copy.add(bright); - copy.setHistoryName(bright.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Exposure"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mExposureButton.setSelected(true); - invalidateViews(); - } - }; - } - - private OnClickListener createOnClickShadowRecoveryButton() { - return new View.OnClickListener() { - @Override - public void onClick(View v) { - hideImageViews(); - mImageShow.setVisibility(View.VISIBLE); - mImageShow.setShowControls(true); - ImagePreset preset = mImageShow.getImagePreset(); - ImageFilter filter = preset.getFilter("Shadows"); - if (filter == null) { - ImageFilterShadows contrast = new ImageFilterShadows(); - ImagePreset copy = new ImagePreset(preset); - copy.add(contrast); - copy.setHistoryName(contrast.getName()); - copy.setIsFx(false); - filter = copy.getFilter("Shadows"); - mImageShow.setImagePreset(copy); - } - mImageShow.setCurrentFilter(filter); - unselectPanelButtons(mColorsPanelButtons); - mShadowRecoveryButton.setSelected(true); - invalidateViews(); - } - }; - } - // ////////////////////////////////////////////////////////////////////////////// public float getPixelsFromDip(float value) { @@ -930,6 +578,7 @@ public class FilterShowActivity extends Activity implements OnItemClickListener, SELECT_PICTURE); } + @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { Log.v(LOGTAG, "onActivityResult"); if (resultCode == RESULT_OK) { diff --git a/src/com/android/gallery3d/filtershow/PanelController.java b/src/com/android/gallery3d/filtershow/PanelController.java new file mode 100644 index 000000000..f9a1f1d16 --- /dev/null +++ b/src/com/android/gallery3d/filtershow/PanelController.java @@ -0,0 +1,474 @@ + +package com.android.gallery3d.filtershow; + +import android.text.Html; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewPropertyAnimator; +import android.widget.TextView; + +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.filters.ImageFilterContrast; +import com.android.gallery3d.filtershow.filters.ImageFilterExposure; +import com.android.gallery3d.filtershow.filters.ImageFilterHue; +import com.android.gallery3d.filtershow.filters.ImageFilterSaturated; +import com.android.gallery3d.filtershow.filters.ImageFilterShadows; +import com.android.gallery3d.filtershow.filters.ImageFilterSharpen; +import com.android.gallery3d.filtershow.filters.ImageFilterVibrance; +import com.android.gallery3d.filtershow.filters.ImageFilterVignette; +import com.android.gallery3d.filtershow.imageshow.ImageShow; +import com.android.gallery3d.filtershow.presets.ImagePreset; +import com.android.gallery3d.filtershow.ui.ImageCurves; + +import java.util.HashMap; +import java.util.Vector; + +public class PanelController implements OnClickListener { + private static int PANEL = 0; + private static int COMPONENT = 1; + private static int VERTICAL_MOVE = 0; + private static int HORIZONTAL_MOVE = 1; + private static final int ANIM_DURATION = 200; + + class Panel { + private final View mView; + private final View mContainer; + private int mPosition = 0; + private final Vector mSubviews = new Vector(); + + public Panel(View view, View container, int position) { + mView = view; + mContainer = container; + mPosition = position; + } + + public void addView(View view) { + mSubviews.add(view); + } + + public int getPosition() { + return mPosition; + } + + public ViewPropertyAnimator unselect(int newPos, int move) { + ViewPropertyAnimator anim = mContainer.animate(); + mView.setSelected(false); + mContainer.setX(0); + mContainer.setY(0); + int delta = 0; + int w = mRowPanel.getWidth(); + int h = mRowPanel.getHeight(); + if (move == HORIZONTAL_MOVE) { + if (newPos > mPosition) { + delta = -w; + } else { + delta = w; + } + anim.x(delta); + } else if (move == VERTICAL_MOVE) { + anim.y(h); + } + anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { + @Override + public void run() { + mContainer.setVisibility(View.GONE); + } + }); + return anim; + } + + public ViewPropertyAnimator select(int oldPos, int move) { + mView.setSelected(true); + mContainer.setVisibility(View.VISIBLE); + mContainer.setX(0); + mContainer.setY(0); + ViewPropertyAnimator anim = mContainer.animate(); + int w = mRowPanel.getWidth(); + int h = mRowPanel.getHeight(); + if (move == HORIZONTAL_MOVE) { + if (oldPos < mPosition) { + mContainer.setX(w); + } else { + mContainer.setX(-w); + } + anim.x(0); + } else if (move == VERTICAL_MOVE) { + mContainer.setY(h); + anim.y(0); + } + anim.setDuration(ANIM_DURATION).withLayer(); + return anim; + } + } + + class UtilityPanel { + private final View mView; + private final View mCompareView; + private final TextView mTextView; + private boolean mSelected = false; + private String mEffectName = null; + private int mParameterValue = 0; + + public UtilityPanel(View view, View compareView, View textView) { + mView = view; + mCompareView = compareView; + mTextView = (TextView) textView; + } + + public boolean selected() { + return mSelected; + } + + public void onNewValue(int value) { + mParameterValue = value; + updateText(); + } + + public void setGeometryEffect(boolean isGeometryEffect) { + if (isGeometryEffect) { + mCompareView.setVisibility(View.INVISIBLE); + } else { + mCompareView.setVisibility(View.VISIBLE); + } + } + + public void setEffectName(String effectName) { + mEffectName = effectName; + updateText(); + } + + public void updateText() { + mTextView.setText(Html.fromHtml("Apply" + "
" + mEffectName + "
" + + mParameterValue + "
")); + } + + public ViewPropertyAnimator unselect() { + ViewPropertyAnimator anim = mView.animate(); + mView.setX(0); + mView.setY(0); + int h = mRowPanel.getHeight(); + anim.y(-h); + anim.setDuration(ANIM_DURATION).withLayer().withEndAction(new Runnable() { + @Override + public void run() { + mView.setVisibility(View.GONE); + } + }); + mSelected = false; + return anim; + } + + public ViewPropertyAnimator select() { + mView.setVisibility(View.VISIBLE); + int h = mRowPanel.getHeight(); + mView.setX(0); + mView.setY(-h); + updateText(); + ViewPropertyAnimator anim = mView.animate(); + anim.y(0); + anim.setDuration(ANIM_DURATION).withLayer(); + mSelected = true; + return anim; + } + } + + class ViewType { + private final int mType; + private final View mView; + + public ViewType(View view, int type) { + mView = view; + mType = type; + } + + public int type() { + return mType; + } + } + + private final HashMap mPanels = new HashMap(); + private final HashMap mViews = new HashMap(); + private final Vector mImageViews = new Vector(); + private View mCurrentPanel = null; + private View mRowPanel = null; + private UtilityPanel mUtilityPanel = null; + private ImageShow mMasterImage = null; + private ImageShow mCurrentImage = null; + + public void addView(View view) { + view.setOnClickListener(this); + mViews.put(view, new ViewType(view, COMPONENT)); + } + + public void addPanel(View view, View container, int position) { + mPanels.put(view, new Panel(view, container, position)); + view.setOnClickListener(this); + mViews.put(view, new ViewType(view, PANEL)); + } + + public void addComponent(View aPanel, View component) { + Panel panel = mPanels.get(aPanel); + if (panel == null) { + return; + } + panel.addView(component); + component.setOnClickListener(this); + mViews.put(component, new ViewType(component, COMPONENT)); + } + + public void addImageView(View view) { + mImageViews.add(view); + ImageShow imageShow = (ImageShow) view; + imageShow.setPanelController(this); + } + + public void onNewValue(int value) { + mUtilityPanel.onNewValue(value); + } + + public void setCurrentPanel(View panel) { + showPanel(panel); + } + + public void setRowPanel(View rowPanel) { + mRowPanel = rowPanel; + } + + public void setUtilityPanel(View utilityPanel, View compareView, View textView) { + mUtilityPanel = new UtilityPanel(utilityPanel, compareView, textView); + } + + public void setMasterImage(ImageShow imageShow) { + mMasterImage = imageShow; + } + + @Override + public void onClick(View view) { + ViewType type = mViews.get(view); + if (type.type() == PANEL) { + showPanel(view); + } else if (type.type() == COMPONENT) { + showComponent(view); + } + } + + public ImageShow showImageView(int id) { + ImageShow image = null; + for (View view : mImageViews) { + if (view.getId() == id) { + view.setVisibility(View.VISIBLE); + image = (ImageShow) view; + } else { + view.setVisibility(View.GONE); + } + } + return image; + } + + public void showDefaultImageView() { + showImageView(R.id.imageShow).setShowControls(false); + mMasterImage.setCurrentFilter(null); + } + + public void showPanel(View view) { + view.setVisibility(View.VISIBLE); + boolean removedUtilityPanel = false; + Panel current = mPanels.get(mCurrentPanel); + if (mUtilityPanel != null && mUtilityPanel.selected()) { + ViewPropertyAnimator anim1 = mUtilityPanel.unselect(); + removedUtilityPanel = true; + anim1.start(); + if (mCurrentPanel == view) { + ViewPropertyAnimator anim2 = current.select(-1, VERTICAL_MOVE); + anim2.start(); + showDefaultImageView(); + } + } + + if (mCurrentPanel == view) { + return; + } + + Panel panel = mPanels.get(view); + if (!removedUtilityPanel) { + int currentPos = -1; + if (current != null) { + currentPos = current.getPosition(); + } + ViewPropertyAnimator anim1 = panel.select(currentPos, HORIZONTAL_MOVE); + anim1.start(); + if (current != null) { + ViewPropertyAnimator anim2 = current.unselect(panel.getPosition(), HORIZONTAL_MOVE); + anim2.start(); + } + } else { + ViewPropertyAnimator anim = panel.select(-1, VERTICAL_MOVE); + anim.start(); + } + showDefaultImageView(); + mCurrentPanel = view; + } + + public ImagePreset getImagePreset() { + return mMasterImage.getImagePreset(); + } + + public ImageFilter setImagePreset(ImageFilter filter, String name) { + ImagePreset copy = new ImagePreset(getImagePreset()); + copy.add(filter); + copy.setHistoryName(filter.getName()); + copy.setIsFx(false); + mMasterImage.setImagePreset(copy); + return filter; + } + + public void ensureFilter(String name) { + ImagePreset preset = getImagePreset(); + ImageFilter filter = preset.getFilter(name); + if (filter == null && name.equalsIgnoreCase("Vignette")) { + filter = setImagePreset(new ImageFilterVignette(), name); + } + if (filter == null && name.equalsIgnoreCase("Sharpen")) { + filter = setImagePreset(new ImageFilterSharpen(), name); + } + if (filter == null && name.equalsIgnoreCase("Contrast")) { + filter = setImagePreset(new ImageFilterContrast(), name); + } + if (filter == null && name.equalsIgnoreCase("Saturated")) { + filter = setImagePreset(new ImageFilterSaturated(), name); + } + if (filter == null && name.equalsIgnoreCase("Hue")) { + filter = setImagePreset(new ImageFilterHue(), name); + } + if (filter == null && name.equalsIgnoreCase("Exposure")) { + filter = setImagePreset(new ImageFilterExposure(), name); + } + if (filter == null && name.equalsIgnoreCase("Vibrance")) { + filter = setImagePreset(new ImageFilterVibrance(), name); + } + if (filter == null && name.equalsIgnoreCase("Shadows")) { + filter = setImagePreset(new ImageFilterShadows(), name); + } + mMasterImage.setCurrentFilter(filter); + } + + public void showComponent(View view) { + if (mUtilityPanel != null && !mUtilityPanel.selected()) { + Panel current = mPanels.get(mCurrentPanel); + ViewPropertyAnimator anim1 = current.unselect(-1, VERTICAL_MOVE); + anim1.start(); + if (mUtilityPanel != null) { + ViewPropertyAnimator anim2 = mUtilityPanel.select(); + anim2.start(); + } + } + + if (mCurrentImage != null) { + mCurrentImage.unselect(); + } + + switch (view.getId()) { + case R.id.straightenButton: { + mCurrentImage = showImageView(R.id.imageStraighten); + mUtilityPanel.setEffectName("Straighten"); + mUtilityPanel.setGeometryEffect(true); + break; + } + case R.id.cropButton: { + mCurrentImage = showImageView(R.id.imageShow); + mUtilityPanel.setEffectName("Crop"); + mUtilityPanel.setGeometryEffect(true); + break; + } + case R.id.rotateButton: { + mCurrentImage = showImageView(R.id.imageShow); + mUtilityPanel.setEffectName("Rotate"); + mUtilityPanel.setGeometryEffect(true); + break; + } + case R.id.flipButton: { + mCurrentImage = showImageView(R.id.imageShow); + mUtilityPanel.setEffectName("Flip"); + mUtilityPanel.setGeometryEffect(true); + break; + } + case R.id.vignetteButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Vignette"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Vignette"); + break; + } + case R.id.curvesButtonRGB: { + ImageCurves curves = (ImageCurves) showImageView(R.id.imageCurves); + mUtilityPanel.setEffectName("Curves"); + mUtilityPanel.setGeometryEffect(true); + curves.setUseRed(true); + curves.setUseGreen(true); + curves.setUseBlue(true); + curves.reloadCurve(); + mCurrentImage = curves; + break; + } + case R.id.sharpenButton: { + mCurrentImage = showImageView(R.id.imageZoom).setShowControls(true); + mUtilityPanel.setEffectName("Sharpen"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Sharpen"); + break; + } + case R.id.contrastButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Contrast"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Contrast"); + break; + } + case R.id.saturationButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Saturated"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Saturated"); + break; + } + case R.id.tintButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Hue"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Hue"); + break; + } + case R.id.exposureButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Exposure"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Exposure"); + break; + } + case R.id.vibranceButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Vibrance"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Vibrance"); + break; + } + case R.id.shadowRecoveryButton: { + mCurrentImage = showImageView(R.id.imageShow).setShowControls(true); + mUtilityPanel.setEffectName("Shadows"); + mUtilityPanel.setGeometryEffect(false); + ensureFilter("Shadows"); + break; + } + case R.id.resetEffect: { + mCurrentImage.resetParameter(); + break; + } + case R.id.applyEffect: { + showPanel(mCurrentPanel); + break; + } + } + mCurrentImage.select(); + } +} diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java index 2a660d40f..da38d3b7e 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageShow.java @@ -1,36 +1,33 @@ package com.android.gallery3d.filtershow.imageshow; -import com.android.gallery3d.filtershow.FilterShowActivity; -import com.android.gallery3d.filtershow.HistoryAdapter; -import com.android.gallery3d.filtershow.ImageStateAdapter; -import com.android.gallery3d.filtershow.cache.ImageLoader; -import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.presets.ImagePreset; -import com.android.gallery3d.filtershow.ui.SliderListener; -import com.android.gallery3d.filtershow.ui.SliderController; -import com.android.gallery3d.R; -import com.android.gallery3d.R.id; -import com.android.gallery3d.R.layout; - -import java.io.File; - import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Rect; -import android.net.Uri; import android.os.Handler; -import android.os.Message; import android.util.AttributeSet; -import android.util.Log; import android.view.MotionEvent; import android.view.View; -import android.view.View.MeasureSpec; import android.widget.ArrayAdapter; +import android.widget.SeekBar; +import android.widget.SeekBar.OnSeekBarChangeListener; -public class ImageShow extends View implements SliderListener { +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.FilterShowActivity; +import com.android.gallery3d.filtershow.HistoryAdapter; +import com.android.gallery3d.filtershow.ImageStateAdapter; +import com.android.gallery3d.filtershow.PanelController; +import com.android.gallery3d.filtershow.cache.ImageLoader; +import com.android.gallery3d.filtershow.filters.ImageFilter; +import com.android.gallery3d.filtershow.presets.ImagePreset; +import com.android.gallery3d.filtershow.ui.SliderController; +import com.android.gallery3d.filtershow.ui.SliderListener; + +import java.io.File; + +public class ImageShow extends View implements SliderListener, OnSeekBarChangeListener { private static final String LOGTAG = "ImageShow"; @@ -64,8 +61,47 @@ public class ImageShow extends View implements SliderListener { protected float mTouchX = 0; protected float mTouchY = 0; - private Handler mHandler = new Handler(); + private SeekBar mSeekBar = null; + private PanelController mController = null; + + private final Handler mHandler = new Handler(); + + public void select() { + if (getCurrentFilter() != null) { + int parameter = getCurrentFilter().getParameter(); + updateSeekBar(parameter); + } + } + public void updateSeekBar(int parameter) { + if (mSeekBar == null) { + return; + } + int progress = parameter + 100; + mSeekBar.setProgress(progress); + if (getPanelController() != null) { + getPanelController().onNewValue(parameter); + } + } + + public void unselect() { + + } + + public void resetParameter() { + onNewValue(0); + mSliderController.reset(); + } + + public void setPanelController(PanelController controller) { + mController = controller; + } + + public PanelController getPanelController() { + return mController; + } + + @Override public void onNewValue(int value) { if (getCurrentFilter() != null) { getCurrentFilter().setParameter(value); @@ -74,15 +110,21 @@ public class ImageShow extends View implements SliderListener { mImageLoader.resetImageForPreset(getImagePreset(), this); getImagePreset().fillImageStateAdapter(mImageStateAdapter); } + if (getPanelController() != null) { + getPanelController().onNewValue(value); + } + updateSeekBar(value); invalidate(); } + @Override public void onTouchDown(float x, float y) { mTouchX = x; mTouchY = y; invalidate(); } + @Override public void onTouchUp() { } @@ -102,6 +144,7 @@ public class ImageShow extends View implements SliderListener { R.id.rowTextView); } + @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int parentWidth = MeasureSpec.getSize(widthMeasureSpec); int parentHeight = MeasureSpec.getSize(heightMeasureSpec); @@ -110,6 +153,11 @@ public class ImageShow extends View implements SliderListener { mSliderController.setHeight(parentHeight); } + public void setSeekBar(SeekBar seekBar) { + mSeekBar = seekBar; + mSeekBar.setOnSeekBarChangeListener(this); + } + public void setCurrentFilter(ImageFilter filter) { mCurrentFilter = filter; } @@ -180,6 +228,7 @@ public class ImageShow extends View implements SliderListener { } } + @Override public void onDraw(Canvas canvas) { drawBackground(canvas); getFilteredImage(); @@ -262,8 +311,18 @@ public class ImageShow extends View implements SliderListener { } } - public void setShowControls(boolean value) { + public ImageShow setShowControls(boolean value) { mShowControls = value; + if (mShowControls) { + if (mSeekBar != null) { + mSeekBar.setVisibility(View.VISIBLE); + } + } else { + if (mSeekBar != null) { + mSeekBar.setVisibility(View.INVISIBLE); + } + } + return this; } public boolean showControls() { @@ -324,6 +383,7 @@ public class ImageShow extends View implements SliderListener { mImageLoader.saveImage(getImagePreset(), filterShowActivity, file); } + @Override public boolean onTouchEvent(MotionEvent event) { super.onTouchEvent(event); mSliderController.onTouchEvent(event); @@ -368,4 +428,21 @@ public class ImageShow extends View implements SliderListener { mImageRotation = imageRotation; mImageRotationZoomFactor = imageRotationZoomFactor; } + + @Override + public void onProgressChanged(SeekBar arg0, int progress, boolean arg2) { + onNewValue(progress - 100); + } + + @Override + public void onStartTrackingTouch(SeekBar arg0) { + // TODO Auto-generated method stub + + } + + @Override + public void onStopTrackingTouch(SeekBar arg0) { + // TODO Auto-generated method stub + + } } diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java index debaec708..4fdf8303a 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageSlave.java @@ -4,6 +4,7 @@ import android.content.Context; import android.graphics.Canvas; import android.util.AttributeSet; +import com.android.gallery3d.filtershow.PanelController; import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.presets.ImagePreset; @@ -26,18 +27,22 @@ public class ImageSlave extends ImageShow { mMasterImageShow = master; } + @Override public ImagePreset getImagePreset() { return mMasterImageShow.getImagePreset(); } + @Override public void setImagePreset(ImagePreset preset, boolean addToHistory) { mMasterImageShow.setImagePreset(preset, addToHistory); } + @Override public void setCurrentFilter(ImageFilter filter) { mMasterImageShow.setCurrentFilter(filter); } + @Override public ImageFilter getCurrentFilter() { return mMasterImageShow.getCurrentFilter(); } @@ -46,20 +51,35 @@ public class ImageSlave extends ImageShow { mMasterImageShow.setImageRotation(mImageRotation, mImageRotationZoomFactor); } + @Override public boolean showTitle() { return false; } + @Override public float getImageRotation() { return mMasterImageShow.getImageRotation(); } + @Override public float getImageRotationZoomFactor() { return mMasterImageShow.getImageRotationZoomFactor(); } + @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); } + @Override + public void setPanelController(PanelController controller) { + mMasterImageShow.setPanelController(controller); + } + + @Override + public PanelController getPanelController() { + return mMasterImageShow.getPanelController(); + } + + } diff --git a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java index eb034bf10..99aa389ac 100644 --- a/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java +++ b/src/com/android/gallery3d/filtershow/imageshow/ImageStraighten.java @@ -1,26 +1,24 @@ package com.android.gallery3d.filtershow.imageshow; -import com.android.gallery3d.filtershow.presets.ImagePreset; - import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.graphics.Path; -import android.graphics.Rect; import android.graphics.RectF; import android.util.AttributeSet; -import android.util.Log; import android.view.MotionEvent; +import com.android.gallery3d.filtershow.presets.ImagePreset; + public class ImageStraighten extends ImageSlave { private float mImageRotation = 0; private float mImageRotationZoomFactor = 0; - private float mMinAngle = -45; - private float mMaxAngle = 45; + private final float mMinAngle = -45; + private final float mMaxAngle = 45; private float mBaseAngle = 0; private float mAngle = 0; private float mCenterX; @@ -69,6 +67,7 @@ public class ImageStraighten extends ImageSlave { public void setActionUp() { mMode = MODES.UP; updatePreset(); + invalidate(); } public void setNoAction() { @@ -81,6 +80,16 @@ public class ImageStraighten extends ImageSlave { setImagePreset(copy); } + @Override + public void resetParameter() { + super.resetParameter(); + mImageRotation = 0; + mAngle = 0; + updatePreset(); + invalidate(); + } + + @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getActionMasked()) { case (MotionEvent.ACTION_DOWN): @@ -97,6 +106,9 @@ public class ImageStraighten extends ImageSlave { } mImageRotation = mAngle; updateAngle(); + if (getPanelController() != null) { + getPanelController().onNewValue((int) mImageRotation); + } invalidate(); return true; } @@ -124,11 +136,16 @@ public class ImageStraighten extends ImageSlave { // /////////////////////////////////////////////////////////////////////////// + @Override public void onNewValue(int value) { mImageRotation = value; + if (getPanelController() != null) { + getPanelController().onNewValue(value); + } invalidate(); } + @Override public void onDraw(Canvas canvas) { mCenterX = getWidth() / 2; mCenterY = getHeight() / 2; diff --git a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java index 69b3f0939..8dd81d4d0 100644 --- a/src/com/android/gallery3d/filtershow/presets/ImagePreset.java +++ b/src/com/android/gallery3d/filtershow/presets/ImagePreset.java @@ -1,8 +1,6 @@ package com.android.gallery3d.filtershow.presets; -import java.util.Vector; - import android.graphics.Bitmap; import android.graphics.RectF; import android.util.Log; @@ -12,6 +10,8 @@ import com.android.gallery3d.filtershow.filters.ImageFilter; import com.android.gallery3d.filtershow.filters.ImageFilterStraighten; import com.android.gallery3d.filtershow.imageshow.ImageShow; +import java.util.Vector; + public class ImagePreset { private static final String LOGTAG = "ImagePreset"; diff --git a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java index 3da058bc7..fb18bcf8f 100644 --- a/src/com/android/gallery3d/filtershow/ui/ImageCurves.java +++ b/src/com/android/gallery3d/filtershow/ui/ImageCurves.java @@ -1,28 +1,22 @@ package com.android.gallery3d.filtershow.ui; -import com.android.gallery3d.filtershow.filters.ImageFilter; -import com.android.gallery3d.filtershow.filters.ImageFilterCurves; -import com.android.gallery3d.filtershow.imageshow.ImageShow; -import com.android.gallery3d.filtershow.imageshow.ImageSlave; -import com.android.gallery3d.filtershow.presets.ImagePreset; -import com.android.gallery3d.filtershow.ui.ControlPoint; -import com.android.gallery3d.filtershow.ui.Spline; -import com.android.gallery3d.R; - import android.content.Context; import android.graphics.Canvas; import android.graphics.Paint; import android.graphics.Path; -import android.os.Message; import android.util.AttributeSet; -import android.util.Log; import android.view.MenuItem; import android.view.MotionEvent; import android.view.View; import android.widget.PopupMenu; import android.widget.Toast; +import com.android.gallery3d.R; +import com.android.gallery3d.filtershow.filters.ImageFilterCurves; +import com.android.gallery3d.filtershow.imageshow.ImageSlave; +import com.android.gallery3d.filtershow.presets.ImagePreset; + public class ImageCurves extends ImageSlave { private static final String LOGTAG = "ImageCurves"; @@ -47,6 +41,7 @@ public class ImageCurves extends ImageSlave { resetCurve(); } + @Override public boolean showTitle() { return false; } @@ -77,6 +72,12 @@ public class ImageCurves extends ImageSlave { } } + @Override + public void resetParameter() { + super.resetParameter(); + resetCurve(); + } + public void resetCurve() { mSpline = new Spline(); @@ -87,6 +88,7 @@ public class ImageCurves extends ImageSlave { } } + @Override public void onDraw(Canvas canvas) { super.onDraw(canvas); diff --git a/src/com/android/gallery3d/filtershow/ui/SliderController.java b/src/com/android/gallery3d/filtershow/ui/SliderController.java index f2f0df30b..99f66b185 100644 --- a/src/com/android/gallery3d/filtershow/ui/SliderController.java +++ b/src/com/android/gallery3d/filtershow/ui/SliderController.java @@ -5,8 +5,6 @@ import android.graphics.Canvas; import android.graphics.Paint; import android.view.MotionEvent; -import android.util.Log; - public class SliderController { private static final String LOGTAG = "SliderController"; @@ -22,7 +20,7 @@ public class SliderController { private String mToast = null; - private Paint mPaint = new Paint(); + private final Paint mPaint = new Paint(); private SliderListener mListener = null; @@ -37,7 +35,6 @@ public class SliderController { if (mMode == MODES.NONE || mMode == MODES.UP) { return; } - drawToast(canvas); } public void drawToast(Canvas canvas) { @@ -62,7 +59,7 @@ public class SliderController { } protected int computeValue() { - int delta = (int) (100 * (getCurrentX() - getCenterX()) / (float) getWidth()); + int delta = (int) (100 * (getCurrentX() - getCenterX()) / getWidth()); int value = mOriginalValue + delta; if (value < -100) { value = -100; @@ -170,4 +167,8 @@ public class SliderController { return true; } + public void reset() { + mOriginalValue = 0; + } + } -- cgit v1.2.3