blob: 285e06b6462f1c9264f9d509486c0233dde0208b [file] [log] [blame]
/*
* Copyright (C) 2010 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.photoeditor.actions;
import android.content.Context;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.os.SystemClock;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.android.gallery3d.R;
import com.android.gallery3d.photoeditor.PhotoView;
/**
* Tool kit used by effect actions to retrieve tools, including managing tool creation/removal.
*/
public class EffectToolKit {
public enum ScaleType {
LIGHT, SHADOW, COLOR, GENERIC
}
private final LayoutInflater inflater;
private final PhotoView photoView;
private final ViewGroup toolPanel;
private final ViewGroup toolFullscreen;
public EffectToolKit(View root, CharSequence label) {
inflater = (LayoutInflater) root.getContext().getSystemService(
Context.LAYOUT_INFLATER_SERVICE);
// Create effect tool panel as the first child of effects-bar.
ViewGroup effectsBar = (ViewGroup) root.findViewById(R.id.effects_bar);
toolPanel = (ViewGroup) inflater.inflate(
R.layout.photoeditor_effect_tool_panel, effectsBar, false);
((TextView) toolPanel.findViewById(R.id.effect_label)).setText(label);
effectsBar.addView(toolPanel, 0);
// Create effect tool full-screen on top of photo-view and place it within the same
// view group that contains photo-view.
photoView = (PhotoView) root.findViewById(R.id.photo_view);
ViewGroup parent = (ViewGroup) photoView.getParent();
toolFullscreen = (ViewGroup) inflater.inflate(
R.layout.photoeditor_effect_tool_fullscreen, parent, false);
parent.addView(toolFullscreen, parent.indexOfChild(photoView) + 1);
}
public PhotoView getPhotoView() {
return photoView;
}
/**
* Cancel pending touch events and stop dispatching further touch events to tools.
*/
public void cancel() {
long now = SystemClock.uptimeMillis();
MotionEvent cancelEvent = MotionEvent.obtain(now, now, MotionEvent.ACTION_CANCEL, 0, 0, 0);
toolFullscreen.dispatchTouchEvent(cancelEvent);
toolPanel.dispatchTouchEvent(cancelEvent);
cancelEvent.recycle();
View.OnTouchListener listener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
// Consume all further touch events and don't dispatch them.
return true;
}
};
toolFullscreen.setOnTouchListener(listener);
toolPanel.setOnTouchListener(listener);
}
/**
* Close to remove all created tools.
*/
public void close() {
((ViewGroup) toolFullscreen.getParent()).removeView(toolFullscreen);
((ViewGroup) toolPanel.getParent()).removeView(toolPanel);
}
private View addFullscreenTool(int toolId) {
FullscreenToolView tool = (FullscreenToolView) inflater.inflate(
toolId, toolFullscreen, false);
tool.setPhotoBounds(getPhotoView().getPhotoBounds());
toolFullscreen.addView(tool);
return tool;
}
private View addPanelTool(int toolId) {
// Add the tool right above the effect-label in the panel.
View tool = inflater.inflate(toolId, toolPanel, false);
toolPanel.addView(tool, toolPanel.indexOfChild(toolPanel.findViewById(R.id.effect_label)));
return tool;
}
private Drawable getScalePickerProgressDrawable(Resources res, ScaleType type) {
switch (type) {
case LIGHT:
return res.getDrawable(R.drawable.photoeditor_scale_seekbar_light);
case SHADOW:
return res.getDrawable(R.drawable.photoeditor_scale_seekbar_shadow);
case COLOR:
return res.getDrawable(R.drawable.photoeditor_scale_seekbar_color);
}
return res.getDrawable(R.drawable.photoeditor_scale_seekbar_generic);
}
public ScaleSeekBar addScalePicker(ScaleType type) {
ScaleSeekBar scalePicker = (ScaleSeekBar) addPanelTool(
R.layout.photoeditor_scale_seekbar);
scalePicker.setProgressDrawable(getScalePickerProgressDrawable(
toolPanel.getResources(), type));
return scalePicker;
}
public ColorSeekBar addColorPicker() {
return (ColorSeekBar) addPanelTool(R.layout.photoeditor_color_seekbar);
}
public DoodleView addDoodleView() {
return (DoodleView) addFullscreenTool(R.layout.photoeditor_doodle_view);
}
public TouchView addTouchView() {
return (TouchView) addFullscreenTool(R.layout.photoeditor_touch_view);
}
public FlipView addFlipView() {
return (FlipView) addFullscreenTool(R.layout.photoeditor_flip_view);
}
public RotateView addRotateView() {
return (RotateView) addFullscreenTool(R.layout.photoeditor_rotate_view);
}
public CropView addCropView() {
return (CropView) addFullscreenTool(R.layout.photoeditor_crop_view);
}
}