Commit graph

376 commits

Author SHA1 Message Date
Simon Hausmann
d4178e0935 Avoid duplicate symbols when linking .o files
Mark some functions as inline to avoid generating symbols that would
produce duplicate errors when linking multiple .o files that include the
SixtyFPS headers.
2021-03-31 08:42:54 +02:00
Simon Hausmann
3f6bbaf53a Make it possible to use the C++ headers without CMake
Detect the pointer size solely via the pre-processor
2021-03-31 08:42:54 +02:00
Simon Hausmann
7a708525d9 Fix usage of installed C++ headers
Include two new internal header files in the install set
2021-03-31 08:42:54 +02:00
Simon Hausmann
70653ec7cd Add C++ API for ComponentDefinition::properties() 2021-03-31 08:42:54 +02:00
Olivier Goffart
8ef0b3481c Don't make CI fails for warnings on windows 2021-03-30 19:25:00 +02:00
Olivier Goffart
a0cc8a2976 Have C++ warning in test break the CI 2021-03-30 18:06:24 +02:00
Olivier Goffart
d37856b754 Avoid strict aliasing warning 2021-03-30 18:06:06 +02:00
Simon Hausmann
26b58bb0a5 Docs for PropertyTracker 2021-03-26 10:43:13 +01:00
Simon Hausmann
bfd2a2add9 Fix exhale warning about overriding PREDEFINED 2021-03-26 10:32:22 +01:00
Simon Hausmann
10189a844c Make the C++ Value API a little less error prone
Yesterday I ended up accidentally constructing a Value with a string literal
and that turned into a boolean value, resulting in run-time panic.
A deleted `const void *` constructor prevents this by producing a compile error instead of
picking the boolean constructor.
2021-03-26 09:55:13 +01:00
Simon Hausmann
4cbcf2611f Fix recurring C++ timers
* sixtyfps_timer_start needs to *take* the timer id out of the Rust
  timer to avoid that the subsequent drop stops the timer again
* For the Qt event loop, call `timer_event()` once before entering
  QCoreApplication::exec(), to schedule any timers that were started
  beforehand.
* Added a way to quit the event loop gently, in order to use that
  from the C++ unit test.
2021-03-25 20:07:12 +01:00
Simon Hausmann
25a1e666d9 Clarify model handling in C++ interpreter slightly
* Remove `Value::to_model()` as it is not implemented
* Document that models can be passed to .60 array/object properties
* Add a test for the extraction  / setting behavior of arrays.
2021-03-25 16:57:09 +01:00
Simon Hausmann
3bd5b0eadf Add support for recursive dependency tracking across PropertyTracker instances
By default PropertyTracker::evaluate() registers the currently
evaluating binding/tracker as a dependency. This should help with
repeaters and other scenarios where in the run-time we use property
trackers but want to track the overall "dirtyness" in the window with
regards to whether a redraw is needed or not.

