Make Vector2D's default constructor initialize to the invalid value rather than a seemingly valid value. Fixes a few cases where uninitialized vectors were used as if they were initialized.

Originally committed to SVN as r5987.
This commit is contained in:
Thomas Goyne 2011-12-06 23:13:06 +00:00
parent f48c2a444d
commit c0cfe8afce
9 changed files with 18 additions and 20 deletions

View File

@ -98,7 +98,7 @@ void Spline::DecodeFromASS(wxString str) {
// Prepare // Prepare
char command = 'm'; char command = 'm';
Vector2D pt; Vector2D pt(0, 0);
// Tokenize the string // Tokenize the string
wxStringTokenizer tkn(str, " "); wxStringTokenizer tkn(str, " ");

View File

@ -62,7 +62,7 @@ public:
/// DOCME /// DOCME
CurveType type; CurveType type;
SplineCurve(Vector2D p1 = Vector2D()); SplineCurve(Vector2D p1 = Vector2D(0, 0));
SplineCurve(Vector2D p1, Vector2D p2); SplineCurve(Vector2D p1, Vector2D p2);
SplineCurve(Vector2D p1, Vector2D p2, Vector2D p3, Vector2D p4); SplineCurve(Vector2D p1, Vector2D p2, Vector2D p3, Vector2D p4);

View File

@ -31,6 +31,12 @@
#include <wx/numformatter.h> #include <wx/numformatter.h>
#endif #endif
Vector2D::Vector2D()
: x(std::numeric_limits<float>::min())
, y(std::numeric_limits<float>::min())
{
}
Vector2D operator *(float f, Vector2D v) { Vector2D operator *(float f, Vector2D v) {
return Vector2D(v.X() * f, v.Y() * f); return Vector2D(v.X() * f, v.Y() * f);
} }
@ -74,11 +80,7 @@ Vector2D Vector2D::Round(float step) const {
} }
Vector2D::operator unspecified_bool_type() const { Vector2D::operator unspecified_bool_type() const {
return *this == Bad() ? 0 : &Vector2D::x; return *this == Vector2D() ? 0 : &Vector2D::x;
}
Vector2D Vector2D::Bad() {
return Vector2D(std::numeric_limits<float>::min(), std::numeric_limits<float>::min());
} }
wxString Vector2D::PStr(char sep) const { wxString Vector2D::PStr(char sep) const {

View File

@ -42,7 +42,7 @@ public:
float X() const { return x; } float X() const { return x; }
float Y() const { return y; } float Y() const { return y; }
Vector2D() : x(0), y(0) { } Vector2D();
Vector2D(float x, float y) : x(x), y(y) { } Vector2D(float x, float y) : x(x), y(y) { }
Vector2D(wxPoint pt) : x(pt.x), y(pt.y) { } Vector2D(wxPoint pt) : x(pt.x), y(pt.y) { }
Vector2D(Vector2D x, Vector2D y) : x(x.x), y(y.y) { } Vector2D(Vector2D x, Vector2D y) : x(x.x), y(y.y) { }
@ -87,7 +87,6 @@ public:
wxString DStr(char sep = ',') const; wxString DStr(char sep = ',') const;
static Vector2D FromAngle(float angle) { return Vector2D(cos(-angle), sin(-angle)); } static Vector2D FromAngle(float angle) { return Vector2D(cos(-angle), sin(-angle)); }
static Vector2D Bad();
}; };
Vector2D operator * (float f, Vector2D v); Vector2D operator * (float f, Vector2D v);

View File

@ -98,7 +98,6 @@ VideoDisplay::VideoDisplay(
, con(c) , con(c)
, w(8) , w(8)
, h(8) , h(8)
, mouse_pos(Vector2D::Bad())
, viewport_left(0) , viewport_left(0)
, viewport_width(0) , viewport_width(0)
, viewport_bottom(0) , viewport_bottom(0)
@ -353,7 +352,7 @@ void VideoDisplay::OnMouseEvent(wxMouseEvent& event) {
} }
void VideoDisplay::OnMouseLeave(wxMouseEvent& event) { void VideoDisplay::OnMouseLeave(wxMouseEvent& event) {
mouse_pos = Vector2D::Bad(); mouse_pos = Vector2D();
tool->OnMouseEvent(event); tool->OnMouseEvent(event);
} }

