Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 9186 → Rev 9187

/programs/develop/cedit/SRC/CheckBox.ob07
19,17 → 19,21
 
MODULE CheckBox;
 
IMPORT G := Graph, K := KolibriOS;
IMPORT G := Graph, K := KolibriOS, U := Utils;
 
 
CONST
padding = 4;
fontWidth = K.fontWidth;
fontHeight = K.fontHeight;
 
 
TYPE
tCheckBox* = POINTER TO RECORD
tCheckBox* = RECORD
 
left*, top*: INTEGER;
width, height: INTEGER;
value*, mouse*: BOOLEAN;
value*, mouse: BOOLEAN;
text: ARRAY 32 OF WCHAR;
canvas: G.tCanvas
 
36,71 → 40,57
END;
 
 
PROCEDURE mark (canvas: G.tCanvas);
BEGIN
G.DLine(canvas, 2, 6, 6, -1);
G.DLine(canvas, 2, 6, 7, -1);
G.DLine(canvas, 7, 13, 9, 1);
G.DLine(canvas, 7, 13, 10, 1);
END mark;
 
 
PROCEDURE paint* (chkbox: tCheckBox);
VAR
canvas: G.tCanvas;
fontHeight: INTEGER;
BEGIN
canvas := chkbox.canvas;
fontHeight := canvas.font.height - 1;
IF canvas # NIL THEN
G.SetColor(canvas, K.winColor);
G.clear(canvas);
G.SetColor(canvas, 0FFFFFFH);
G.FillRect(canvas, 0, 0, fontHeight, fontHeight);
G.FillRect(canvas, 0, 0, fontHeight - 1, fontHeight - 1);
G.SetColor(canvas, K.borderColor);
G.Rect(canvas, 0, 0, fontHeight, fontHeight);
G.Rect(canvas, 0, 0, fontHeight - 1, fontHeight - 1);
IF chkbox.value THEN
G.SetColor(canvas, 0008000H);
mark(canvas)
G.DLine(canvas, 2, 6, 6, -1);
G.DLine(canvas, 2, 6, 7, -1);
G.DLine(canvas, 7, 13, 9, 1);
G.DLine(canvas, 7, 13, 10, 1)
END;
G.SetTextColor(canvas, K.textColor);
G.SetBkColor(canvas, K.winColor);
G.TextOut2(canvas, canvas.font.height + padding, 0, chkbox.text, LENGTH(chkbox.text));
G.TextOut2(canvas, fontHeight + padding, 0, chkbox.text, LENGTH(chkbox.text));
G.DrawCanvas(canvas, chkbox.left, chkbox.top)
END
END paint;
 
 
PROCEDURE create* (text: ARRAY OF WCHAR): tCheckBox;
PROCEDURE create* (text: ARRAY OF WCHAR; VAR chkbox: tCheckBox);
VAR
res: tCheckBox;
font: G.tFont;
BEGIN
font := G.CreateFont(1, "", {});
NEW(res);
res.left := 0;
res.top := 0;
res.value := FALSE;
res.mouse := FALSE;
COPY(text, res.text);
res.canvas := G.CreateCanvas(font.height + padding + LENGTH(res.text)*font.width, font.height + 1);
G.SetFont(res.canvas, font);
res.canvas := G.CreateCanvas(fontHeight + padding + LENGTH(res.text)*fontWidth, fontHeight + 1);
G.SetFont(res.canvas, G.CreateFont(1, "", {}));
res.width := res.canvas.width;
res.height := res.canvas.height;
RETURN res
chkbox := res
END create;
 
 
PROCEDURE between (a, b, c: INTEGER): BOOLEAN;
RETURN (a <= b) & (b <= c)
END between;
 
 
PROCEDURE MouseDown* (chkbox: tCheckBox; x, y: INTEGER);
PROCEDURE MouseDown* (VAR chkbox: tCheckBox; x, y: INTEGER);
BEGIN
IF (chkbox # NIL) & ~chkbox.mouse THEN
IF (chkbox.canvas # NIL) & ~chkbox.mouse THEN
DEC(x, chkbox.left);
DEC(y, chkbox.top);
chkbox.mouse := TRUE;
IF between(0, x, chkbox.width) & between(0, y, chkbox.height) THEN
IF U.between(0, x, chkbox.width) & U.between(0, y, chkbox.height) THEN
chkbox.value := ~chkbox.value;
END;
paint(chkbox)
108,9 → 98,9
END MouseDown;
 
 
PROCEDURE MouseUp* (chkbox: tCheckBox);
PROCEDURE MouseUp* (VAR chkbox: tCheckBox);
BEGIN
IF chkbox # NIL THEN
IF chkbox.canvas # NIL THEN
chkbox.mouse := FALSE
END
END MouseUp;