The new evaluate_as_dependency_root() function allows skipping this
mechanism and is used for the two trackers in the window.
2021-03-25 12:29:19 +01:00
Simon Hausmann
272a87ccf1 Fix C++ build
Map the target_pointer_width cfg's used for the opaque ffi interpreter
data structures to #ifdefs in CMake, to avoid that cbindgen generates
them multiple times without guard.
2021-03-25 09:37:34 +01:00
Olivier Goffart
0985318e3e Properly drop the refcount of the ComponentWindow
Otherwise the ComponentWindow is leak, and so the QWidget is not destroyed
when it should be
2021-03-24 09:26:42 +01:00
Simon Hausmann
b51549ab58 Fix Struct::iterator test to be order agnostic 2021-03-23 17:49:28 +01:00
Simon Hausmann
d5662c117f A few docs for ComponentInstance
There's more to do though
2021-03-23 17:32:19 +01:00
Simon Hausmann
8e05a15704 Polish the ComponentDefinition docs a little bit 2021-03-23 17:21:36 +01:00
Olivier Goffart
1dba04721a Add a qt_viewer example that uses QWidget 2021-03-23 17:13:41 +01:00
Simon Hausmann
90d3953d42 Polish the ComponentDefinition docs a little bit 2021-03-23 17:10:14 +01:00
Simon Hausmann
e3f1e51a7a Some basic class docs for Struct::iterator and two basic tests 2021-03-23 17:02:37 +01:00
Simon Hausmann
2a839134f4 More class docs for Value 2021-03-23 15:59:25 +01:00
Simon Hausmann
4142a9198d Include the intrerperter in the doxygen scan
Amends commit 63cfb9b870
2021-03-23 15:59:17 +01:00
Simon Hausmann
63cfb9b870 Revert back to a unified C++ reference docs
Unfortunately I can't separate the interpreter docs from the regular
run-time library C++ docs with exhale/breathe. One way or another it
breaks and one disappears or shows errors. This change reverts commit
0bb497c816, commit
a769b630ca and commit
0e82faf845 and merges the two into one
reference for now.
2021-03-23 15:36:53 +01:00
Simon Hausmann
9e58b39317 Minor doc fix for Value 2021-03-23 14:07:46 +01:00
Simon Hausmann
ab99d9b19e Some class intro docs for Value
and hide the internal typedef
2021-03-23 13:45:53 +01:00
Simon Hausmann
81116607c1 Some class docs for C++ Struct
This also hides the internal constructor
2021-03-23 13:23:52 +01:00
Simon Hausmann
c06b0e10e1 Add/sync class summary docs for interpreter::Struct 2021-03-23 12:57:40 +01:00
Simon Hausmann
646ce85ea6 Fix doxygen error
It can't parse the std::enable_if bits in the range constructor of Struct,
so skip it.
2021-03-23 11:17:40 +01:00
Simon Hausmann
0bb497c816 Fix C++ Interpreter docs not showing up in detail
The hacked multi-project support doesn't support multiple output
directories, breathe will look only in the default project directory for
doxygen xml files. Therefore share them.
2021-03-23 11:15:13 +01:00
Simon Hausmann
a769b630ca Separate the C++ Interpreter API into a separate library root
Since breathe doesn't support multiple projects by default, this
uses a fork of the monkey-patch extensions to enable this.
2021-03-22 14:37:02 +01:00
Olivier Goffart
bd6cace54c Test and fix C++ invokation of callback 2021-03-22 14:30:00 +01:00
Olivier Goffart
d79131f18f Split the tests into two files for the interpreter and others 2021-03-22 11:24:11 +01:00
Simon Hausmann
0e82faf845 Exclude the interpreter C++ API from the general SixtyFPS API docs
These need to somehow go into a separate top-level item
2021-03-22 10:55:46 +01:00
Simon Hausmann
e1f9347aaa Add a diagnostics getter to ComponentCompiler 2021-03-19 18:34:39 +01:00
Olivier Goffart
b645860e27 Fix bad conflict resolution 2021-03-19 18:30:16 +01:00
Olivier Goffart
f2ffc0ebf6 ComponentDefinition::create in C++
Note thate there is a hack so `ComponentHandle<ComponentInstance>` (which is
binary compatible with `VRc<ComponentVTable, ErasedComponentBox>` works
2021-03-19 18:10:38 +01:00
Simon Hausmann
9eecdefb35 Add ComponentCompiler::build_from_path 2021-03-19 17:26:19 +01:00
Simon Hausmann
fd9d154b27 Add getter/setter for the style 2021-03-19 17:17:57 +01:00
Simon Hausmann
59d6866b13 Remove the null state in ComponentDefinition
This isn't needed as it turns out and a cleaner API this way
2021-03-19 17:08:04 +01:00
Simon Hausmann
3588d6ffbe Start exposing ComponentDefinition to C++ 2021-03-19 16:50:12 +01:00
Simon Hausmann
9a8c6bf9f7 Move the string_to_slice helper into sixtyfps_string.h for easier editing 2021-03-19 14:16:30 +01:00
Simon Hausmann
3bb4b87bc7 Use a free-standing function for the string_view to slice conversion 2021-03-19 13:13:08 +01:00
Simon Hausmann
0c21008861 Add internal convenience API to construct a C++ slice from a string view 2021-03-19 12:54:22 +01:00
Simon Hausmann
591ae8557b Add include_paths setter/getter to ComponentCompiler 2021-03-19 09:56:46 +01:00
Simon Hausmann
318ee46d08 Fix build
Brown paper bag for me
2021-03-19 09:42:38 +01:00
Simon Hausmann
7af77839ad Add the skeleton for CompilerCompiler in C++ 2021-03-19 09:26:42 +01:00
Olivier Goffart
63460c1a24 ComponentInstance show/hide/run 2021-03-18 16:37:01 +01:00
Olivier Goffart
9cc69d73a1 C++ implementation of the ComponentInstance
still untested
2021-03-18 16:30:25 +01:00
Simon Hausmann
a734f7f63b Add type guards to the Struct range constructor
These provide much better error messages in case of a mismatch
2021-03-18 15:54:54 +01:00