We only read/use floats, not doubles
diff --git a/build/premake5.lua b/build/premake5.lua
index 2d8c587..c592111 100644
--- a/build/premake5.lua
+++ b/build/premake5.lua
@@ -75,7 +75,11 @@
}
filter {"system:macosx" }
- buildoptions {"-flto=full"}
+ buildoptions {
+ "-flto=full",
+ -- this triggers too much on linux, so just enable here for now
+ "-Wimplicit-float-conversion",
+ }
filter {"system:ios" }
buildoptions {"-flto=full"}
diff --git a/include/rive/core/binary_reader.hpp b/include/rive/core/binary_reader.hpp
index eb45f15..eca5ce7 100644
--- a/include/rive/core/binary_reader.hpp
+++ b/include/rive/core/binary_reader.hpp
@@ -29,7 +29,6 @@
std::string readString();
Span<const uint8_t> readBytes();
- double readFloat64();
float readFloat32();
uint8_t readByte();
uint32_t readUint32();
diff --git a/include/rive/core/field_types/core_double_type.hpp b/include/rive/core/field_types/core_double_type.hpp
index e13be51..351c9b2 100644
--- a/include/rive/core/field_types/core_double_type.hpp
+++ b/include/rive/core/field_types/core_double_type.hpp
@@ -6,7 +6,7 @@
class CoreDoubleType {
public:
static const int id = 2;
- static double deserialize(BinaryReader& reader);
+ static float deserialize(BinaryReader& reader);
};
} // namespace rive
#endif
\ No newline at end of file
diff --git a/include/rive/core/reader.h b/include/rive/core/reader.h
index 1779cc0..572ef24 100644
--- a/include/rive/core/reader.h
+++ b/include/rive/core/reader.h
@@ -47,22 +47,6 @@
return str_len;
}
-/* Decodes a double (8 bytes)
- */
-inline size_t decode_double(const uint8_t* buf, const uint8_t* buf_end, double* r) {
- // Return zero bytes read on buffer overflow
- if (buf_end - buf < ((unsigned)sizeof(double))) {
- return 0;
- }
- if (is_big_endian()) {
- uint8_t inverted[8] = {buf[7], buf[6], buf[5], buf[4], buf[3], buf[2], buf[1], buf[0]};
- memcpy(r, inverted, sizeof(double));
- } else {
- memcpy(r, buf, sizeof(double));
- }
- return sizeof(double);
-}
-
/* Decodes a float (4 bytes)
*/
inline size_t decode_float(const uint8_t* buf, const uint8_t* buf_end, float* r) {
diff --git a/include/rive/math/circle_constant.hpp b/include/rive/math/circle_constant.hpp
index da7c9c5..d3d7ed1 100644
--- a/include/rive/math/circle_constant.hpp
+++ b/include/rive/math/circle_constant.hpp
@@ -4,8 +4,8 @@
#include "rive/rive_types.hpp"
namespace rive {
- constexpr float circleConstant = 0.552284749831;
- constexpr float icircleConstant = 1.0 - circleConstant;
+ constexpr float circleConstant = 0.552284749831f;
+ constexpr float icircleConstant = 1.0f - circleConstant;
} // namespace rive
#endif
diff --git a/src/animation/keyframe_double.cpp b/src/animation/keyframe_double.cpp
index b059062..887ade1 100644
--- a/src/animation/keyframe_double.cpp
+++ b/src/animation/keyframe_double.cpp
@@ -12,7 +12,7 @@
if (mix == 1.0f) {
CoreRegistry::setDouble(object, propertyKey, value);
} else {
- float mixi = 1.0 - mix;
+ float mixi = 1.0f - mix;
CoreRegistry::setDouble(
object, propertyKey, CoreRegistry::getDouble(object, propertyKey) * mixi + value * mix);
}
diff --git a/src/animation/linear_animation_instance.cpp b/src/animation/linear_animation_instance.cpp
index 9819657..46d7349 100644
--- a/src/animation/linear_animation_instance.cpp
+++ b/src/animation/linear_animation_instance.cpp
@@ -60,7 +60,7 @@
if (m_Direction == 1 && frames >= end) {
m_SpilledTime = (frames - end) / fps;
frames = m_Time * fps;
- frames = start + std::fmod(frames - start, range);
+ frames = start + std::fmod(frames - start, (float)range);
m_Time = frames / fps;
didLoop = true;
@@ -68,7 +68,7 @@
m_SpilledTime = (start - frames) / fps;
frames = m_Time * fps;
- frames = end - std::abs(std::fmod(start - frames, range));
+ frames = end - std::abs(std::fmod(start - frames, (float)range));
m_Time = frames / fps;
didLoop = true;
}
diff --git a/src/artboard.cpp b/src/artboard.cpp
index 5a865ea..58e9cae 100644
--- a/src/artboard.cpp
+++ b/src/artboard.cpp
@@ -375,7 +375,7 @@
bool Artboard::advance(double elapsedSeconds) {
for (auto nestedArtboard : m_NestedArtboards) {
- nestedArtboard->advance(elapsedSeconds);
+ nestedArtboard->advance((float)elapsedSeconds);
}
return updateComponents();
}
diff --git a/src/core/binary_reader.cpp b/src/core/binary_reader.cpp
index 153ec46..b87475e 100644
--- a/src/core/binary_reader.cpp
+++ b/src/core/binary_reader.cpp
@@ -66,17 +66,6 @@
return {start, (size_t)length};
}
-double BinaryReader::readFloat64() {
- double value;
- auto readBytes = decode_double(m_Position, m_Bytes.end(), &value);
- if (readBytes == 0) {
- overflow();
- return 0.0;
- }
- m_Position += readBytes;
- return value;
-}
-
float BinaryReader::readFloat32() {
float value;
auto readBytes = decode_float(m_Position, m_Bytes.end(), &value);
diff --git a/src/core/field_types/core_double_type.cpp b/src/core/field_types/core_double_type.cpp
index a0c26e7..cbd3a0d 100644
--- a/src/core/field_types/core_double_type.cpp
+++ b/src/core/field_types/core_double_type.cpp
@@ -3,4 +3,4 @@
using namespace rive;
-double CoreDoubleType::deserialize(BinaryReader& reader) { return reader.readFloat32(); }
\ No newline at end of file
+float CoreDoubleType::deserialize(BinaryReader& reader) { return reader.readFloat32(); }
\ No newline at end of file
diff --git a/src/renderer.cpp b/src/renderer.cpp
index d56657b..37c3a89 100644
--- a/src/renderer.cpp
+++ b/src/renderer.cpp
@@ -6,10 +6,10 @@
Mat2D rive::computeAlignment(Fit fit, Alignment alignment, const AABB& frame, const AABB& content) {
float contentWidth = content.width();
float contentHeight = content.height();
- float x = -content.left() - contentWidth / 2.0 - (alignment.x() * contentWidth / 2.0);
- float y = -content.top() - contentHeight / 2.0 - (alignment.y() * contentHeight / 2.0);
+ float x = -content.left() - contentWidth * 0.5f - (alignment.x() * contentWidth * 0.5f);
+ float y = -content.top() - contentHeight * 0.5f - (alignment.y() * contentHeight * 0.5f);
- float scaleX = 1.0, scaleY = 1.0;
+ float scaleX = 1.0f, scaleY = 1.0f;
switch (fit) {
case Fit::fill: {
@@ -40,20 +40,20 @@
break;
}
case Fit::none: {
- scaleX = scaleY = 1.0;
+ scaleX = scaleY = 1.0f;
break;
}
case Fit::scaleDown: {
float minScale =
std::fmin(frame.width() / contentWidth, frame.height() / contentHeight);
- scaleX = scaleY = minScale < 1.0 ? minScale : 1.0;
+ scaleX = scaleY = minScale < 1.0f ? minScale : 1.0f;
break;
}
}
Mat2D translation;
- translation[4] = frame.left() + frame.width() / 2.0 + (alignment.x() * frame.width() / 2.0);
- translation[5] = frame.top() + frame.height() / 2.0 + (alignment.y() * frame.height() / 2.0);
+ translation[4] = frame.left() + frame.width() * 0.5f + (alignment.x() * frame.width() * 0.5f);
+ translation[5] = frame.top() + frame.height() * 0.5f + (alignment.y() * frame.height() * 0.5f);
return translation * Mat2D::fromScale(scaleX, scaleY) * Mat2D::fromTranslate(x, y);
}
diff --git a/src/shapes/paint/linear_gradient.cpp b/src/shapes/paint/linear_gradient.cpp
index 92fb7a6..06a7a3b 100644
--- a/src/shapes/paint/linear_gradient.cpp
+++ b/src/shapes/paint/linear_gradient.cpp
@@ -78,7 +78,7 @@
}
// build up the color and positions lists
- const double ro = opacity() * renderOpacity();
+ const auto ro = opacity() * renderOpacity();
const auto count = m_Stops.size();
// need some temporary storage. Allocate enough for both arrays
diff --git a/test/reader_test.cpp b/test/reader_test.cpp
index 5ad83ab..9178cd3 100644
--- a/test/reader_test.cpp
+++ b/test/reader_test.cpp
@@ -32,29 +32,6 @@
delete decoded_str;
}
-TEST_CASE("double decoder", "[reader]") {
- double decoded_num;
- uint64_t bytes_read;
-
- uint8_t num_bytes_100[] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x40};
- bytes_read = decode_double(num_bytes_100, num_bytes_100 + 8, &decoded_num);
- REQUIRE(decoded_num == 100);
- REQUIRE(bytes_read == 8);
-
- uint8_t num_bytes_pi[] = {0x6E, 0x86, 0x1B, 0xF0, 0xF9, 0x21, 0x09, 0x40};
- bytes_read = decode_double(num_bytes_pi, num_bytes_pi + 8, &decoded_num);
- REQUIRE(decoded_num == 3.14159);
- REQUIRE(bytes_read == 8);
-
- uint8_t num_bytes_neg_euler[] = {0x96, 0xB4, 0xE2, 0x1B, 0x0A, 0xBF, 0x05, 0xC0};
- bytes_read = decode_double(num_bytes_neg_euler, num_bytes_neg_euler + 8, &decoded_num);
- REQUIRE(decoded_num == -2.718281);
- REQUIRE(bytes_read == 8);
-
- bytes_read = decode_double(num_bytes_neg_euler, num_bytes_neg_euler + 7, &decoded_num);
- REQUIRE(bytes_read == 0);
-}
-
TEST_CASE("float decoder", "[reader]") {
float decoded_num;
uint64_t bytes_read;