summaryrefslogtreecommitdiff
path: root/scene/gui/line_edit.cpp
diff options
context:
space:
mode:
authorRémi Verschelde <remi@verschelde.fr>2016-03-09 00:14:08 +0100
committerRémi Verschelde <remi@verschelde.fr>2016-03-09 00:14:08 +0100
commite46e43d2aaa6339a1675eb989f41885e745bf5c3 (patch)
treecf91f2869ff8f058c6682569fb31e22e5ee736ad /scene/gui/line_edit.cpp
parent1dad6eca812e5c2e313b54265114de8a1d73d999 (diff)
parent4a4f2479146aa33e235ed57cde311efda68d3c8f (diff)
Merge pull request #3928 from Marqin/whitespace
remove trailing whitespace - sorry for the broken PRs, please rebase :)
Diffstat (limited to 'scene/gui/line_edit.cpp')
-rw-r--r--scene/gui/line_edit.cpp276
1 files changed, 138 insertions, 138 deletions
diff --git a/scene/gui/line_edit.cpp b/scene/gui/line_edit.cpp
index 2a62ab30fc..3953ef06a5 100644
--- a/scene/gui/line_edit.cpp
+++ b/scene/gui/line_edit.cpp
@@ -36,20 +36,20 @@ void LineEdit::_input_event(InputEvent p_event) {
switch(p_event.type) {
-
+
case InputEvent::MOUSE_BUTTON: {
-
+
const InputEventMouseButton &b = p_event.mouse_button;
if (b.button_index!=1)
break;
-
+
if (b.pressed) {
-
+
set_cursor_at_pixel_pos(b.x);
-
+
if (b.doubleclick) {
-
+
selection.enabled=true;
selection.begin=0;
selection.end=text.length();
@@ -57,9 +57,9 @@ void LineEdit::_input_event(InputEvent p_event) {
}
selection.drag_attempt=false;
-
+
if ((cursor_pos<selection.begin) || (cursor_pos>selection.end) || !selection.enabled) {
-
+
selection_clear();
selection.cursor_start=cursor_pos;
selection.creating=true;
@@ -67,13 +67,13 @@ void LineEdit::_input_event(InputEvent p_event) {
selection.drag_attempt=true;
}
-
+
// if (!editable)
// non_editable_clicked_signal.call();
update();
-
+
} else {
-
+
if ( (!selection.creating) && (!selection.doubleclick)) {
selection_clear();
}
@@ -83,29 +83,29 @@ void LineEdit::_input_event(InputEvent p_event) {
if (OS::get_singleton()->has_virtual_keyboard())
OS::get_singleton()->show_virtual_keyboard(get_text(),get_global_rect());
}
-
- update();
+
+ update();
} break;
case InputEvent::MOUSE_MOTION: {
-
+
const InputEventMouseMotion& m=p_event.mouse_motion;
-
+
if (m.button_mask&1) {
-
+
if (selection.creating) {
set_cursor_at_pixel_pos(m.x);
selection_fill_at_cursor();
}
}
-
+
} break;
case InputEvent::KEY: {
-
+
const InputEventKey &k =p_event.key;
-
+
if (!k.pressed)
return;
- unsigned int code = k.scancode;
+ unsigned int code = k.scancode;
if (k.mod.command) {
@@ -346,11 +346,11 @@ void LineEdit::_input_event(InputEvent p_event) {
}
-
+
return;
-
+
} break;
-
+
}
}
@@ -405,30 +405,30 @@ void LineEdit::drop_data(const Point2& p_point,const Variant& p_data){
void LineEdit::_notification(int p_what) {
-
+
switch(p_what) {
-
+
case NOTIFICATION_RESIZED: {
-
+
set_cursor_pos( get_cursor_pos() );
-
+
} break;
case NOTIFICATION_DRAW: {
-
+
int width,height;
-
+
Size2 size=get_size();
width=size.width;
height=size.height;
-
+
RID ci = get_canvas_item();
-
+
Ref<StyleBox> style = get_stylebox("normal");
if (!is_editable())
style=get_stylebox("read_only");
Ref<Font> font=get_font("font");
-
+
style->draw( ci, Rect2( Point2(), size ) );
if (has_focus()) {
@@ -439,7 +439,7 @@ void LineEdit::_notification(int p_what) {
int x_ofs=0;
switch (align) {
-
+
case ALIGN_FILL:
case ALIGN_LEFT: {
@@ -457,19 +457,19 @@ void LineEdit::_notification(int p_what) {
int ofs_max=width-style->get_minimum_size().width;
int char_ofs=window_pos;
-
+
int y_area=height-style->get_minimum_size().height;
int y_ofs=style->get_offset().y;
-
+
int font_ascent=font->get_ascent();
-
+
Color selection_color=get_color("selection_color");
Color font_color=get_color("font_color");
Color font_color_selected=get_color("font_color_selected");
Color cursor_color=get_color("cursor_color");
-
+
while(true) {
-
+
//end of string, break!
if (char_ofs>=text.length())
break;
@@ -477,32 +477,32 @@ void LineEdit::_notification(int p_what) {
CharType cchar=pass?'*':text[char_ofs];
CharType next=pass?'*':text[char_ofs+1];
int char_width=font->get_char_size( cchar,next ).width;
-
+
// end of widget, break!
if ((x_ofs + char_width) > ofs_max)
break;
-
-
+
+
bool selected=selection.enabled && char_ofs>=selection.begin && char_ofs<selection.end;
-
+
if (selected)
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(x_ofs, y_ofs), Size2(char_width, y_area)), selection_color);
-
+
font->draw_char(ci, Point2(x_ofs, y_ofs + font_ascent), cchar, next, selected ? font_color_selected : font_color);
-
+
if (char_ofs==cursor_pos && has_focus())
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(
Point2( x_ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color );
-
+
x_ofs+=char_width;
char_ofs++;
}
if (char_ofs==cursor_pos && has_focus()) //may be at the end
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(
- Point2( x_ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color );
-
+ Point2( x_ofs , y_ofs ), Size2( 1, y_area ) ), cursor_color );
+
} break;
case NOTIFICATION_FOCUS_ENTER: {
@@ -521,15 +521,15 @@ void LineEdit::_notification(int p_what) {
}
void LineEdit::copy_text() {
-
+
if(selection.enabled) {
-
+
OS::get_singleton()->set_clipboard(text.substr(selection.begin, selection.end - selection.begin));
}
}
void LineEdit::cut_text() {
-
+
if(selection.enabled) {
undo_text = text;
OS::get_singleton()->set_clipboard(text.substr(selection.begin, selection.end - selection.begin));
@@ -538,9 +538,9 @@ void LineEdit::cut_text() {
}
void LineEdit::paste_text() {
-
+
String paste_buffer = OS::get_singleton()->get_clipboard();
-
+
if(paste_buffer != "") {
if(selection.enabled) selection_delete();
@@ -550,28 +550,28 @@ void LineEdit::paste_text() {
_change_notify("text");
}
-
+
}
void LineEdit::shift_selection_check_pre(bool p_shift) {
-
+
if (!selection.old_shift && p_shift) {
selection.cursor_start=cursor_pos;
}
if (!p_shift)
selection_clear();
-
+
}
void LineEdit::shift_selection_check_post(bool p_shift) {
-
+
if (p_shift)
selection_fill_at_cursor();
}
void LineEdit::set_cursor_at_pixel_pos(int p_x) {
-
+
Ref<Font> font = get_font("font");
int ofs = window_pos;
Ref<StyleBox> style = get_stylebox("normal");
@@ -579,10 +579,10 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) {
Size2 size = get_size();
switch (align) {
-
+
case ALIGN_FILL:
case ALIGN_LEFT: {
-
+
pixel_ofs = int(style->get_offset().x);
} break;
case ALIGN_CENTER: {
@@ -597,30 +597,30 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) {
while (ofs<text.length()) {
-
+
int char_w = 0;
if (font != NULL) {
char_w = font->get_char_size(text[ofs]).width;
}
pixel_ofs+=char_w;
-
+
if (pixel_ofs > p_x) { //found what we look for
-
-
+
+
if ( (pixel_ofs-p_x) < (char_w >> 1 ) ) {
-
+
ofs+=1;
}
-
+
break;
}
-
-
+
+
ofs++;
}
-
+
set_cursor_pos( ofs );
-
+
/*
int new_cursor_pos=p_x;
int charwidth=draw_area->get_font_char_width(' ',0);
@@ -631,29 +631,29 @@ void LineEdit::set_cursor_at_pixel_pos(int p_x) {
void LineEdit::delete_char() {
-
+
if ((text.length()<=0) || (cursor_pos==0)) return;
-
+
Ref<Font> font = get_font("font");
if (font != NULL) {
cached_width -= font->get_char_size(text[cursor_pos - 1]).width;
}
-
+
text.erase( cursor_pos-1, 1 );
-
+
set_cursor_pos(get_cursor_pos()-1);
-
+
if (cursor_pos==window_pos) {
-
+
// set_window_pos(cursor_pos-get_window_length());
}
-
+
emit_signal("text_changed",text);
_change_notify("text");
}
void LineEdit::set_text(String p_text) {
-
+
clear_internal();
append_at_cursor(p_text);
update();
@@ -662,86 +662,86 @@ void LineEdit::set_text(String p_text) {
}
void LineEdit::clear() {
-
+
clear_internal();
}
String LineEdit::get_text() const {
-
+
return text;
}
void LineEdit::set_cursor_pos(int p_pos) {
-
+
if (p_pos>(int)text.length())
p_pos=text.length();
-
+
if(p_pos<0)
p_pos=0;
-
-
-
+
+
+
cursor_pos=p_pos;
-
+
// if (cursor_pos>(window_pos+get_window_length())) {
// set_window_pos(cursor_pos-get_window_lengt//h());
// }
-
+
if (!is_inside_tree()) {
-
+
window_pos=cursor_pos;
return;
}
-
+
Ref<StyleBox> style = get_stylebox("normal");
Ref<Font> font=get_font("font");
-
+
if (cursor_pos<window_pos) {
/* Adjust window if cursor goes too much to the left */
set_window_pos(cursor_pos);
} else if (cursor_pos>window_pos) {
/* Adjust window if cursor goes too much to the right */
int window_width=get_size().width-style->get_minimum_size().width;
-
+
if (window_width<0)
return;
int width_to_cursor=0;
int wp=window_pos;
-
+
if (font != NULL) {
for (int i=window_pos;i<cursor_pos;i++)
width_to_cursor+=font->get_char_size( text[i] ).width;
-
+
while (width_to_cursor >= window_width && wp < text.length()) {
width_to_cursor -= font->get_char_size(text[wp]).width;
wp++;
}
}
-
+
if (wp!=window_pos)
set_window_pos( wp );
-
+
}
update();
}
int LineEdit::get_cursor_pos() const {
-
+
return cursor_pos;
}
void LineEdit::set_window_pos(int p_pos) {
-
+
window_pos=p_pos;
if (window_pos<0) window_pos=0;
}
void LineEdit::append_at_cursor(String p_text) {
-
-
+
+
if ( ( max_length <= 0 ) || (text.length()+p_text.length() <= max_length)) {
-
+
undo_text = text;
Ref<Font> font = get_font("font");
@@ -761,7 +761,7 @@ void LineEdit::append_at_cursor(String p_text) {
}
void LineEdit::clear_internal() {
-
+
cached_width = 0;
cursor_pos=0;
window_pos=0;
@@ -771,21 +771,21 @@ void LineEdit::clear_internal() {
}
Size2 LineEdit::get_minimum_size() const {
-
+
Ref<StyleBox> style = get_stylebox("normal");
Ref<Font> font=get_font("font");
-
+
Size2 min=style->get_minimum_size();
min.height+=font->get_height();
min.width+=get_constant("minimum_spaces")*font->get_char_size(' ').x;
-
+
return min;
}
/* selection */
void LineEdit::selection_clear() {
-
+
selection.begin=0;
selection.end=0;
selection.cursor_start=0;
@@ -798,9 +798,9 @@ void LineEdit::selection_clear() {
void LineEdit::selection_delete() {
-
+
if (selection.enabled) {
-
+
undo_text = text;
if (text.size() > 0)
@@ -818,80 +818,80 @@ void LineEdit::selection_delete() {
text.erase(selection.begin,selection.end-selection.begin);
cursor_pos-=CLAMP( cursor_pos-selection.begin, 0, selection.end-selection.begin);
-
+
if (cursor_pos>=text.length()) {
-
+
cursor_pos=text.length();
}
if (window_pos>cursor_pos) {
-
+
window_pos=cursor_pos;
}
-
+
emit_signal("text_changed",text);
_change_notify("text");
};
-
+
selection_clear();
}
void LineEdit::set_max_length(int p_max_length) {
-
+
ERR_FAIL_COND(p_max_length<0);
max_length = p_max_length;
set_text(text);
}
int LineEdit::get_max_length() const {
-
+
return max_length;
}
void LineEdit::selection_fill_at_cursor() {
-
+
int aux;
-
+
selection.begin=cursor_pos;
selection.end=selection.cursor_start;
-
+
if (selection.end<selection.begin) {
aux=selection.end;
selection.end=selection.begin;
selection.begin=aux;
}
-
+
selection.enabled=(selection.begin!=selection.end);
}
void LineEdit::select_all() {
-
+
if (!text.length())
return;
-
+
selection.begin=0;
selection.end=text.length();
selection.enabled=true;
update();
-
+
}
void LineEdit::set_editable(bool p_editable) {
-
+
editable=p_editable;
update();
}
bool LineEdit::is_editable() const {
-
+
return editable;
}
void LineEdit::set_secret(bool p_secret) {
-
+
pass=p_secret;
update();
}
bool LineEdit::is_secret() const {
-
+
return pass;
}
@@ -928,24 +928,24 @@ bool LineEdit::is_text_field() const {
}
void LineEdit::_bind_methods() {
-
+
ObjectTypeDB::bind_method(_MD("set_align", "align"), &LineEdit::set_align);
ObjectTypeDB::bind_method(_MD("get_align"), &LineEdit::get_align);
ObjectTypeDB::bind_method(_MD("_input_event"),&LineEdit::_input_event);
- ObjectTypeDB::bind_method(_MD("clear"),&LineEdit::clear);
- ObjectTypeDB::bind_method(_MD("select_all"),&LineEdit::select_all);
+ ObjectTypeDB::bind_method(_MD("clear"),&LineEdit::clear);
+ ObjectTypeDB::bind_method(_MD("select_all"),&LineEdit::select_all);
ObjectTypeDB::bind_method(_MD("set_text","text"),&LineEdit::set_text);
- ObjectTypeDB::bind_method(_MD("get_text"),&LineEdit::get_text);
+ ObjectTypeDB::bind_method(_MD("get_text"),&LineEdit::get_text);
ObjectTypeDB::bind_method(_MD("set_cursor_pos","pos"),&LineEdit::set_cursor_pos);
- ObjectTypeDB::bind_method(_MD("get_cursor_pos"),&LineEdit::get_cursor_pos);
+ ObjectTypeDB::bind_method(_MD("get_cursor_pos"),&LineEdit::get_cursor_pos);
ObjectTypeDB::bind_method(_MD("set_max_length","chars"),&LineEdit::set_max_length);
- ObjectTypeDB::bind_method(_MD("get_max_length"),&LineEdit::get_max_length);
+ ObjectTypeDB::bind_method(_MD("get_max_length"),&LineEdit::get_max_length);
ObjectTypeDB::bind_method(_MD("append_at_cursor","text"),&LineEdit::append_at_cursor);
ObjectTypeDB::bind_method(_MD("set_editable","enabled"),&LineEdit::set_editable);
- ObjectTypeDB::bind_method(_MD("is_editable"),&LineEdit::is_editable);
+ ObjectTypeDB::bind_method(_MD("is_editable"),&LineEdit::is_editable);
ObjectTypeDB::bind_method(_MD("set_secret","enabled"),&LineEdit::set_secret);
- ObjectTypeDB::bind_method(_MD("is_secret"),&LineEdit::is_secret);
+ ObjectTypeDB::bind_method(_MD("is_secret"),&LineEdit::is_secret);
ObjectTypeDB::bind_method(_MD("select","from","to"),&LineEdit::select,DEFVAL(0),DEFVAL(-1));
ADD_SIGNAL( MethodInfo("text_changed", PropertyInfo( Variant::STRING, "text" )) );
@@ -964,25 +964,25 @@ void LineEdit::_bind_methods() {
}
LineEdit::LineEdit() {
-
+
align = ALIGN_LEFT;
cached_width = 0;
cursor_pos=0;
window_pos=0;
max_length = 0;
pass=false;
-
+
selection_clear();
set_focus_mode( FOCUS_ALL );
editable=true;
set_default_cursor_shape(CURSOR_IBEAM);
set_stop_mouse(true);
-
-
+
+
}
LineEdit::~LineEdit() {
-
-
+
+
}