View File

@ -40,9 +40,7 @@
#include "visual_feature.h" #include "visual_feature.h"
VisualDraggableFeature::VisualDraggableFeature() VisualDraggableFeature::VisualDraggableFeature()
: start(Vector2D::Bad()) : type(DRAG_NONE)
, type(DRAG_NONE)
, pos(Vector2D::Bad())
, layer(0) , layer(0)
, line(0) , line(0)
{ {

View File

@ -192,7 +192,7 @@ void VisualTool<FeatureType>::OnMouseEvent(wxMouseEvent &event) {
bool need_render = false; bool need_render = false;
if (event.Leaving()) { if (event.Leaving()) {
mouse_pos = Vector2D::Bad(); mouse_pos = Vector2D();
parent->Render(); parent->Render();
return; return;
} }
@ -392,7 +392,7 @@ static Vector2D vec_or_bad(param_vec tag, size_t x_idx, size_t y_idx) {
(*tag)[x_idx]->omitted || (*tag)[y_idx]->omitted || (*tag)[x_idx]->omitted || (*tag)[y_idx]->omitted ||
(*tag)[x_idx]->GetType() == VARDATA_NONE || (*tag)[y_idx]->GetType() == VARDATA_NONE) (*tag)[x_idx]->GetType() == VARDATA_NONE || (*tag)[y_idx]->GetType() == VARDATA_NONE)
{ {
return Vector2D::Bad(); return Vector2D();
} }
return Vector2D((*tag)[x_idx]->Get<float>(), (*tag)[y_idx]->Get<float>()); return Vector2D((*tag)[x_idx]->Get<float>(), (*tag)[y_idx]->Get<float>());
} }
@ -525,7 +525,7 @@ void VisualToolBase::GetLineClip(AssDialogue *diag, Vector2D &p1, Vector2D &p2,
p2 = vec_or_bad(tag, 2, 3); p2 = vec_or_bad(tag, 2, 3);
} }
else { else {
p1 = Vector2D(); p1 = Vector2D(0, 0);
p2 = script_res - 1; p2 = script_res - 1;
} }
} }

View File

@ -59,7 +59,7 @@ void VisualToolRotateZ::Draw() {
// Draw the circle // Draw the circle
gl.SetLineColour(colour[0]); gl.SetLineColour(colour[0]);
gl.SetFillColour(colour[1], 0.3f); gl.SetFillColour(colour[1], 0.3f);
gl.DrawRing(Vector2D(), radius + 4, radius - 4); gl.DrawRing(Vector2D(0, 0), radius + 4, radius - 4);
// Draw markers around circle // Draw markers around circle
int markers = 6; int markers = 6;
@ -67,7 +67,7 @@ void VisualToolRotateZ::Draw() {
float markEnd = markStart + (180.f / markers); float markEnd = markStart + (180.f / markers);
for (int i = 0; i < markers; ++i) { for (int i = 0; i < markers; ++i) {
float angle = i * (360.f / markers); float angle = i * (360.f / markers);
gl.DrawRing(Vector2D(), radius+30, radius+12, 1.0, angle+markStart, angle+markEnd); gl.DrawRing(Vector2D(0, 0), radius+30, radius+12, 1.0, angle+markStart, angle+markEnd);
} }
// Draw the baseline through the origin showing current rotation // Draw the baseline through the origin showing current rotation

View File

@ -100,7 +100,7 @@ void VisualToolScale::UpdateHold() {
if (shift_down) if (shift_down)
delta = delta.SingleAxis(); delta = delta.SingleAxis();
scale = Vector2D().Max(delta * 1.25f + initial_scale); scale = Vector2D(0, 0).Max(delta * 1.25f + initial_scale);
if (ctrl_down) if (ctrl_down)
scale = scale.Round(25.f); scale = scale.Round(25.f);