| author | Tomas Zeman <tzeman@volny.cz> |
| Fri, 10 Jan 2014 12:56:01 +0100 | |
| changeset 5 | 19822c932652 |
| child 6 | 1d7f1ea4f2a8 |
| permissions | -rw-r--r-- |
|
5
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
1 |
package tz.signaturecapture; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
2 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
3 |
import java.io.OutputStream; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
4 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
5 |
import android.content.Context; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
6 |
import android.graphics.Bitmap; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
7 |
import android.graphics.Canvas; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
8 |
import android.graphics.Color; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
9 |
import android.graphics.Paint; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
10 |
import android.graphics.Path; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
11 |
import android.graphics.RectF; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
12 |
import android.util.AttributeSet; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
13 |
import android.util.Log; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
14 |
import android.view.MotionEvent; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
15 |
import android.view.View; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
16 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
17 |
public class SignatureWidget extends View |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
18 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
19 |
private static final float STROKE_WIDTH = 5f; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
20 |
private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
21 |
private Paint paint = new Paint(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
22 |
private Path path = new Path(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
23 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
24 |
private float lastTouchX; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
25 |
private float lastTouchY; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
26 |
private final RectF dirtyRect = new RectF(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
27 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
28 |
public SignatureWidget(Context context, AttributeSet attrs) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
29 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
30 |
super(context, attrs); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
31 |
paint.setAntiAlias(true); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
32 |
paint.setColor(Color.BLACK); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
33 |
paint.setStyle(Paint.Style.STROKE); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
34 |
paint.setStrokeJoin(Paint.Join.ROUND); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
35 |
paint.setStrokeWidth(STROKE_WIDTH); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
36 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
37 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
38 |
public void save(View parent, OutputStream os) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
39 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
40 |
Log.v("log_tag", "Width: " + parent.getWidth());
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
41 |
Log.v("log_tag", "Height: " + parent.getHeight());
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
42 |
Bitmap bm = Bitmap.createBitmap(parent.getWidth(), parent.getHeight(), Bitmap.Config.RGB_565);; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
43 |
Canvas canvas = new Canvas(bm); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
44 |
parent.draw(canvas); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
45 |
bm.compress(Bitmap.CompressFormat.PNG, 90, os); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
46 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
47 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
48 |
public void clear() |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
49 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
50 |
path.reset(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
51 |
invalidate(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
52 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
53 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
54 |
@Override |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
55 |
protected void onDraw(Canvas canvas) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
56 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
57 |
canvas.drawPath(path, paint); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
58 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
59 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
60 |
@Override |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
61 |
public boolean onTouchEvent(MotionEvent event) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
62 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
63 |
float eventX = event.getX(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
64 |
float eventY = event.getY(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
65 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
66 |
switch (event.getAction()) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
67 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
68 |
case MotionEvent.ACTION_DOWN: |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
69 |
path.moveTo(eventX, eventY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
70 |
lastTouchX = eventX; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
71 |
lastTouchY = eventY; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
72 |
return true; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
73 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
74 |
case MotionEvent.ACTION_MOVE: |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
75 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
76 |
case MotionEvent.ACTION_UP: |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
77 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
78 |
resetDirtyRect(eventX, eventY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
79 |
int historySize = event.getHistorySize(); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
80 |
for (int i = 0; i < historySize; i++) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
81 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
82 |
float historicalX = event.getHistoricalX(i); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
83 |
float historicalY = event.getHistoricalY(i); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
84 |
expandDirtyRect(historicalX, historicalY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
85 |
path.lineTo(historicalX, historicalY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
86 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
87 |
path.lineTo(eventX, eventY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
88 |
break; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
89 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
90 |
default: |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
91 |
debug("Ignored touch event: " + event.toString());
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
92 |
return false; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
93 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
94 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
95 |
invalidate((int) (dirtyRect.left - HALF_STROKE_WIDTH), |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
96 |
(int) (dirtyRect.top - HALF_STROKE_WIDTH), |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
97 |
(int) (dirtyRect.right + HALF_STROKE_WIDTH), |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
98 |
(int) (dirtyRect.bottom + HALF_STROKE_WIDTH)); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
99 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
100 |
lastTouchX = eventX; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
101 |
lastTouchY = eventY; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
102 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
103 |
return true; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
104 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
105 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
106 |
private void debug(String string){
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
107 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
108 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
109 |
private void expandDirtyRect(float historicalX, float historicalY) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
110 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
111 |
if (historicalX < dirtyRect.left) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
112 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
113 |
dirtyRect.left = historicalX; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
114 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
115 |
else if (historicalX > dirtyRect.right) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
116 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
117 |
dirtyRect.right = historicalX; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
118 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
119 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
120 |
if (historicalY < dirtyRect.top) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
121 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
122 |
dirtyRect.top = historicalY; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
123 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
124 |
else if (historicalY > dirtyRect.bottom) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
125 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
126 |
dirtyRect.bottom = historicalY; |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
127 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
128 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
129 |
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
130 |
private void resetDirtyRect(float eventX, float eventY) |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
131 |
{
|
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
132 |
dirtyRect.left = Math.min(lastTouchX, eventX); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
133 |
dirtyRect.right = Math.max(lastTouchX, eventX); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
134 |
dirtyRect.top = Math.min(lastTouchY, eventY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
135 |
dirtyRect.bottom = Math.max(lastTouchY, eventY); |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
136 |
} |
|
19822c932652
SignatureWidget: extracted into outer class
Tomas Zeman <tzeman@volny.cz>
parents:
diff
changeset
|
137 |
} |