mirror of
https://github.com/slint-ui/slint.git
synced 2025-10-01 06:11:16 +00:00
Also do the comperty comparison in C++
This commit is contained in:
parent
2ece3817cc
commit
1eb7203ec8
6 changed files with 82 additions and 4 deletions
|
@ -37,6 +37,23 @@ public:
|
|||
{
|
||||
}
|
||||
|
||||
friend bool operator==(const PathData &a, const PathData &b) {
|
||||
if (a.data.tag != b.data.tag)
|
||||
return false;
|
||||
switch (a.data.tag) {
|
||||
case cbindgen_private::types::PathData::Tag::Elements:
|
||||
return a.data.elements._0 == b.data.elements._0;
|
||||
case cbindgen_private::types::PathData::Tag::Events:
|
||||
return a.data.events._0 == b.data.events._0 && b.data.events._0 == b.data.events._0;
|
||||
case cbindgen_private::types::PathData::Tag::None:
|
||||
return true;
|
||||
}
|
||||
}
|
||||
friend bool operator!=(const PathData &a, const PathData &b) {
|
||||
return !(a == b);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
static SharedArray<PathElement> elements_from_array(const PathElement *firstElement,
|
||||
size_t count)
|
||||
|
|
|
@ -41,8 +41,10 @@ struct Property
|
|||
|
||||
void set(const T &value) const
|
||||
{
|
||||
this->value = value;
|
||||
cbindgen_private::sixtyfps_property_set_changed(&inner, &this->value);
|
||||
if (this->value != value) {
|
||||
this->value = value;
|
||||
cbindgen_private::sixtyfps_property_set_changed(&inner, &this->value);
|
||||
}
|
||||
}
|
||||
|
||||
const T &get() const
|
||||
|
|
|
@ -17,12 +17,19 @@ namespace sixtyfps {
|
|||
struct Resource
|
||||
{
|
||||
public:
|
||||
using Tag = cbindgen_private::types::Resource::Tag;
|
||||
|
||||
Resource() : data(Data::None()) { }
|
||||
Resource(const SharedString &file_path) : data(Data::AbsoluteFilePath(file_path)) { }
|
||||
|
||||
friend bool operator==(const Resource &a, const Resource &b) {
|
||||
return a.data == b.data;
|
||||
}
|
||||
friend bool operator!=(const Resource &a, const Resource &b) {
|
||||
return a.data != b.data;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
using Tag = cbindgen_private::types::Resource::Tag;
|
||||
using Data = cbindgen_private::types::Resource;
|
||||
Data data;
|
||||
};
|
||||
|
|
|
@ -10,6 +10,7 @@ LICENSE END */
|
|||
#pragma once
|
||||
#include "sixtyfps_sharedarray_internal.h"
|
||||
#include <atomic>
|
||||
#include <algorithm>
|
||||
|
||||
namespace sixtyfps {
|
||||
|
||||
|
@ -95,6 +96,16 @@ struct SharedArray
|
|||
inner->size++;
|
||||
}
|
||||
|
||||
friend bool operator==(const SharedArray &a, const SharedArray &b) {
|
||||
if (a.size() != a.size())
|
||||
return false;
|
||||
return std::equal(a.cbegin(), a.cend(), b.cbegin());
|
||||
}
|
||||
friend bool operator!=(const SharedArray &a, const SharedArray &b) {
|
||||
return !(a == b);
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
void detach(std::size_t expected_capacity) {
|
||||
if (inner->refcount == 1 && expected_capacity <= inner->capacity) {
|
||||
|
@ -142,4 +153,15 @@ private:
|
|||
explicit SharedArray(SharedArrayHeader *inner) : inner(inner) {}
|
||||
#endif
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
bool operator==(cbindgen_private::Slice<T> a, cbindgen_private::Slice<T> b) {
|
||||
if (a.len != b.len) return false;
|
||||
return std::equal(a.ptr, a.ptr + a.len, b.ptr);
|
||||
}
|
||||
template<typename T>
|
||||
bool operator!=(cbindgen_private::Slice<T> a, cbindgen_private::Slice<T> b) {
|
||||
return !(a != b);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue