summaryrefslogtreecommitdiff
path: root/scene
diff options
context:
space:
mode:
Diffstat (limited to 'scene')
-rw-r--r--scene/2d/line_builder.cpp4
-rw-r--r--scene/2d/path_2d.cpp4
-rw-r--r--scene/3d/path.cpp4
-rw-r--r--scene/gui/container.cpp1
-rw-r--r--scene/gui/graph_edit.cpp10
-rw-r--r--scene/gui/text_edit.cpp11
-rw-r--r--scene/resources/texture.cpp19
-rw-r--r--scene/resources/texture.h1
8 files changed, 43 insertions, 11 deletions
diff --git a/scene/2d/line_builder.cpp b/scene/2d/line_builder.cpp
index 18302dcce1..eb09d3c9d3 100644
--- a/scene/2d/line_builder.cpp
+++ b/scene/2d/line_builder.cpp
@@ -279,6 +279,10 @@ void LineBuilder::build() {
}
} else {
// No intersection: fallback
+ if (current_joint_mode == Line2D::LINE_JOINT_SHARP) {
+ // There is no fallback implementation for LINE_JOINT_SHARP so switch to the LINE_JOINT_BEVEL
+ current_joint_mode = Line2D::LINE_JOINT_BEVEL;
+ }
pos_up1 = corner_pos_up;
pos_down1 = corner_pos_down;
}
diff --git a/scene/2d/path_2d.cpp b/scene/2d/path_2d.cpp
index 1b1b8222b9..271e132002 100644
--- a/scene/2d/path_2d.cpp
+++ b/scene/2d/path_2d.cpp
@@ -261,7 +261,7 @@ void PathFollow2D::_validate_property(PropertyInfo &property) const {
if (path && path->get_curve().is_valid())
max = path->get_curve()->get_baked_length();
- property.hint_string = "0," + rtos(max) + ",0.01";
+ property.hint_string = "0," + rtos(max) + ",0.01,or_greater";
}
}
@@ -304,7 +304,7 @@ void PathFollow2D::_bind_methods() {
ClassDB::bind_method(D_METHOD("get_lookahead"), &PathFollow2D::get_lookahead);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset");
- ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001,or_greater", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset");
ADD_PROPERTY(PropertyInfo(Variant::BOOL, "rotate"), "set_rotate", "is_rotating");
diff --git a/scene/3d/path.cpp b/scene/3d/path.cpp
index a06ac973b4..4e027f43f6 100644
--- a/scene/3d/path.cpp
+++ b/scene/3d/path.cpp
@@ -213,7 +213,7 @@ void PathFollow::_validate_property(PropertyInfo &property) const {
if (path && path->get_curve().is_valid())
max = path->get_curve()->get_baked_length();
- property.hint_string = "0," + rtos(max) + ",0.01";
+ property.hint_string = "0," + rtos(max) + ",0.01,or_greater";
}
}
@@ -253,7 +253,7 @@ void PathFollow::_bind_methods() {
ClassDB::bind_method(D_METHOD("has_loop"), &PathFollow::has_loop);
ADD_PROPERTY(PropertyInfo(Variant::REAL, "offset", PROPERTY_HINT_RANGE, "0,10000,0.01,or_greater"), "set_offset", "get_offset");
- ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset");
+ ADD_PROPERTY(PropertyInfo(Variant::REAL, "unit_offset", PROPERTY_HINT_RANGE, "0,1,0.0001,or_greater", PROPERTY_USAGE_EDITOR), "set_unit_offset", "get_unit_offset");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "h_offset"), "set_h_offset", "get_h_offset");
ADD_PROPERTY(PropertyInfo(Variant::REAL, "v_offset"), "set_v_offset", "get_v_offset");
ADD_PROPERTY(PropertyInfo(Variant::INT, "rotation_mode", PROPERTY_HINT_ENUM, "None,Y,XY,XYZ"), "set_rotation_mode", "get_rotation_mode");
diff --git a/scene/gui/container.cpp b/scene/gui/container.cpp
index c58975d332..2579321773 100644
--- a/scene/gui/container.cpp
+++ b/scene/gui/container.cpp
@@ -95,6 +95,7 @@ void Container::_sort_children() {
void Container::fit_child_in_rect(Control *p_child, const Rect2 &p_rect) {
+ ERR_FAIL_COND(!p_child);
ERR_FAIL_COND(p_child->get_parent() != this);
Size2 minsize = p_child->get_combined_minimum_size();
diff --git a/scene/gui/graph_edit.cpp b/scene/gui/graph_edit.cpp
index b4e4f7125d..94c65b3e64 100644
--- a/scene/gui/graph_edit.cpp
+++ b/scene/gui/graph_edit.cpp
@@ -34,6 +34,10 @@
#include "core/os/keyboard.h"
#include "scene/gui/box_container.h"
+#ifdef TOOLS_ENABLED
+#include "editor/editor_scale.h"
+#endif
+
#define ZOOM_SCALE 1.2
#define MIN_ZOOM (((1 / ZOOM_SCALE) / ZOOM_SCALE) / ZOOM_SCALE)
@@ -665,11 +669,15 @@ void GraphEdit::_draw_cos_line(CanvasItem *p_where, const Vector2 &p_from, const
Vector<Color> colors;
points.push_back(p_from);
colors.push_back(p_color);
- _bake_segment2d(points, colors, 0, 1, p_from, c1, p_to, c2, 0, 3, 9, 8, p_color, p_to_color, lines);
+ _bake_segment2d(points, colors, 0, 1, p_from, c1, p_to, c2, 0, 3, 9, 3, p_color, p_to_color, lines);
points.push_back(p_to);
colors.push_back(p_to_color);
+#ifdef TOOLS_ENABLED
+ p_where->draw_polyline_colors(points, colors, Math::floor(2 * EDSCALE), true);
+#else
p_where->draw_polyline_colors(points, colors, 2, true);
+#endif
}
void GraphEdit::_connections_layer_draw() {
diff --git a/scene/gui/text_edit.cpp b/scene/gui/text_edit.cpp
index 4607e55057..7577ee22ab 100644
--- a/scene/gui/text_edit.cpp
+++ b/scene/gui/text_edit.cpp
@@ -802,6 +802,7 @@ void TextEdit::_notification(int p_what) {
}
Point2 cursor_pos;
+ int cursor_insert_offset_y = 0;
// get the highlighted words
String highlighted_text = get_selection_text();
@@ -1111,7 +1112,8 @@ void TextEdit::_notification(int p_what) {
cursor_pos.y += (get_row_height() - cache.font->get_height()) / 2;
if (insert_mode) {
- cursor_pos.y += (cache.font->get_height() - 3);
+ cursor_insert_offset_y = (cache.font->get_height() - 3);
+ cursor_pos.y += cursor_insert_offset_y;
}
int caret_w = (str[j] == '\t') ? cache.font->get_char_size(' ').width : char_w;
@@ -1203,7 +1205,8 @@ void TextEdit::_notification(int p_what) {
cursor_pos.y += (get_row_height() - cache.font->get_height()) / 2;
if (insert_mode) {
- cursor_pos.y += (cache.font->get_height() - 3);
+ cursor_insert_offset_y = cache.font->get_height() - 3;
+ cursor_pos.y += cursor_insert_offset_y;
}
if (ime_text.length() > 0) {
int ofs = 0;
@@ -1291,9 +1294,9 @@ void TextEdit::_notification(int p_what) {
int th = h + csb->get_minimum_size().y;
if (cursor_pos.y + get_row_height() + th > get_size().height) {
- completion_rect.position.y = cursor_pos.y - th;
+ completion_rect.position.y = cursor_pos.y - th - (cache.line_spacing / 2.0f) - cursor_insert_offset_y;
} else {
- completion_rect.position.y = cursor_pos.y + get_row_height() + csb->get_offset().y - cache.font->get_height();
+ completion_rect.position.y = cursor_pos.y + cache.font->get_height() + (cache.line_spacing / 2.0f) + csb->get_offset().y - cursor_insert_offset_y;
completion_below = true;
}
diff --git a/scene/resources/texture.cpp b/scene/resources/texture.cpp
index ad962a3551..d719aa6126 100644
--- a/scene/resources/texture.cpp
+++ b/scene/resources/texture.cpp
@@ -1087,8 +1087,12 @@ bool AtlasTexture::is_pixel_opaque(int p_x, int p_y) const {
if (!atlas.is_valid())
return true;
- int x = p_x + region.position.x + margin.position.x;
- int y = p_y + region.position.y + margin.position.y;
+ int x = p_x + region.position.x - margin.position.x;
+ int y = p_y + region.position.y - margin.position.y;
+
+ // margin edge may outside of atlas
+ if (x < 0 || x >= atlas->get_width()) return false;
+ if (y < 0 || y >= atlas->get_height()) return false;
return atlas->is_pixel_opaque(x, y);
}
@@ -1205,6 +1209,17 @@ Ref<Texture> LargeTexture::get_piece_texture(int p_idx) const {
ERR_FAIL_INDEX_V(p_idx, pieces.size(), Ref<Texture>());
return pieces[p_idx].texture;
}
+Ref<Image> LargeTexture::to_image() const {
+
+ Ref<Image> img = memnew(Image(this->get_width(), this->get_height(), false, Image::FORMAT_RGBA8));
+ for (int i = 0; i < pieces.size(); i++) {
+
+ Ref<Image> src_img = pieces[i].texture->get_data();
+ img->blit_rect(src_img, Rect2(0, 0, src_img->get_width(), src_img->get_height()), pieces[i].offset);
+ }
+
+ return img;
+}
void LargeTexture::_bind_methods() {
diff --git a/scene/resources/texture.h b/scene/resources/texture.h
index cf23aad239..2b67ebec62 100644
--- a/scene/resources/texture.h
+++ b/scene/resources/texture.h
@@ -330,6 +330,7 @@ public:
int get_piece_count() const;
Vector2 get_piece_offset(int p_idx) const;
Ref<Texture> get_piece_texture(int p_idx) const;
+ Ref<Image> to_image() const;
virtual void draw(RID p_canvas_item, const Point2 &p_pos, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, const Ref<Texture> &p_normal_map = Ref<Texture>()) const;
virtual void draw_rect(RID p_canvas_item, const Rect2 &p_rect, bool p_tile = false, const Color &p_modulate = Color(1, 1, 1), bool p_transpose = false, const Ref<Texture> &p_normal_map = Ref<Texture>()) const;