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
|
package ScrollLine;
use strict;
use Data::Dumper;
use constant VERSION => 0.1;
use constant LEFT => 0;
use constant RIGHT => 1;
sub new
{
my ($text, $scrollSize, $direction) = @_;
die("Text empty") if(!defined($text) || $text eq '' || length($text) == 0);
die ("Unknown scroll size") if(!defined($scrollSize) || $scrollSize eq '' || length($scrollSize) == 0);
my $self = {};
$self->{_TEXT}=$text;
$self->{_STEP}=1;
$self->{_STARTPOS}=0;
if($scrollSize < length($text))
{
$self->{_SCROLLSIZE}=length($text);
}
else
{
$self->{_SCROLLSIZE}=$scrollSize;
my $l=$scrollSize - length($text);
for(my $i=0; $i<$l;$i++)
{
$self->{_TEXT}.=' ';
}
}
if(!defined($direction) || $direction eq '')
{
$self->{_DIRECTION}=0;
}
else
{
$self->{_DIRECTION}=$direction;
}
bless($self);
return $self;
}
sub changeDirection
{
my ($self) = @_;
if($self->{_DIRECTION} == LEFT)
{
$self->{_DIRECTION}=RIGHT;
}
else
{
$self->{_DIRECTION}=LEFT;
}
}
sub setStep
{
my ($self, $step) = @_;
return if(!defined($step) || $step eq '' || $step !~ m/\d+$/);
$self->{_STEP}=$step;
}
sub scroll
{
my ($self) = @_;
if($self->{_DIRECTION} == RIGHT)
{
return $self->_moveRight();
}
else
{
return $self->_moveLeft();
}
}
sub _moveLeft
{
my ($self) = @_;
my $startPos=$self->{_STARTPOS};
my $text=$self->{_TEXT};
my $len=$self->{_SCROLLSIZE};
my $t = substr($text, $startPos, $len-$startPos);
$t .= substr($text, 0, $startPos);
$self->{_STARTPOS}+=$self->{_STEP};
$self->{_STARTPOS}=0 if($self->{_STARTPOS} > $len);
return $t;
}
sub _moveRight
{
my ($self) = @_;
my $startPos=$self->{_STARTPOS};
my $text=$self->{_TEXT};
my $len=$self->{_SCROLLSIZE};;
my $t = substr($text, $startPos, $len-$startPos);
$t .= substr($text, 0, $startPos);
$self->{_STARTPOS}-=$self->{_STEP};
$self->{_STARTPOS}=length($text) if($self->{_STARTPOS} < 0);
return $t;
}
1;
|