Skip to content

Commit

Permalink
Mainly implemented selection. Added convenience methods and getters.
Browse files Browse the repository at this point in the history
  • Loading branch information
emmanuelproulx committed Aug 30, 2017
1 parent 0f66111 commit 602c8b3
Show file tree
Hide file tree
Showing 3 changed files with 105 additions and 8 deletions.
4 changes: 1 addition & 3 deletions FabricView.iml
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,11 @@
<sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/rs" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/src/test/shaders" isTestSource="true" />
<excludeFolder url="file://$MODULE_DIR$/build/.DS_Store" />
<excludeFolder url="file://$MODULE_DIR$/build/android-profile" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/assets" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/blame" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/bundles" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/classes" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/dependency-cache" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/incremental-safeguard" />
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/jniLibs" />
Expand All @@ -95,7 +94,6 @@
<excludeFolder url="file://$MODULE_DIR$/build/intermediates/transforms" />
<excludeFolder url="file://$MODULE_DIR$/build/outputs" />
<excludeFolder url="file://$MODULE_DIR$/build/tmp" />
<excludeFolder url="jar://$MODULE_DIR$/build/intermediates/mockable-android-23.jar!/" />
</content>
<orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK" />
<orderEntry type="sourceFolder" forTests="false" />
Expand Down
11 changes: 11 additions & 0 deletions src/main/java/com/agsw/FabricView/DrawableObjects/CDrawable.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,10 @@
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.RectF;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
Expand Down Expand Up @@ -133,4 +135,13 @@ public boolean equals(Object obj) {
other.getWidth() == this.getWidth() &&
other.getPaint() == this.getPaint();
}

public List<CTransform> getTransforms() {
return mTransforms;
}

public RectF getBounds() {
return new RectF((float)Math.floor(getXcoords()), (float)Math.floor(getYcoords()),
(float)Math.ceil(getXcoords()+getWidth()), (float)Math.ceil(getYcoords()+getHeight()));
}
}
98 changes: 93 additions & 5 deletions src/main/java/com/agsw/FabricView/FabricView.java
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.DashPathEffect;
import android.graphics.Paint;
import android.graphics.RectF;
import android.util.AttributeSet;
Expand All @@ -19,6 +20,8 @@
import com.agsw.FabricView.DrawableObjects.CTransform;

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

