summaryrefslogtreecommitdiff
path: root/packages/ptc/examples/keyboard.pp
blob: 7396e903362f7887e1b322f93e0db8e0ab3d29ae (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
{
Ported to FPC by Nikolay Nikolov (nickysn@users.sourceforge.net)
}

{
 Keyboard example for OpenPTC 1.0 C++ Implementation
 Copyright (c) Glenn Fiedler (ptc@gaffer.org)
 This source code is in the public domain
}

Program KeyboardExample;

{$MODE objfpc}

Uses
  ptc;

Var
  console : TPTCConsole;
  surface : TPTCSurface;
  format : TPTCFormat;
  color : TPTCColor;
  key : TPTCKey;
  area : TPTCArea;
  x, y : Integer;
  size : Integer;
  delta : Integer;

Begin
  key := Nil;
  color := Nil;
  format := Nil;
  surface := Nil;
  console := Nil;
  Try
    Try
      { create key }
      key := TPTCKey.Create;
      
      { create console }
      console := TPTCConsole.Create;

      { create format }
      format := TPTCFormat.Create(32, $00FF0000, $0000FF00, $000000FF);

      { open the console }
      console.open('Keyboard example', format);

      { create surface matching console dimensions }
      surface := TPTCSurface.Create(console.width, console.height, format);

      { setup cursor data }
      x := surface.width Div 2;
      y := surface.height Div 2;
      size := surface.width Div 10;
      color := TPTCColor.Create(1, 1, 1);

      { main loop }
      Repeat
        { check for key press }
        If console.KeyPressed Then
        Begin
          { read console key press }
          console.ReadKey(key);
	
          { shift modifier }
	  If key.shift Then
            { move fast }
	    delta := 10
	  Else
            { move slow }
	    delta := 1;

          { handle cursor keys }
          Case key.code Of
            PTCKEY_LEFT : Dec(x, delta);
            PTCKEY_RIGHT : Inc(x, delta);
            PTCKEY_UP : Dec(y, delta);
            PTCKEY_DOWN : Inc(y, delta);
            { exit when escape is pressed }
            PTCKEY_ESCAPE : Break;
          End;
        End;

        { clear surface }
        surface.clear;

        { setup cursor area }
        area := TPTCArea.Create(x - size, y - size, x + size, y + size);
        Try
          { draw cursor as a quad }
          surface.clear(color, area);
        Finally
          area.Free;
        End;

        { copy to console }
        surface.copy(console);

        { update console }
        console.update;
      Until False;
    Finally
      color.Free;
      console.close;
      console.Free;
      surface.Free;
      key.Free;
      format.Free;
    End;
  Except
    On error : TPTCError Do
      { report error }
      error.report;
  End;
End.