Add support for sixtyfps::Image::size() in C++

Also added a unit test for the C++ implementation.
This commit is contained in:
Simon Hausmann 2021-06-18 21:35:43 +02:00 committed by Simon Hausmann
parent 0fdb87cc69
commit 85474f7670
6 changed files with 66 additions and 9 deletions

View file

@ -15,6 +15,20 @@ LICENSE END */
namespace sixtyfps {
#if !defined(DOXYGEN)
using cbindgen_private::types::Size;
#else
/// The Size structure is used to represent a two-dimensional size
/// with width and height.
struct Size
{
/// The width of the size
float width;
/// The height of the size
float height;
};
#endif
/// An image type that can be displayed by the Image element
struct Image
{
@ -22,7 +36,8 @@ public:
Image() : data(Data::None()) { }
/// Load an image from an image file
static Image load_from_path(const SharedString &file_path) {
static Image load_from_path(const SharedString &file_path)
{
Image img;
img.data = Data::AbsoluteFilePath(file_path);
return img;
@ -35,12 +50,12 @@ public:
return img;
}
*/
friend bool operator==(const Image &a, const Image &b) {
return a.data == b.data;
}
friend bool operator!=(const Image &a, const Image &b) {
return a.data != b.data;
}
/// Returns the size of the Image in pixels.
Size size() const { return cbindgen_private::types::sixtyfps_image_size(&data); }
friend bool operator==(const Image &a, const Image &b) { return a.data == b.data; }
friend bool operator!=(const Image &a, const Image &b) { return a.data != b.data; }
private:
using Tag = cbindgen_private::types::ImageInner::Tag;

View file

@ -13,6 +13,7 @@ LICENSE END */
#include "catch2/catch.hpp"
#include <sixtyfps.h>
#include <sixtyfps_image.h>
SCENARIO("SharedString API")
{
@ -72,3 +73,24 @@ TEST_CASE("Property Tracker")
REQUIRE(!tracker1.is_dirty());
}
TEST_CASE("Image")
{
using namespace sixtyfps;
// ensure a backend exists, using private api
private_api::ComponentWindow wnd;
Image img;
{
auto size = img.size();
REQUIRE(size.width == 0.);
REQUIRE(size.height == 0.);
}
img = Image::load_from_path(SOURCE_DIR "/../../vscode_extension/extension-logo.png");
{
auto size = img.size();
REQUIRE(size.width == 128.);
REQUIRE(size.height == 128.);
}
}