summaryrefslogtreecommitdiff
path: root/scene/gui
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2020-03-21 09:50:19 +0100
committerRémi Verschelde <rverschelde@gmail.com>2020-03-21 11:54:08 +0100
commitca4e4506dba014341a099f043f51bb6afd33d520 (patch)
treec539dfd3cd422909fa776107e100a0419e212b4d /scene/gui
parentcce0a27ec7dd7c11fcb37eb724b0b7e97b3b1478 (diff)
Fix potential divisions by 0 reported by MSVC
The `TextEdit` one was indeed a potential bug. The `PCKPacker` one seems to be a false positive, it's already in a `for` loop that depends on `files.size()`.
Diffstat (limited to 'scene/gui')
-rw-r--r--scene/gui/text_edit.cpp19
1 files changed, 10 insertions, 9 deletions
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 06691d09be..cdc2430eb5 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -1582,7 +1582,7 @@ void TextEdit::_notification(int p_what) {
}
bool completion_below = false;
- if (completion_active) {
+ if (completion_active && completion_options.size() > 0) {
// Code completion box.
Ref<StyleBox> csb = get_stylebox("completion");
int maxlines = get_constant("completion_lines");
@@ -1590,13 +1590,14 @@ void TextEdit::_notification(int p_what) {
int scrollw = get_constant("completion_scroll_width");
Color scrollc = get_color("completion_scroll_color");
- int lines = MIN(completion_options.size(), maxlines);
+ const int completion_options_size = completion_options.size();
+ int lines = MIN(completion_options_size, maxlines);
int w = 0;
int h = lines * get_row_height();
int nofs = cache.font->get_string_size(completion_base).width;
- if (completion_options.size() < 50) {
- for (int i = 0; i < completion_options.size(); i++) {
+ if (completion_options_size < 50) {
+ for (int i = 0; i < completion_options_size; i++) {
int w2 = MIN(cache.font->get_string_size(completion_options[i].display).x, cmax_width);
if (w2 > w)
w = w2;
@@ -1627,7 +1628,7 @@ void TextEdit::_notification(int p_what) {
completion_rect.size.width = w + 2;
completion_rect.size.height = h;
- if (completion_options.size() <= maxlines)
+ if (completion_options_size <= maxlines)
scrollw = 0;
draw_style_box(csb, Rect2(completion_rect.position - csb->get_offset(), completion_rect.size + csb->get_minimum_size() + Size2(scrollw, 0)));
@@ -1635,14 +1636,14 @@ void TextEdit::_notification(int p_what) {
if (cache.completion_background_color.a > 0.01) {
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(completion_rect.position, completion_rect.size + Size2(scrollw, 0)), cache.completion_background_color);
}
- int line_from = CLAMP(completion_index - lines / 2, 0, completion_options.size() - lines);
+ int line_from = CLAMP(completion_index - lines / 2, 0, completion_options_size - lines);
VisualServer::get_singleton()->canvas_item_add_rect(ci, Rect2(Point2(completion_rect.position.x, completion_rect.position.y + (completion_index - line_from) * get_row_height()), Size2(completion_rect.size.width, get_row_height())), cache.completion_selected_color);
draw_rect(Rect2(completion_rect.position + Vector2(icon_area_size.x + icon_hsep, 0), Size2(MIN(nofs, completion_rect.size.width - (icon_area_size.x + icon_hsep)), completion_rect.size.height)), cache.completion_existing_color);
for (int i = 0; i < lines; i++) {
int l = line_from + i;
- ERR_CONTINUE(l < 0 || l >= completion_options.size());
+ ERR_CONTINUE(l < 0 || l >= completion_options_size);
Color text_color = cache.completion_font_color;
for (int j = 0; j < color_regions.size(); j++) {
if (completion_options[l].insert_text.begins_with(color_regions[j].begin_key)) {
@@ -1669,8 +1670,8 @@ void TextEdit::_notification(int p_what) {
if (scrollw) {
// Draw a small scroll rectangle to show a position in the options.
- float r = maxlines / (float)completion_options.size();
- float o = line_from / (float)completion_options.size();
+ float r = (float)maxlines / completion_options_size;
+ float o = (float)line_from / completion_options_size;
draw_rect(Rect2(completion_rect.position.x + completion_rect.size.width, completion_rect.position.y + o * completion_rect.size.y, scrollw, completion_rect.size.y * r), scrollc);
}