IconEdit 0.37: changes history by Nicolas
git-svn-id: svn://kolibrios.org@7204 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
444e038420
commit
dd3864299e
126
programs/cmm/iconedit/actions_history.h
Normal file
126
programs/cmm/iconedit/actions_history.h
Normal file
@ -0,0 +1,126 @@
|
|||||||
|
// Actions history
|
||||||
|
|
||||||
|
#define MAX_ACTIONS_COUNT 10
|
||||||
|
|
||||||
|
struct _ActionsHistory {
|
||||||
|
dword stack[MAX_ACTIONS_COUNT];
|
||||||
|
dword head;
|
||||||
|
dword tail;
|
||||||
|
dword currentIndex;
|
||||||
|
|
||||||
|
void init();
|
||||||
|
bool isEmpty();
|
||||||
|
|
||||||
|
void saveCurrentState();
|
||||||
|
void restoreState(dword index);
|
||||||
|
|
||||||
|
void undoLastAction();
|
||||||
|
void redoLastAction();
|
||||||
|
};
|
||||||
|
|
||||||
|
void _ActionsHistory::init() {
|
||||||
|
dword i;
|
||||||
|
|
||||||
|
head = tail = 0;
|
||||||
|
currentIndex = -1;
|
||||||
|
|
||||||
|
for (i = 0; i < MAX_ACTIONS_COUNT; i++)
|
||||||
|
stack[i] = malloc(image.columns * image.rows);
|
||||||
|
|
||||||
|
saveCurrentState();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool _ActionsHistory::isEmpty() {
|
||||||
|
if (head == tail)
|
||||||
|
return true;
|
||||||
|
else
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _ActionsHistory::saveCurrentState() {
|
||||||
|
dword addr, offset;
|
||||||
|
int r, c;
|
||||||
|
|
||||||
|
tail = currentIndex + 1;
|
||||||
|
|
||||||
|
if (tail >= MAX_ACTIONS_COUNT)
|
||||||
|
tail = tail % MAX_ACTIONS_COUNT;
|
||||||
|
|
||||||
|
addr = stack[tail];
|
||||||
|
|
||||||
|
for (r = 0; r < image.rows; r++)
|
||||||
|
{
|
||||||
|
for (c = 0; c < image.columns; c++)
|
||||||
|
{
|
||||||
|
offset = calc(image.columns * r + c) * 4;
|
||||||
|
|
||||||
|
ESDWORD[addr + offset] = image.get_pixel(r, c);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
currentIndex = tail;
|
||||||
|
tail = calc(tail + 1) % 10;
|
||||||
|
|
||||||
|
if (tail == head)
|
||||||
|
head = calc(head + 1) % 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
void _ActionsHistory::restoreState(dword index) {
|
||||||
|
dword addr, offset;
|
||||||
|
int r, c;
|
||||||
|
|
||||||
|
addr = stack[index];
|
||||||
|
|
||||||
|
for (r = 0; r < image.rows; r++)
|
||||||
|
{
|
||||||
|
for (c = 0; c < image.columns; c++)
|
||||||
|
{
|
||||||
|
offset = calc(image.columns * r + c) * 4;
|
||||||
|
image.set_pixel(r, c, ESDWORD[addr + offset]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _ActionsHistory::undoLastAction() {
|
||||||
|
dword previousAction;
|
||||||
|
|
||||||
|
// Если вышли за левую границу, перемещаемся в конец массива
|
||||||
|
if (currentIndex == 0) {
|
||||||
|
previousAction = MAX_ACTIONS_COUNT - 1;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
previousAction = currentIndex - 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
return;
|
||||||
|
else {
|
||||||
|
if (currentIndex != head) {
|
||||||
|
restoreState(previousAction);
|
||||||
|
DrawCanvas();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (currentIndex != head)
|
||||||
|
currentIndex = previousAction;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void _ActionsHistory::redoLastAction() {
|
||||||
|
dword nextAction = calc(currentIndex + 1);
|
||||||
|
|
||||||
|
// Если вышли за левую границу, возвращаемся в начало
|
||||||
|
if (nextAction >= MAX_ACTIONS_COUNT)
|
||||||
|
nextAction = nextAction % MAX_ACTIONS_COUNT;
|
||||||
|
|
||||||
|
if (isEmpty())
|
||||||
|
return;
|
||||||
|
else {
|
||||||
|
if (nextAction != tail) {
|
||||||
|
restoreState(nextAction);
|
||||||
|
DrawCanvas();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (nextAction != tail)
|
||||||
|
currentIndex = nextAction;
|
||||||
|
}
|
||||||
|
}
|
@ -28,7 +28,7 @@ pipet aside color view
|
|||||||
// //
|
// //
|
||||||
//===================================================//
|
//===================================================//
|
||||||
|
|
||||||
#define T_TITLE "Icon Editor 0.35"
|
#define T_TITLE "Icon Editor 0.37"
|
||||||
|
|
||||||
#define TOOLBAR_H 24+8
|
#define TOOLBAR_H 24+8
|
||||||
#define PANEL_LEFT_W 16+5+5+3+3
|
#define PANEL_LEFT_W 16+5+5+3+3
|
||||||
@ -111,7 +111,10 @@ dword last_used_colors[13*2] = {
|
|||||||
|
|
||||||
_image image;
|
_image image;
|
||||||
|
|
||||||
|
#include "actions_history.h"
|
||||||
|
|
||||||
libimg_image open_image;
|
libimg_image open_image;
|
||||||
|
_ActionsHistory actionsHistory;
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
TOOL_NONE = -1,
|
TOOL_NONE = -1,
|
||||||
@ -144,11 +147,12 @@ void resetCurrentTool() {
|
|||||||
|
|
||||||
void setCurrentTool(int index) {
|
void setCurrentTool(int index) {
|
||||||
resetCurrentTool();
|
resetCurrentTool();
|
||||||
|
|
||||||
|
currentTool = index;
|
||||||
|
|
||||||
if ((index != TOOL_NONE) && (tools[index].activate != 0))
|
if ((index != TOOL_NONE) && (tools[index].activate != 0))
|
||||||
tools[index].activate();
|
tools[index].activate();
|
||||||
|
|
||||||
currentTool = index;
|
|
||||||
DrawLeftPanel();
|
DrawLeftPanel();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -181,6 +185,9 @@ void FillTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
|||||||
EventFill(mouseY-canvas.y/zoom.value,
|
EventFill(mouseY-canvas.y/zoom.value,
|
||||||
mouseX-canvas.x/zoom.value, active_color_2);
|
mouseX-canvas.x/zoom.value, active_color_2);
|
||||||
|
|
||||||
|
if ((fill1) || (fill2))
|
||||||
|
actionsHistory.saveCurrentState();
|
||||||
|
|
||||||
DrawCanvas();
|
DrawCanvas();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -201,9 +208,16 @@ void PipetteTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool PencilTool_Drawing = false;
|
||||||
|
|
||||||
void PencilTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
void PencilTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
||||||
if (canvas.hovered())
|
if (canvas.hovered())
|
||||||
{
|
{
|
||||||
|
if ((PencilTool_Drawing == true) && (!lkm) && (!pkm)) {
|
||||||
|
actionsHistory.saveCurrentState();
|
||||||
|
PencilTool_Drawing = false;
|
||||||
|
}
|
||||||
|
|
||||||
if (lkm)
|
if (lkm)
|
||||||
image.set_pixel(mouseY-canvas.y/zoom.value,
|
image.set_pixel(mouseY-canvas.y/zoom.value,
|
||||||
mouseX-canvas.x/zoom.value, active_color_1);
|
mouseX-canvas.x/zoom.value, active_color_1);
|
||||||
@ -211,128 +225,108 @@ void PencilTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
|||||||
image.set_pixel(mouseY-canvas.y/zoom.value,
|
image.set_pixel(mouseY-canvas.y/zoom.value,
|
||||||
mouseX-canvas.x/zoom.value, active_color_2);
|
mouseX-canvas.x/zoom.value, active_color_2);
|
||||||
|
|
||||||
|
if ((lkm) || (pkm))
|
||||||
|
PencilTool_Drawing = true;
|
||||||
|
|
||||||
DrawCanvas();
|
DrawCanvas();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Line tool
|
void PencilTool_reset() {
|
||||||
|
PencilTool_Drawing = false;
|
||||||
int LineTool_startX = -1;
|
|
||||||
int LineTool_startY = -1;
|
|
||||||
int LineTool_lastTempPosX = -1;
|
|
||||||
int LineTool_lastTempPosY = -1;
|
|
||||||
|
|
||||||
void LineTool_reset() {
|
|
||||||
LineTool_startX = -1;
|
|
||||||
LineTool_startY = -1;
|
|
||||||
LineTool_lastTempPosX = -1;
|
|
||||||
LineTool_lastTempPosY = -1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void LineTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
// Line tool
|
||||||
|
struct SimpleFigureTool_State {
|
||||||
|
int startX, startY;
|
||||||
|
int lastTempPosX, lastTempPosY;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
TOOL_LINE_STATE,
|
||||||
|
TOOL_RECT_STATE
|
||||||
|
};
|
||||||
|
|
||||||
|
dword currentFigToolState = -1;
|
||||||
|
SimpleFigureTool_State figTool_States[2];
|
||||||
|
|
||||||
|
void SimpleFigureTool_Reset() {
|
||||||
|
if (currentTool == TOOL_LINE)
|
||||||
|
currentFigToolState = TOOL_LINE_STATE;
|
||||||
|
else if (currentTool == TOOL_RECT)
|
||||||
|
currentFigToolState = TOOL_RECT_STATE;
|
||||||
|
|
||||||
|
figTool_States[currentFigToolState].startX = -1;
|
||||||
|
figTool_States[currentFigToolState].startY = -1;
|
||||||
|
figTool_States[currentFigToolState].lastTempPosX = -1;
|
||||||
|
figTool_States[currentFigToolState].lastTempPosY = -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SimpleFigureTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
||||||
if (canvas.hovered())
|
if (canvas.hovered())
|
||||||
{
|
{
|
||||||
if (mouse.down) && (mouse.key & MOUSE_LEFT) {
|
if (lkm) {
|
||||||
if ((LineTool_startX < 0) || (LineTool_startY < 0)) {
|
if ((figTool_States[currentFigToolState].startX < 0) || (figTool_States[currentFigToolState].startY < 0)) {
|
||||||
LineTool_startX = mouseX;
|
figTool_States[currentFigToolState].startX = mouseX;
|
||||||
LineTool_startY = mouseY;
|
figTool_States[currentFigToolState].startY = mouseY;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
if ((calc(mouseX - canvas.x/zoom.value) != figTool_States[currentFigToolState].lastTempPosX)
|
||||||
|
|| (calc(mouseY - canvas.y/zoom.value) != figTool_States[currentFigToolState].lastTempPosY))
|
||||||
|
{
|
||||||
|
DrawCanvas();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ((figTool_States[currentFigToolState].startX >= 0) && (figTool_States[currentFigToolState].startY >= 0)) {
|
||||||
// Draw line from start position to current position
|
// Draw line from start position to current position
|
||||||
DrawLine(LineTool_startX - canvas.x/zoom.value,
|
if (currentTool == TOOL_LINE) {
|
||||||
LineTool_startY - canvas.y/zoom.value,
|
DrawLine(figTool_States[currentFigToolState].startX - canvas.x/zoom.value,
|
||||||
mouseX - canvas.x/zoom.value,
|
figTool_States[currentFigToolState].startY - canvas.y/zoom.value,
|
||||||
mouseY - canvas.y/zoom.value,
|
mouseX - canvas.x/zoom.value,
|
||||||
active_color_1,
|
mouseY - canvas.y/zoom.value,
|
||||||
1);
|
active_color_1,
|
||||||
|
1);
|
||||||
|
}
|
||||||
|
else if (currentTool == TOOL_RECT) {
|
||||||
|
DrawRectangleInCanvas(figTool_States[currentFigToolState].startX - canvas.x/zoom.value,
|
||||||
|
figTool_States[currentFigToolState].startY - canvas.y/zoom.value,
|
||||||
|
mouseX - canvas.x/zoom.value,
|
||||||
|
mouseY - canvas.y/zoom.value, active_color_1, 1);
|
||||||
|
}
|
||||||
|
|
||||||
DrawCanvas();
|
DrawCanvas();
|
||||||
|
|
||||||
|
actionsHistory.saveCurrentState();
|
||||||
|
|
||||||
// Reset start position
|
// Reset start position
|
||||||
LineTool_startX = -1;
|
figTool_States[currentFigToolState].startX = -1;
|
||||||
LineTool_startY = -1;
|
figTool_States[currentFigToolState].startY = -1;
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((LineTool_startX >= 0) && (LineTool_startY >= 0)) {
|
|
||||||
if ((calc(mouseX - canvas.x/zoom.value) != LineTool_lastTempPosX)
|
|
||||||
|| (calc(mouseY - canvas.y/zoom.value) != LineTool_lastTempPosY))
|
|
||||||
{
|
|
||||||
DrawCanvas();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void LineTool_onCanvasDraw() {
|
void SimpleFigureTool_onCanvasDraw() {
|
||||||
if ((LineTool_startX >= 0) && (LineTool_startY >= 0)) {
|
if ((figTool_States[currentFigToolState].startX >= 0) && (figTool_States[currentFigToolState].startY >= 0) && (mouse.lkm)) {
|
||||||
DrawLine(LineTool_startX - canvas.x/zoom.value,
|
if (currentTool == TOOL_LINE) {
|
||||||
LineTool_startY - canvas.y/zoom.value,
|
DrawLine(figTool_States[currentFigToolState].startX - canvas.x/zoom.value,
|
||||||
mouse.x - canvas.x/zoom.value,
|
figTool_States[currentFigToolState].startY - canvas.y/zoom.value,
|
||||||
mouse.y - canvas.y/zoom.value,
|
mouse.x - canvas.x/zoom.value,
|
||||||
active_color_1,
|
mouse.y - canvas.y/zoom.value,
|
||||||
2);
|
active_color_1,
|
||||||
LineTool_lastTempPosX = mouse.x - canvas.x/zoom.value;
|
2);
|
||||||
LineTool_lastTempPosY = mouse.y - canvas.y/zoom.value;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// Rect tool
|
|
||||||
int RectTool_startX = -1;
|
|
||||||
int RectTool_startY = -1;
|
|
||||||
int RectTool_lastTempPosX = -1;
|
|
||||||
int RectTool_lastTempPosY = -1;
|
|
||||||
|
|
||||||
void RectTool_reset() {
|
|
||||||
RectTool_startX = -1;
|
|
||||||
RectTool_startY = -1;
|
|
||||||
RectTool_lastTempPosX = -1;
|
|
||||||
RectTool_lastTempPosY = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void RectTool_onMouseEvent(int mouseX, int mouseY, int lkm, int pkm) {
|
|
||||||
if ((mouseX>canvas.x) && (mouseY>canvas.y)
|
|
||||||
&& (mouseY<canvas.y+canvas.h)
|
|
||||||
&& (mouseX<canvas.x+canvas.w))
|
|
||||||
{
|
|
||||||
if (mouse.down) && (mouse.key & MOUSE_LEFT) {
|
|
||||||
if ((RectTool_startX < 0) || (RectTool_startY < 0)) {
|
|
||||||
RectTool_startX = mouseX;
|
|
||||||
RectTool_startY = mouseY;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
// Draw line from start position to current position
|
|
||||||
DrawRectangleInCanvas(RectTool_startX - canvas.x/zoom.value,
|
|
||||||
RectTool_startY - canvas.y/zoom.value,
|
|
||||||
mouseX - canvas.x/zoom.value,
|
|
||||||
mouseY - canvas.y/zoom.value, active_color_1, 1);
|
|
||||||
|
|
||||||
DrawCanvas();
|
|
||||||
|
|
||||||
// Reset start position
|
|
||||||
RectTool_startX = -1;
|
|
||||||
RectTool_startY = -1;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
else if (currentTool == TOOL_RECT) {
|
||||||
if ((RectTool_startX >= 0) && (RectTool_startY >= 0)) {
|
DrawRectangleInCanvas(figTool_States[currentFigToolState].startX - canvas.x/zoom.value,
|
||||||
if ((calc(mouseX - canvas.x/zoom.value) != RectTool_lastTempPosX)
|
figTool_States[currentFigToolState].startY - canvas.y/zoom.value,
|
||||||
|| (calc(mouseY - canvas.y/zoom.value) != RectTool_lastTempPosY))
|
mouse.x - canvas.x/zoom.value,
|
||||||
{
|
mouse.y - canvas.y/zoom.value, active_color_1, 2);
|
||||||
DrawCanvas();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RectTool_onCanvasDraw() {
|
figTool_States[currentFigToolState].lastTempPosX = mouse.x - canvas.x/zoom.value;
|
||||||
if ((RectTool_startX >= 0) && (RectTool_startY >= 0)) {
|
figTool_States[currentFigToolState].lastTempPosY = mouse.y - canvas.y/zoom.value;
|
||||||
DrawRectangleInCanvas(RectTool_startX - canvas.x/zoom.value,
|
|
||||||
RectTool_startY - canvas.y/zoom.value,
|
|
||||||
mouse.x - canvas.x/zoom.value,
|
|
||||||
mouse.y - canvas.y/zoom.value, active_color_1, 2);
|
|
||||||
|
|
||||||
RectTool_lastTempPosX = mouse.x - canvas.x/zoom.value;
|
|
||||||
RectTool_lastTempPosY = mouse.y - canvas.y/zoom.value;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -340,6 +334,7 @@ void initTools()
|
|||||||
{
|
{
|
||||||
tools[0].id = TOOL_PENCIL;
|
tools[0].id = TOOL_PENCIL;
|
||||||
tools[0].onMouseEvent = #PencilTool_onMouseEvent;
|
tools[0].onMouseEvent = #PencilTool_onMouseEvent;
|
||||||
|
tools[0].deactivate = #PencilTool_reset;
|
||||||
|
|
||||||
tools[1].id = TOOL_PIPETTE;
|
tools[1].id = TOOL_PIPETTE;
|
||||||
tools[1].activate = #PipetteTool_activate;
|
tools[1].activate = #PipetteTool_activate;
|
||||||
@ -348,17 +343,17 @@ void initTools()
|
|||||||
tools[2].id = TOOL_FILL;
|
tools[2].id = TOOL_FILL;
|
||||||
tools[2].onMouseEvent = #FillTool_onMouseEvent;
|
tools[2].onMouseEvent = #FillTool_onMouseEvent;
|
||||||
|
|
||||||
tools[3].id = TOOL_PENCIL;
|
tools[3].id = TOOL_LINE;
|
||||||
tools[3].activate = #LineTool_reset;
|
tools[3].activate = #SimpleFigureTool_Reset;
|
||||||
tools[3].deactivate = #LineTool_reset;
|
tools[3].deactivate = #SimpleFigureTool_Reset;
|
||||||
tools[3].onMouseEvent = #LineTool_onMouseEvent;
|
tools[3].onMouseEvent = #SimpleFigureTool_onMouseEvent;
|
||||||
tools[3].onCanvasDraw = #LineTool_onCanvasDraw;
|
tools[3].onCanvasDraw = #SimpleFigureTool_onCanvasDraw;
|
||||||
|
|
||||||
tools[4].id = TOOL_RECT;
|
tools[4].id = TOOL_RECT;
|
||||||
tools[4].activate = #RectTool_reset;
|
tools[4].activate = #SimpleFigureTool_Reset;
|
||||||
tools[4].deactivate = #RectTool_reset;
|
tools[4].deactivate = #SimpleFigureTool_Reset;
|
||||||
tools[4].onMouseEvent = #RectTool_onMouseEvent;
|
tools[4].onMouseEvent = #SimpleFigureTool_onMouseEvent;
|
||||||
tools[4].onCanvasDraw = #RectTool_onCanvasDraw;
|
tools[4].onCanvasDraw = #SimpleFigureTool_onCanvasDraw;
|
||||||
}
|
}
|
||||||
|
|
||||||
void main()
|
void main()
|
||||||
@ -383,6 +378,8 @@ void main()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actionsHistory.init();
|
||||||
|
|
||||||
initTools();
|
initTools();
|
||||||
setCurrentTool(TOOL_PENCIL);
|
setCurrentTool(TOOL_PENCIL);
|
||||||
|
|
||||||
@ -490,6 +487,10 @@ void main()
|
|||||||
if (key_scancode == SCAN_CODE_KEY_F) setCurrentTool(TOOL_FILL);
|
if (key_scancode == SCAN_CODE_KEY_F) setCurrentTool(TOOL_FILL);
|
||||||
if (key_scancode == SCAN_CODE_KEY_L) setCurrentTool(TOOL_LINE);
|
if (key_scancode == SCAN_CODE_KEY_L) setCurrentTool(TOOL_LINE);
|
||||||
if (key_scancode == SCAN_CODE_KEY_R) setCurrentTool(TOOL_RECT);
|
if (key_scancode == SCAN_CODE_KEY_R) setCurrentTool(TOOL_RECT);
|
||||||
|
|
||||||
|
if (key_scancode == SCAN_CODE_KEY_S) actionsHistory.undoLastAction();
|
||||||
|
if (key_scancode == SCAN_CODE_KEY_C) actionsHistory.redoLastAction();
|
||||||
|
|
||||||
if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
|
if (key_scancode == SCAN_CODE_MINUS) {zoom.click(BTN_ZOOM_OUT); DrawEditArea();}
|
||||||
if (key_scancode == SCAN_CODE_PLUS) {zoom.click(BTN_ZOOM_IN); DrawEditArea();}
|
if (key_scancode == SCAN_CODE_PLUS) {zoom.click(BTN_ZOOM_IN); DrawEditArea();}
|
||||||
break;
|
break;
|
||||||
|
Loading…
Reference in New Issue
Block a user