/**
* Created by antwan on 10/3/2015.
Expand All @@ -32,6 +35,7 @@ public class FabricView extends View {
// painting objects and properties
private ArrayList<CDrawable> mDrawableList = new ArrayList<>();
private ArrayList<CDrawable> mUndoList = new ArrayList<>();
private CDrawable selected = null;
private int mColor = Color.BLACK;
private int savePoint = 0;

Expand All @@ -50,7 +54,7 @@ public class FabricView extends View {
private boolean mRedrawBackground;

// background mode for the library, default to blank
private int mBackgroundMode = BACKGROUND_STYLE_GRAPH_PAPER;
private int mBackgroundMode = BACKGROUND_STYLE_BLANK;

// Default Notebook left line color
public static final int NOTEBOOK_LEFT_LINE_COLOR = Color.RED;
Expand All @@ -65,6 +69,7 @@ public class FabricView extends View {
// keep track of path and paint being in use
CPath currentPath;
Paint currentPaint;
Paint selectionPaint;

/*********************************************************************************************/
/************************************ FLAGS *******************************************/
Expand All @@ -84,6 +89,7 @@ public class FabricView extends View {
/********************************** CONSTANTS *****************************************/
/*********************************************************************************************/
public static final int NOTEBOOK_LEFT_LINE_PADDING = 120;
private static final float SELECTION_LINE_WIDTH = 2;

/*********************************************************************************************/
/************************************ TO-DOs ******************************************/
Expand All @@ -105,6 +111,14 @@ public FabricView(Context context, AttributeSet attrs) {
this.setBackgroundColor(mBackgroundColor);
mTextExpectTouch = false;

selectionPaint = new Paint();
selectionPaint.setAntiAlias(true);
selectionPaint.setColor(Color.GREEN);
selectionPaint.setStyle(Paint.Style.STROKE);
selectionPaint.setStrokeJoin(Paint.Join.ROUND);
selectionPaint.setStrokeWidth(SELECTION_LINE_WIDTH);
selectionPaint.setPathEffect(new DashPathEffect(new float[] {10,20}, 0));

}

/**
Expand All @@ -122,6 +136,7 @@ protected void onDraw(Canvas canvas) {
if(d instanceof CTransform) {
continue;
}
RectF rect = d.getBounds();
if(d.hasTransforms()) {
Bitmap bitmap = Bitmap.createBitmap(d.getWidth(), d.getHeight(), Bitmap.Config.ARGB_8888);
Canvas temp = new Canvas(bitmap);
Expand All @@ -132,6 +147,10 @@ protected void onDraw(Canvas canvas) {
else {
d.draw(canvas);
}
if(mInteractionMode == SELECT_MODE && d.equals(selected)) {
growRect(rect, SELECTION_LINE_WIDTH);
canvas.drawRect(rect, selectionPaint);
}
}

catch(Exception ex)
Expand All @@ -141,6 +160,13 @@ protected void onDraw(Canvas canvas) {
}
}

private void growRect(RectF rect, float amount) {
rect.left -= amount;
rect.top -= amount;
rect.bottom += amount;
rect.right += amount;
}


/*********************************************************************************************/
/******************************* Handling User Touch **********************************/
Expand Down Expand Up @@ -283,7 +309,20 @@ public boolean onTouchDrawMode(MotionEvent event)
* @param event the touch event
*/
private boolean onTouchSelectMode(MotionEvent event) {
// TODO Implement Method
ListIterator<CDrawable> li = mDrawableList.listIterator(mDrawableList.size());
selected = null;
while(li.hasPrevious()) {
CDrawable d = li.previous();
if (d instanceof CTransform) {
continue;
}
RectF rect = d.getBounds();
if( rect.contains(event.getX(), event.getY()) ) {
selected = d;
break;
}
}
invalidate();
return false;
}

Expand Down Expand Up @@ -421,9 +460,10 @@ public void undo() {

public void redo() {
if (mUndoList.size() > 0) {

mDrawableList.add(mUndoList.get(mUndoList.size()-1));
mUndoList.remove(mUndoList.size()-1);
CDrawable toRedo = mUndoList.get(mUndoList.size()-1);
mDrawableList.add(toRedo);
mDrawableList.addAll(toRedo.getTransforms());
mUndoList.remove(toRedo);

invalidate();
}
Expand Down Expand Up @@ -536,6 +576,11 @@ else if (interactionMode < DRAW_MODE)
interactionMode = LOCKED_MODE;

this.mInteractionMode = interactionMode;
invalidate();
}

public List<CDrawable> getDrawablesList() {
return mDrawableList;
}

public void markSaved() {
Expand All @@ -545,4 +590,47 @@ public void markSaved() {
public boolean isSaved() {
return savePoint == mDrawableList.size();
}

public List<CDrawable> getUnsavedDrawablesList() {
return mDrawableList.subList(savePoint, mDrawableList.size());
}

public void selectLastDrawn() {
if(mDrawableList.isEmpty()) {
return;
}

ListIterator<CDrawable> li = mDrawableList.listIterator(mDrawableList.size());
while(li.hasPrevious()) {
CDrawable d = li.previous();
if (d instanceof CTransform) {
continue;
}
selected = d;
break;
}
invalidate();
}

public CDrawable getSelection() {
return selected;
}
public void deSelect() {
selected = null;
invalidate();
}

public void deleteSelection() {
if(selected == null) {
return;
}
ArrayList<CDrawable> toDelete = new ArrayList<>();
toDelete.add(selected);
toDelete.addAll(selected.getTransforms());
mDrawableList.removeAll(toDelete);

mUndoList.add(selected);
invalidate();
}

}

0 comments on commit 602c8b3

Please sign in to comment.