-
Notifications
You must be signed in to change notification settings - Fork 21
Expand file tree
/
Copy pathterminalCursor.cpp
More file actions
119 lines (111 loc) · 3.12 KB
/
Copy pathterminalCursor.cpp
File metadata and controls
119 lines (111 loc) · 3.12 KB
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
117
118
119
/*
* Copyright (C) 2009 - 2011 Four J's Development Tools Europe, Ltd.
* http://www.fourjs.com
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
* THE SOFTWARE.
*
*/
#include "terminalCursor.h"
#include <QWidget>
#include <QPainter>
#include "terminalWidget.h"
namespace PTerminal
{
Cursor::Cursor(Widget* parent):QObject(parent),_shape(Empty),_shapeWidth(2),_attr(0)
{
}
Cursor::~Cursor()
{
}
int
Cursor::col() const
{
return widget()->_inst->term->dispcursx;
}
int
Cursor::line() const
{
return widget()->_inst->term->dispcursy;
}
void
Cursor::setText(const QString& text,unsigned long attr)
{
_text=text;
_attr=attr;
QRect r(col()*widget()->_inst->font_width,line()*widget()->_inst->font_height,widget()->_inst->font_width,widget()->_inst->font_height);
switch(_shape)
{
case Block:
_rect=r;
break;
case Underline:
_rect=r.adjusted(0,r.height()-_shapeWidth,0,0);
break;
case Vertical:
_rect=r.adjusted(0,0,-r.width()+_shapeWidth,0);
break;
default:
_rect=r.adjusted(0,0,-r.width(),-r.height());
}
widget()->update(widget()->_transform.mapRect(_rect));
}
void
Cursor::setShape(int shape)
{
if(shape==_shape) return;
switch(shape)
{
case 0:
_shape=Block;
break;
case 1:
_shape=Underline;
break;
case 2:
_shape=Vertical;
break;
default:
_shape=Empty;
}
}
void
Cursor::draw(QPainter& p)
{
if(col()==-1 || line()==-1) return;
p.setFont(((QWidget*)parent())->font());
if(_attr&TATTR_PASCURS)
{
p.setPen(widget()->fgColor(_attr,true));
p.drawRect(_rect.adjusted(0,0,-1,-1));
p.setPen(widget()->fgColor(_attr,true));
p.drawText(_rect,_text);
}
else if(_attr&TATTR_ACTCURS && widget()->_inst->term->cblinker)
{
p.fillRect(_rect,widget()->bgColor(_attr,true));
p.setPen(widget()->fgColor(_attr,true));
p.drawText(_rect,_text);
}
}
Widget*
Cursor::widget() const
{
return (Widget*)parent();
}
}