)]}'
{
  "log": [
    {
      "commit": "1740f4a209e233119a47007de732bbd8a81afb1b",
      "tree": "a7c57c34cdeb669afc29bc9c0ef267f0e883788b",
      "parents": [
        "8812887efeda4319985af860ba9d3ff69349e4e2"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 15:53:39 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 15:53:39 2024 +0000"
      },
      "message": "mark dirty when constraint changes\n\nmark the constraint dirty when its values change\n\nDiffs\u003d\nb2d27b6bd mark dirty when constraint changes (#7909)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "8812887efeda4319985af860ba9d3ff69349e4e2",
      "tree": "924d5a45e0a9ae13c27db404585cda01908302ce",
      "parents": [
        "f5c9054202ec1710e0b3faa93226fcab5463c6fe"
      ],
      "author": {
        "name": "umberto-sonnino",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 07:51:55 2024 +0000"
      },
      "committer": {
        "name": "umberto-sonnino",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 07:51:55 2024 +0000"
      },
      "message": "Fix Android goldens\n\nIt also removes premake5 alpha and bump a few deps\n\nDiffs\u003d\n5c14a4a30 Fix Android goldens (#7902)\n\nCo-authored-by: Umberto Sonnino \u003cumberto@rive.app\u003e\n"
    },
    {
      "commit": "f5c9054202ec1710e0b3faa93226fcab5463c6fe",
      "tree": "39b01e81f7e55f6a9ff02cc593f73c09c801930d",
      "parents": [
        "6acee5a096a01cea5dee0b1fb9cbcae4a41f3fd4"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 06:31:59 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 06:31:59 2024 +0000"
      },
      "message": "Improve Vulkan loading and organization\n\nLoad the Vulkan library at runtime and build our own dispatch table. This alleviates the need for DYLD_FALLBACK_LIBRARY_PATH on Mac/MoltenVK, will allow us to continue targeting Android 21 (which doesn\u0027t have Vulkan libraries to link against), and removes our requirement for the $VULKAN_SDK environment variable during build.\n\nSplit out the lower level functionality within\nPLSRenderContextVulkanImpl to a new \"VulkanContext\" class, which also hosts the Vulkan dispatch table.\n\nInstead of using Vulkan APIs directly to initialize our context, use the vk-bootstrap library. (We only incorporate this library for tests and path_fiddle; it\u0027s not part of the core renderer.)\n\nSplit out the headless functionality from fiddle_context_vulkan into a separate class. We don\u0027t build GLFW on Android and will need a Vulkan context.\n\nDiffs\u003d\n46a3045ae Improve Vulkan loading and organization (#7873)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "6acee5a096a01cea5dee0b1fb9cbcae4a41f3fd4",
      "tree": "048d8b8589f3359f20b7127225e17599bb08c1b4",
      "parents": [
        "a8b7f00bed64849f52c402d91c7bbbbe3538558a"
      ],
      "author": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 04:33:03 2024 +0000"
      },
      "committer": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Thu Aug 22 04:33:03 2024 +0000"
      },
      "message": "Add webp decoder.\n\nWe\u0027ve been needing this for a while for the game engines but we also need it to support decoding webp images for use in the editor with the Rive Renderer.\n\nI haven\u0027t instrumented the build properly to use SIMD extensions, but I left some notes for how to do so. This PR unblocks the use of WebP, let\u0027s do some perf improvements in a follow up that perhaps the runtime team can own?\n\nDiffs\u003d\n160d9eefb Add webp decoder. (#7883)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\nCo-authored-by: rivessamr \u003csuki@rive.app\u003e\n"
    },
    {
      "commit": "a8b7f00bed64849f52c402d91c7bbbbe3538558a",
      "tree": "91d5a5bc9bd7172078c348d59ebab472a524d0cd",
      "parents": [
        "f0647c10a19ae96304ba0c76f3571023e78dc319"
      ],
      "author": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Wed Aug 21 18:29:40 2024 +0000"
      },
      "committer": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Wed Aug 21 18:29:40 2024 +0000"
      },
      "message": "iOS images unpremult SIMD support\n\nSupport for SIMD instructions for unpremult\n\nFirst checkin, using rive::int16x4 instructions : 1 pixel at a time\nFurther checkin, using rive::int16x4 instructions : 2 pixels at a time\nLast checkin, avoid computation when opaque pixels (assume there will be enough opaque pixels to warrant this)\n\nThanks to Chris for the SIMD instructions usage in rive\n\nMore checkins: move the decode and unpremult to the rive decoder - this requires modifications to build files. The benefits are we are now running tests on this path. However, there are some issues with decoding two images for tests:\n\n\"../../test/assets/bad.jpg\" ... Apple Preview app cannot open this image, however, the current test says that it should be not null\nAnd\n\"../../test/assets/bad.png\", Apple Preview app can load this images, however, the current test says that it should be null\n\nDiffs\u003d\ne992059d6 iOS images unpremult SIMD support (#7875)\n\nCo-authored-by: rivessamr \u003csuki@rive.app\u003e\n"
    },
    {
      "commit": "f0647c10a19ae96304ba0c76f3571023e78dc319",
      "tree": "5a7a903ebe3b6bc83d9a33a0c4a8eb0312613056",
      "parents": [
        "215de972f9e7a91a8f518158e14265a6aa18e24b"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Aug 19 22:14:44 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Aug 19 22:14:44 2024 +0000"
      },
      "message": "add arithmetic operation and group converters\n\ntwo new converters:\n- arithmetic operation, that applies a basic arithmetic operation to an input\n- group converter: this is a special converter that is used to apply a sequence of converters to a data bound property.\n\nhttps://github.com/user-attachments/assets/50a0226c-343f-4252-923b-4f0c51ca6c8b\n\nDiffs\u003d\nad34dd4da add arithmetic operation and group converters (#7801)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "215de972f9e7a91a8f518158e14265a6aa18e24b",
      "tree": "48d50a29067db4dd3f03c6a92e8c469c1a665c73",
      "parents": [
        "43d7f27b10c533ffba5b010a2eb6f0c9781c4014"
      ],
      "author": {
        "name": "susan101566",
        "email": "hello@rive.app",
        "time": "Mon Aug 19 21:03:29 2024 +0000"
      },
      "committer": {
        "name": "susan101566",
        "email": "hello@rive.app",
        "time": "Mon Aug 19 21:03:29 2024 +0000"
      },
      "message": "editor: setting up the update callbacks for n-slicing\n\nI did some refactoring on image and mesh, where I created a \u0027deformer\u0027 that manages which mesh to show.\nI also abstracted out the parts in Mesh that deals with rendering specifically, called MeshDrawable.\nThere\u0027s also a simple UI gated behind a feature flag that shows the N Slicing panel, where you can create, delete, update axis data (hold alt to show the remove axis button).\nThe behavior is that when you create a mesh, the nslicer is deleted and vice versa.\n\nI mostly tested this manually. I added a print in the temp mesh\u0027s update, and made sure that when any axis gets deleted or updated, the print would trigger.\n\nI could add an auto test?! I need to look into that, but wanted to send this out to get some feedback on the approach.\n\nNext up: I\u0027ll add the algorithm for actually updating the render buffers in the temp mesh.\n\ndoc: https://www.notion.so/rive-app/9-Slice-Tech-Proposal-Image-only-50b25ea8e79c4efabb681110e288f064#15f3a49ce3534baeafc31c37fb30cc0b\n\nDiffs\u003d\nf99c93181 editor: setting up the update callbacks for n-slicing (#7869)\n\nCo-authored-by: Susan Wang \u003csusan@rive.app\u003e\n"
    },
    {
      "commit": "43d7f27b10c533ffba5b010a2eb6f0c9781c4014",
      "tree": "96dd565e3acde08b2ab02bda96944d3ffd3c1e73",
      "parents": [
        "198caeee25707999ea6084fa3e7511bc3be8e9ed"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Sat Aug 17 02:48:48 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Sat Aug 17 02:48:48 2024 +0000"
      },
      "message": "Fix for bug in Runtime LayoutComponent proxy\n\nThis bug caused layout proxies to be drawn out of order causing layout rendering issues in the runtimes.\n\nDiffs\u003d\n85343a4e1 Fix for bug in Runtime LayoutComponent proxy (#7867)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "198caeee25707999ea6084fa3e7511bc3be8e9ed",
      "tree": "81c067ffc6c4d30c39fce067c245f8e41de1a888",
      "parents": [
        "7478e6277e14104532646027e8aa38bf720559d5"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Aug 16 17:37:30 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Aug 16 17:37:30 2024 +0000"
      },
      "message": "Use artboard properties as transition conditions\n\nAdding support for transition conditions based on artboard properties.\ntransition_artboard_condition extends from transition_viewmodel_condition.\nIt might be good to rename  transition_viewmodel_condition to transition_property_condition at some point since it is extensible enough to support viewmodels, but also with other properties like here.\n\nDiffs\u003d\n93cc33b45 Use artboard properties as transition conditions (#7796)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "7478e6277e14104532646027e8aa38bf720559d5",
      "tree": "de21186ab7aa729a5f103b49477ceb36b6b9bd20",
      "parents": [
        "a57a234fda23abd979e8cc8d16440c0c17a55b3e"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Aug 15 23:26:47 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Aug 15 23:26:47 2024 +0000"
      },
      "message": "Init NestedAnimation\u0027s nestedArtboard as nullptr\n\nThis should fix an issue with nested events not bubbling up on Windows and web editor.\n\nDiffs\u003d\nc5fc07de9 Init NestedAnimation\u0027s nestedArtboard as nullptr (#7857)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "a57a234fda23abd979e8cc8d16440c0c17a55b3e",
      "tree": "09d4b551264d6300b663292be1e50437148b73f0",
      "parents": [
        "f450f95611a5485741f959d816833f2ee1f76a24"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 15 19:28:49 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 15 19:28:49 2024 +0000"
      },
      "message": "added some simple windows build scripts to make building on windows from powershell or command prompt easier\n\nadded build_rive.bat and build_rive.ps1 to build from the command prompt and PowerShell respectively.\nalso added some setup scripts to the scripts folder to auto-set the path to the correct location\n\nDiffs\u003d\nfb7756072 added some simple windows build scripts to make building on windows from powershell or command prompt easier (#7800)\n\nCo-authored-by: Jonathon Copeland \u003cjcopela4@gmail.com\u003e\n"
    },
    {
      "commit": "f450f95611a5485741f959d816833f2ee1f76a24",
      "tree": "5ad47a422738616f0585e08bea9625fb3d8bfd8a",
      "parents": [
        "a7a0a016a2b08a755aba67885819c0e64dda9a57"
      ],
      "author": {
        "name": "susan101566",
        "email": "hello@rive.app",
        "time": "Wed Aug 14 22:01:30 2024 +0000"
      },
      "committer": {
        "name": "susan101566",
        "email": "hello@rive.app",
        "time": "Wed Aug 14 22:01:30 2024 +0000"
      },
      "message": "editor: nine-slicing core data type definitions\n\nThis PR adds the core data types to support n-slicing. There are three main types: Axis, NSlicer and NSlicerTileMode.\n1. Axis: I didn\u0027t want to make this super specific, since it could be used for grids later. So rn, it just represents some position in some dimension, and can either be a value in terms of a positional unit (like 10px) or bounds percentage (like 10%).\n2. NSlicer: It\u0027s as simple as a component gets, we\u0027ll just use it to be a parent of all the n-slicer Axes, and have it be a child of Image later.\n3. NSlicerTileMode: The main data here is \u0027style\u0027. We said to use patchX and patchY separately from patchIndex. The last one is persisted in file, while the other two are actually used at runtime.\n\nThe non-json files are auto generated, with the runtime json files copy pasted from the dev/defs version. I verified that the editor still runs, and the runtime also runs without error.\n\nNext up, I\u0027ll use these definitions to change editor behavior.\n\nDocumentation: https://www.notion.so/rive-app/9-Slice-Tech-Proposal-Image-only-50b25ea8e79c4efabb681110e288f064#15f3a49ce3534baeafc31c37fb30cc0b\n\nFor a rough direction of how to implement nine-slicing, check out this research branch: https://github.com/rive-app/rive/compare/master...susan/nine-slice-research\n\nDiffs\u003d\ned56d2de6 editor: nine-slicing core data type definitions (#7840)\n\nCo-authored-by: Susan Wang \u003csusan@rive.app\u003e\n"
    },
    {
      "commit": "a7a0a016a2b08a755aba67885819c0e64dda9a57",
      "tree": "65ddf75528c247ff1e02247f0a21962a45321280",
      "parents": [
        "2615d26b0e0718fd3b57f587cad6bae9b6fea919"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed Aug 14 01:15:17 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed Aug 14 01:15:17 2024 +0000"
      },
      "message": "fix hovered state of group listeners\n\nfixes #7838\n\nDiffs\u003d\n4fb978a92 fix hovered state of group listeners (#7839)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "2615d26b0e0718fd3b57f587cad6bae9b6fea919",
      "tree": "888036f9116caccf8d99821a8aa7842bc2d6bc28",
      "parents": [
        "4a3beb7cb0c28c2f3ac7207b384f50751047a41b"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Aug 13 22:54:12 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Aug 13 22:54:12 2024 +0000"
      },
      "message": "Update version to macosx 11 for runtime.\n\nSorry for the churn in the premake file, someone didn\u0027t use the right formatter in a previous commit.\n\nWe had to bump to 11 for this:\n```\n../../../../../../pls/renderer/metal/background_shader_compiler.mm:215:42: error: \u0027MTLLanguageVersion2_3\u0027 is only available on macOS 11.0 or newer [-Werror,-Wunguarded-availability-new]\n        compileOptions.languageVersion \u003d MTLLanguageVersion2_3; // On mac, we need version 2.3+\n                                         ^~~~~~~~~~~~~~~~~~~~~\n/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX14.2.sdk/System/Library/Frameworks/Metal.framework/Headers/MTLLibrary.h:190:5: note: \u0027MTLLanguageVersion2_3\u0027 has been marked as being introduced in macOS 11.0 here, but the deployment target is macOS 10.6.0\n    MTLLanguageVersion2_3 API_AVAILABLE(macos(11.0), ios(14.0)) \u003d (2 \u003c\u003c 16) + 3,\n    ^\n../../../../../../pls/renderer/metal/background_shader_compiler.mm:215:42: note: enclose \u0027MTLLanguageVersion2_3\u0027 in an @available check to silence this warning\n        compileOptions.languageVersion \u003d MTLLanguageVersion2_3; // On mac, we need version 2.3+\n                                         ^~~~~~~~~~~~~~~~~~~~~\n../../../../../../pls/renderer/metal/background_shader_compiler.mm:220:28: error: \u0027setPreserveInvariance:\u0027 is only available on macOS 11.0 or newer [-Werror,-Wunguarded-availability-new]\n            compileOptions.preserveInvariance \u003d YES;\n```\n\nDiffs\u003d\ne75b8fa63 Update version to macosx 11 for runtime. (#7829)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "4a3beb7cb0c28c2f3ac7207b384f50751047a41b",
      "tree": "557f461f39da61c1c213ed485419eaef1c4ad064",
      "parents": [
        "9e26b7620e0f0c8494818f74df4fe31ba264be3b"
      ],
      "author": {
        "name": "damzobridge",
        "email": "hello@rive.app",
        "time": "Mon Aug 12 20:43:00 2024 +0000"
      },
      "committer": {
        "name": "damzobridge",
        "email": "hello@rive.app",
        "time": "Mon Aug 12 20:43:00 2024 +0000"
      },
      "message": "feat: add nested text run getters and setters in Unity\n\nThis PR introduces new methods to get and set text run values in nested artboards in Unity\n\n### Unity\n- Added to `Artboard` class in Unity:\n  - `GetTextRunValue(string runName)`\n  - `SetTextRunValueAtPath(string runName, string path, string value)`\n  - `GetTextRunValueAtPath(string runName, string path)`\n\n### rive-cpp\n- Exposed in `Artboard` class:\n  - `TextValueRun* getTextRun(const std::string\u0026 name) const;`\n\nDiffs\u003d\n55de8286c feat: add nested text run getters and setters in Unity (#7808)\n\nCo-authored-by: Adam \u003c67035612+damzobridge@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "9e26b7620e0f0c8494818f74df4fe31ba264be3b",
      "tree": "107fae734ec38c4f23b85076361bdcd3d2e5f359",
      "parents": [
        "b58380143f432a9c220ba325932dc76f9291b6fc"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Aug 09 22:23:15 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Aug 09 22:23:15 2024 +0000"
      },
      "message": "add two data converters\n\nthis PR adds the UI to create converters in the editor, and includes the first two:\n- a rounder that accepts a property for rounding\n- a toString converter that can convert for now numbers and enum. It could be extended to colors and booleans in the future.\n\nhttps://github.com/user-attachments/assets/2946d8ea-0fdf-4039-83d4-79b5fdfc6169\n\nhttps://github.com/user-attachments/assets/ec60b523-ecb2-4453-9280-c99822706b2e\n\nDiffs\u003d\n2c0927fc5 add two data converters (#7742)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "b58380143f432a9c220ba325932dc76f9291b6fc",
      "tree": "187c1a1c52d8e3c3dbd0253b6485ea1c38583110",
      "parents": [
        "5b70b81cd25b20a6b929a717ad178e6882960bf8"
      ],
      "author": {
        "name": "blakdragan7",
        "email": "hello@rive.app",
        "time": "Fri Aug 09 04:39:22 2024 +0000"
      },
      "committer": {
        "name": "blakdragan7",
        "email": "hello@rive.app",
        "time": "Fri Aug 09 04:39:22 2024 +0000"
      },
      "message": "added a blt command for render targets that do not support VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT\n\nCurrently, render targets that do not have the VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT flag will not work and just cause a crash. This adds an offscreen texture that can be used as an input attachment in its place and then a copy command to update the render target at the end.\n\nDiffs\u003d\n8c7ac0329 added a blt command for render targets that do not support VK_IMAGE_USAGE_INPUT_ATTACHMENT_BIT (#7757)\n\nCo-authored-by: Jonathon Copeland \u003cjcopela4@gmail.com\u003e\n"
    },
    {
      "commit": "5b70b81cd25b20a6b929a717ad178e6882960bf8",
      "tree": "1e919e0ee0033e5bb2f6fa424ce06893dfe40b91",
      "parents": [
        "725788de33f42f4d471fc4656ab764e6648f6dae"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 18:38:26 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 18:38:26 2024 +0000"
      },
      "message": "Better premake support for Visual Studio\n\n* Add a \"windows_runtime\u003ddynamic_release\" option for Unreal\n* Enable parallel building\n\nDiffs\u003d\n66d9f1725 Better premake support for Visual Studio (#7779)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "725788de33f42f4d471fc4656ab764e6648f6dae",
      "tree": "c97d27313a444222bc55f2bf6db178b74a0cd3c1",
      "parents": [
        "a0283f94891a638d9a979f1ecc7431bdf625f4d9"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 16:24:27 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 16:24:27 2024 +0000"
      },
      "message": "Add Xcode support to build_rive.sh\n\nAdd an \"xcode\" option that generates and builds an xcode workspace.\n\nAdd -Wshorten-64-to-32 to non-Xcode builds and fix more warnings.\n\nDiffs\u003d\nf0da6a7a0 Add Xcode support to build_rive.sh (#7780)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "a0283f94891a638d9a979f1ecc7431bdf625f4d9",
      "tree": "f8d7ea146e8f04dd8c6825f729127e216d0ebeb0",
      "parents": [
        "9039350bfccee7aa15720c7e760db7026f3ab976"
      ],
      "author": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 00:39:26 2024 +0000"
      },
      "committer": {
        "name": "rivessamr",
        "email": "hello@rive.app",
        "time": "Thu Aug 08 00:39:26 2024 +0000"
      },
      "message": "Added support for xcode builds\n\nDiffs\u003d\nc12b0bb24 Added support for xcode builds (#7774)\n\nCo-authored-by: rivessamr \u003csuki@rive.app\u003e\n"
    },
    {
      "commit": "9039350bfccee7aa15720c7e760db7026f3ab976",
      "tree": "22852ae1c657c5a22b297be68f3f1e206620dcd7",
      "parents": [
        "eb1e57650883019ef7ea83bc316b7db204362aed"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed Aug 07 18:39:13 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed Aug 07 18:39:13 2024 +0000"
      },
      "message": "Add width/height overrides for NestedArtboardLayout\n\nAdds the ability to override width and height for NestedArtboardLayout. This allows each NestedArtboardLayout instance to respond to be sized differently. This is not supported in the NestedArtboard Node and Leaf types, since those are resized using differently (Node uses scale and Leaf uses a combination of scale/fit/alignment).\n\nImplemented via FFI as discussed with @luigi-rosso because NestedArtboardLayout modifying the \"taken\" layoutNode directly could result in race conditions and other conflicts.\n\nhttps://github.com/user-attachments/assets/c323a94f-f392-4c10-ac01-af112f70a256\n\nDiffs\u003d\n0dc0b435f Add width/height overrides for NestedArtboardLayout (#7736)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "eb1e57650883019ef7ea83bc316b7db204362aed",
      "tree": "c991da1f0f9e245bf842585cd4d5affb7cf18920",
      "parents": [
        "076f1a22ae08ec08041ce962089a4caaabfdd539"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Aug 06 23:06:28 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Aug 06 23:06:28 2024 +0000"
      },
      "message": "refactor conditions\n\nrefactor code:\n- adds template for comparing view models\n- unifies evaluate method for view model and input conditions\n\nDiffs\u003d\n1131f30e6 refactor conditions (#7747)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "076f1a22ae08ec08041ce962089a4caaabfdd539",
      "tree": "4cf61a4c3fc40a52b8df6a7a90ab94940148c373",
      "parents": [
        "33d096eeb6f4b759903c748f8d6bf4950e49bd40"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Aug 06 21:04:43 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Aug 06 21:04:43 2024 +0000"
      },
      "message": "Fix layout shape hug in CPP\n\nDiffs\u003d\n35a52873c Fix layout shape hug in CPP (#7770)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "33d096eeb6f4b759903c748f8d6bf4950e49bd40",
      "tree": "022062f47187eb962abf6b73f3dbb50b9ceb8efc",
      "parents": [
        "62025f9f3024e2c7c7743c797a0fb0c89122d56c"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Mon Aug 05 22:46:28 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Mon Aug 05 22:46:28 2024 +0000"
      },
      "message": "Add a premake message when Xcode command line tools isn\u0027t installed\n\nDiffs\u003d\n949c70600 Add a premake message when Xcode command line tools isn\u0027t installed (#7756)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "62025f9f3024e2c7c7743c797a0fb0c89122d56c",
      "tree": "efe854d0a017dce6b0094f66c439db72397e0668",
      "parents": [
        "4afdae650937701a4c0564606b9b9e542b4fbc35"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sat Aug 03 02:24:40 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sat Aug 03 02:24:40 2024 +0000"
      },
      "message": "add data converter and data types for conversion\n\nFirst PR for converters support.\nIt adds the abstract data_converter class\nAnd adds new data value objects that can be passed between converters to easily transform one type of data to another\n\nhttps://github.com/user-attachments/assets/e8a0fdee-8845-4d0d-a894-c948c2b0a209\n\nDiffs\u003d\n4bf7c7545 add data converter and data types for conversion (#7734)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "4afdae650937701a4c0564606b9b9e542b4fbc35",
      "tree": "b3b0e292abf55bb7743bcde45cec799240b6d646",
      "parents": [
        "7a409bd0d028a559f77e337d78ba633d877bf429"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Aug 01 01:10:57 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Aug 01 01:10:57 2024 +0000"
      },
      "message": "add listener actions support for databind\n\nadds support for manipulating view model values from state machines through listener actions\n\nhttps://github.com/user-attachments/assets/7ddd4cd2-a04d-4d33-98de-b1f29aa24755\n\nDiffs\u003d\nd9f5701ec add listener actions support for databind (#7710)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "7a409bd0d028a559f77e337d78ba633d877bf429",
      "tree": "48b9e8fef19c55fe1b9db2ac3ef79ef146924c82",
      "parents": [
        "8a1d9a481b215cfd9d1bc39fac742b9d268f50e7"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed Jul 31 01:19:30 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed Jul 31 01:19:30 2024 +0000"
      },
      "message": "Fix alignment when flex wrap enabled\n\nFixes an issue where layout alignment wasn\u0027t working when flex wrap was enabled.\n\n**Before:**\n\nhttps://github.com/user-attachments/assets/0486c436-0049-49d8-8483-b6fdbf1cf2d5\n\n**After:**\n\nhttps://github.com/user-attachments/assets/0014e624-6b83-4417-a93d-6e1adea41bd3\n\nDiffs\u003d\ndcb165130 Fix alignment when flex wrap enabled (#7722)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "8a1d9a481b215cfd9d1bc39fac742b9d268f50e7",
      "tree": "de0c479f686da9ecc0b3c475ba0b469552cc926f",
      "parents": [
        "5dd8cd9483f61cdde26d38d04582040f9c08f905"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 22:50:18 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 22:50:18 2024 +0000"
      },
      "message": "Buildsystem fixes for build_rive.sh and PLS shaders\n\nbuild_rive.sh wasn\u0027t catching all the build errors with just \u0027set -e\u0027. Add \u0027set -o pipefail\u0027 to catch the errors being piped into \u0027grep -v\u0027.\n\nThe complicated logic in premake5_pls_renderer.lua that was being executed as a bash \"if\" had an issue. Rewrite this logic in Lua.\n\nDiffs\u003d\nfbfa3b545 Buildsystem fixes for build_rive.sh and PLS shaders (#7716)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "5dd8cd9483f61cdde26d38d04582040f9c08f905",
      "tree": "d8a860776352d0e13d87f62b07de19c1adf419de",
      "parents": [
        "2e513d2dd0a785299f1aae1cf65fc85cae7dc6b1"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 18:39:24 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 18:39:24 2024 +0000"
      },
      "message": "add click event support\n\nthis PR adds click support to listeners.\nClick is a new event type (like pointer down, pointer move).\nIt encompasses two stages (pointer down + pointer up) in the same object or group of objects that belong to the listener.\nIt processes all the phases of a click gesture\nthis PR also:\n- guarantees that the click gesture is applied only once per frame (no double actions from overlapping shapes)\n- supports starting the click gesture in one shape and ending it in another shape of the same listener (by promoting the hover state to the group and not on individual shapes)\n\nDiffs\u003d\n405ca998b add click event support (#7668)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "2e513d2dd0a785299f1aae1cf65fc85cae7dc6b1",
      "tree": "a48b97a22888d0d873e2104471df7f5d63f8a1a8",
      "parents": [
        "7b2347c9df351c17c0f8e4e29f9bb26f0d7112c5"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 17:11:54 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Mon Jul 29 17:11:54 2024 +0000"
      },
      "message": "Improve layout animation\n\nThis adds an improvement to layout animation. When updating layout bounds (for example when a parent layout resizes), we were initially setting elapsedSeconds to 0. This restarts the animation, however in cases when the layout bounds is constantly updating (see attached videos), the animation would never progress until the layout bounds stopped updating. An alternative was to not reset elapsedSeconds which was also tested, but in that case the result was odd visual issues like snapping to the new layout bounds (in cases where elapsedSeconds was close to the animation duration).\n\nAn interim solution (until we find a better one) is to only reset elapsedSeconds to 0 if it is greater than some arbitrary time, thus the animation will continue to progress relatively smoothly.\n\nHere are the scenarios. This PR implements the 3rd option.\n\n**Always set elapsedSeconds to 0 when updating layout bounds**\n\nhttps://github.com/user-attachments/assets/d430edba-37f4-408d-843f-9f67abfb101d\n\n**Never set elapsedSeconds to 0 when updating layout bounds**\n\nhttps://github.com/user-attachments/assets/a8abae5b-647a-437e-9c0f-09d681d6716e\n\n**Set elapsedSeconds to 0 after some time has elapsed**\n\nhttps://github.com/user-attachments/assets/3d63cb14-2977-4ea5-b38d-3fcca1f1a666\n\nDiffs\u003d\n4732c37b5 Improve layout animation (#7712)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "7b2347c9df351c17c0f8e4e29f9bb26f0d7112c5",
      "tree": "75b8a70b979a1b930a3aa422db2d2bfbecf93bbd",
      "parents": [
        "15101782a0e888cfc74353db96dcb14f4041d1ab"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 23:10:22 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 23:10:22 2024 +0000"
      },
      "message": "Simple procedural text rendering API\n\nThis adds `rive::RawText` can be used to append text runs with different styles and set layout rules for the text. It\u0027s pretty full featured.\n\nSimple example (trimmed for brevity):\n```\nauto roboto \u003d loadFont(\"RobotoFlex.ttf\");\n\n// setup text object\nrive::RawText text(RiveFactory());\ntext.append(\"Hello world! \", roboto);\n\n// later during rendering\ntext.render(renderer);\n```\n\n\u003cimg width\u003d\"538\" alt\u003d\"CleanShot 2024-07-25 at 21 59 43@2x\" src\u003d\"https://github.com/user-attachments/assets/7c421cca-ec91-4978-b358-7ba5d457746a\"\u003e\n\nA few more complex examples:\n```\nauto roboto \u003d loadFont(\"RobotoFlex.ttf\");\nauto montserrat \u003d loadFont(\"Montserrat.ttf\");\n\nrive::RawText text(RiveFactory());\ntext.append(\"Hello world! \", roboto, 72.0f);\ntext.append(\"Moon\u0027s cool too. \", montserrat, 64.0f);\n```\n\u003cimg width\u003d\"491\" alt\u003d\"CleanShot 2024-07-25 at 22 01 28@2x\" src\u003d\"https://github.com/user-attachments/assets/06272869-11dc-43f3-a7a3-6bde7a226238\"\u003e\n\nBecause `RawText` represents one contiguous styled block of text, you can apply rules like overflow, sizing, alignment, different paint, etc:\n\n```\nrive::RawText text(RiveFactory());\ntext.maxWidth(450.0f);\ntext.maxHeight(330.0f);\ntext.sizing(rive::TextSizing::fixed);\ntext.overflow(rive::TextOverflow::ellipsis);\ntext.append(\"Hello world! \", roboto, 72.0f);\ntext.append(\"Moon\u0027s cool too. \", montserrat, 64.0f);\n\nauto paint \u003d RiveFactory()-\u003emakeRenderPaint();\npaint-\u003ecolor(0x88ff0000);\ntext.append(\"Mars is red.\", roboto, 72.0f, paint);\n```\n\u003cimg width\u003d\"401\" alt\u003d\"CleanShot 2024-07-25 at 22 03 01@2x\" src\u003d\"https://github.com/user-attachments/assets/bf03d1e6-c966-4834-92ab-20d9918186ad\"\u003e\n\nYou can also supply an override paint during rendering to force paint the whole thing with one color:\n```\nauto paint \u003d RiveFactory()-\u003emakeRenderPaint();\npaint-\u003ecolor(0xff00ff00);\ntext.render(renderer, paint);\n```\n\u003cimg width\u003d\"321\" alt\u003d\"CleanShot 2024-07-25 at 22 04 44@2x\" src\u003d\"https://github.com/user-attachments/assets/eaaf2983-4cd5-45e0-96fd-5edc72da211a\"\u003e\n\nDiffs\u003d\na56419984 Simple procedural text rendering API (#7701)\n\nCo-authored-by: Chris Dalton \u003cchris@rive.app\u003e\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "15101782a0e888cfc74353db96dcb14f4041d1ab",
      "tree": "18512f680180104ab2c68826bc1e96b5548fa28c",
      "parents": [
        "9915759585793b51983a30ccd4f588407650f577"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 22:56:47 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 22:56:47 2024 +0000"
      },
      "message": "Add a test for nested events triggering listener in parent\n\nDiffs\u003d\nd6d79132b Add a test for nested events triggering listener in parent (#7709)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "9915759585793b51983a30ccd4f588407650f577",
      "tree": "a3a9ea85fbb561d41e145172645eb084cf94ccdb",
      "parents": [
        "adb2822177bcc606a01c0a4f54c3a2acce2f068d"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 21:43:56 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 21:43:56 2024 +0000"
      },
      "message": "Fix for nested events in CPP\n\nFixes nested events not propagating up to the parent artboard due to a recent naming change from `artboard()` to `artboardInstance()`.\n\nDiffs\u003d\n657f65e1c Fix for nested events in CPP (#7708)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "adb2822177bcc606a01c0a4f54c3a2acce2f068d",
      "tree": "0188cf22edce000f2c4197e22cef7e5255f69ec1",
      "parents": [
        "ef86d92f52bd20995ccd8cdee860cf06555b8869"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 20:23:29 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 20:23:29 2024 +0000"
      },
      "message": "Add a build_rive.sh script to unify the premake5 build process\n\nAttempts to unify the build process across all projects with a\n\"build_rive.sh\" script.\n\nRather than scattering custom build scripts all around the repo, the\nidea here is that our \"premake5.lua\" scripts will all conform to the\nsame protocol, which we can then build using one single, global script.\n\nTo use this build_rive.sh:\n\n  1) add packages/runtime/build to $PATH\n  2) cd to directory with a premake5.lua\n  3) run build_rive.sh with desired flags (in any order)\n\nBuild for the host machine:\n```\n  build_rive.sh                      # debug build\n  build_rive.sh release              # release build\n  build_rive.sh release clean        # clean, followed by a release build\n  build_rive.sh ninja                # use ninja (experimental) for a debug build\n  build_rive.sh ninja release        # use ninja (experimental) for a release build\n  build_rive.sh ninja --with_vulkan  # extra parameters get forwarded to premake\n```\nGenerate `compile_commands.json` for code completion engines:\n```\n  build_rive.sh compdb                        # code completion for a host build\n  build_rive.sh compdb android --with_vulkan  # code completion for android with vulkan enabled\n```\nSpecify build targets after \"--\":\n```\n  build_rive.sh -- gms goldens\n  build_rive.sh ninja release -- imagediff\n```\nBuild for android:\n```\n  build_rive.sh android            # debug build, defaults to arm64\n  build_rive.sh ninja android arm  # release arm32 build using ninja\n```\nBuild for ios:\n```\n  build_rive.sh ios          # debug build, arm64 only\n  build_rive.sh ios release  # release build, arm64 only\n  build_rive.sh iossim       # debug build, defaults to \"universal\" (x64 and arm64) architecture\n```\nBuild for wasm:\n```\n  build_rive.sh ninja release wasm                # release build\n  build_rive.sh ninja release wasm --with-webgpu  # release build, also enable webgpu\n```\nIncremental builds:\n```\n  build_rive.sh                            # initial build\n  build_rive.sh                            # any repeat command does an incremental build\n  build_rive.sh --with_vulkan \u003c- FAILS!!   # a repeat build with different arguments fails\n  build_rive.sh clean --with_vulkan        # a clean build with different arguments is OK\n  build_rive.sh rebuild out/debug  # use \"rebuild\" on a specific OUT directory to relaunch the\n                                   # build with whatever args it got configured with initially\n  build_rive.sh rebuild out/debug gms goldens  # args after OUT get forwarded to the buildsystem\n```\n\nDiffs\u003d\n0a11e599f Add a build_rive.sh script to unify the premake5 build process (#7691)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "ef86d92f52bd20995ccd8cdee860cf06555b8869",
      "tree": "c4669f9ce23fc71a67c50016745ea45a74b356d2",
      "parents": [
        "46df7e5c3ad544c0b7f0bc01f297c2514dccf51a"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 15:58:56 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 26 15:58:56 2024 +0000"
      },
      "message": "viewmodel transitions runtime\n\nadds support for viewmodel based transition conditions.\nadded some comments on the most relevant parts.\nThe rest is mostly boilerplate code from core objects.\n\nDiffs\u003d\nd25b9097d viewmodel transitions runtime (#7680)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "46df7e5c3ad544c0b7f0bc01f297c2514dccf51a",
      "tree": "02ac2b9319c8a70091f964a84694fe92b936f977",
      "parents": [
        "d42be0a1027f597331bb48ef3dd0ef70b6226f65"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jul 25 18:51:12 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jul 25 18:51:12 2024 +0000"
      },
      "message": "Implement layout scale type in CPP runtime\n\nThis PR includes 2 updates:\n1. Break out the layout scaleType bitfield property into seperate width and height scale properties. This will allow us to animate these properties easily in the future\n2. Implement the logic based on scale type in CPP runtime.\n\n@alxgibsn This fixes the issues you observed in runtimes where the` fill` scale type wasn\u0027t working properly and layout children sizing wasn\u0027t consistent between editor and runtimes.\n\nDiffs\u003d\n1c067cba8 Implement layout scale type in CPP runtime (#7665)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "d42be0a1027f597331bb48ef3dd0ef70b6226f65",
      "tree": "7c039e10415cdafd3424162535203a4645443909",
      "parents": [
        "9f0db02f31da8d0675aa66a174503cc593b7ba7d"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu Jul 25 01:04:43 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu Jul 25 01:04:43 2024 +0000"
      },
      "message": "Make an HBFont from a CTFontRef.\n\nBy including ```rive/text/font_hb.hpp``` in iOS you\u0027ll get access to ```HBFont::FromSystem``` along with the ```HBFont::Decode``` (which we\u0027ve been using so far to generate Font objects to put into the fallback list).\n\nYou can get a UIFont with [this API](https://developer.apple.com/documentation/uikit/uifont/1619027-systemfontofsize?language\u003dobjc).\n\nYou should be able to cast that to a CTFontRef:\n```\nCTFontRef ctFont \u003d (__bridge CTFontRef)uiFont;\nauto fallbackFont \u003d HBFont::FromSystem((void*)ctFont);\n```\n\nYou can then use that in a fallback font procedure (like the example from the editor below) to load on demand/cache/provide from a list etc:\nhttps://github.com/rive-app/rive/blob/b5b930f88f18280afa44683c5756066abaa9b1dc/packages/rive_common/macos/rive_text/rive_text.cpp#L153-L175\n\nDiffs\u003d\nda1bb7745 Make an HBFont from a CTFontRef. (#7661)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "9f0db02f31da8d0675aa66a174503cc593b7ba7d",
      "tree": "737331068754fad2fd71ae06ddb338014622ff11",
      "parents": [
        "560a993838180d05490ebe93c9e5b8c3a134c369"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jul 24 20:09:57 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jul 24 20:09:57 2024 +0000"
      },
      "message": "Nested artboard types: node, leaf, layout\n\n~~Adding as a draft to start testing.~~\n\n- [x] Add node, leaf, and layout types.\n- [x] Leaf supports fit and alignment.\n- [x] Leaf alignment is floating point instead of enum allowing for animation later.\n- [x] Layout allows external hosting artboards to take the nested layout node and host it in another hierarchy.\n- [x] Measure and control size for NestedArtboard from native.\n- [x] FFI changes for external layout node\n- [x] WASM changes for external layout node.\n- [x] Move layouts to RiveNative.\n\n\u003cimg width\u003d\"663\" alt\u003d\"CleanShot 2024-07-21 at 14 48 41@2x\" src\u003d\"https://github.com/user-attachments/assets/b2c70d55-5f09-421a-bde3-f49939c6effc\"\u003e\n\n~~For a follow up PR:\nI think it\u0027s time to move some of rive_common into rive_native. I think the layout stuff would be a good start. @philter take a look at how the rive_binding.cpp is shared in rive_native for both FFI and WASM. I think it would simplify our layout bindings to use this model too.~~\nNevermind, we need it for this PR or ```LayoutNode.fromExternal``` doesn\u0027t work.\n\nDiffs\u003d\n1a5f273bb Nested artboard types: node, leaf, layout (#7639)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "560a993838180d05490ebe93c9e5b8c3a134c369",
      "tree": "6055bd28c6f55774d9062e81883ece329502b083",
      "parents": [
        "8e0d982513cf07776766a13c692eabb85f9c3b8e"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 20:53:06 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 20:53:06 2024 +0000"
      },
      "message": "Xxxx improve hittest performance\n\nIn certain scenarios, there is no need to perform a hit test, so we precompute the conditions and early out from calculating the hit test.\nIf a shape has only listeners of type PointerDown and PointerUp, and is not an opaque target, it doesn\u0027t need to check for move events or exit events, which can save a lot of computations since it will skip most frames.\n\nDiffs\u003d\n50bc398c4 Xxxx improve hittest performance (#7584)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "8e0d982513cf07776766a13c692eabb85f9c3b8e",
      "tree": "d7ac3abae221e61320f9dec0a16cf21ae6beea6d",
      "parents": [
        "93014af4d56bbda0524d1cb35d4d4f68abfd1f33"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 19:09:14 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 19:09:14 2024 +0000"
      },
      "message": "Makeshadersinpremake\n\nDiffs\u003d\na01b0467e Makeshadersinpremake (#7660)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "93014af4d56bbda0524d1cb35d4d4f68abfd1f33",
      "tree": "c210fe6e6b09c2f60f8440d013f1d5d91b5d17e5",
      "parents": [
        "2b9cfe13fc7a8a618ab658841162b636f835dc8c"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 15:56:13 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Jul 23 15:56:13 2024 +0000"
      },
      "message": "Layout drawable\n\n- [x] Changes LayoutComponent to extend Drawable (implements ShapePaintContainer)\n- [x] Fixes some API naming conflicts\n- [x] Adds DrawableProxy to allow inserting custom draw commands into draw order (allows LayoutComponent fills to be drawn below children and strokes to be drawn above\n- [x] Works with Fill/Stroke inspectors\n- [x] Adds corner radius core props\n- [x] Clipping\n- [x] CPP Updates\n- [x] Clipping in CPP\n- [x] Deal with conflicting x/y properties in Node \u0026 Artboard (CPP)\n\nhttps://github.com/rive-app/rive/assets/186340/5aec1cd5-6b00-4627-bfce-9cdeec8e3e96\n\nShowing clipping and blend modes / opacity\n\nhttps://github.com/user-attachments/assets/843b6c74-cec0-4333-8ef1-6fee9b910a59\n\nDiffs\u003d\n114da4e39 Layout drawable (#7544)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "2b9cfe13fc7a8a618ab658841162b636f835dc8c",
      "tree": "98c89491e7bd64d1d6260a2ea882ab2f8c94b718",
      "parents": [
        "5fb0ffa40984ebcc6f2ce836c63a87d090e01647"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 22 22:50:42 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 22 22:50:42 2024 +0000"
      },
      "message": "add bindable properties for state machines\n\nThis PR sets the fundamental pieces for PRs that will be coming afterward to support data binding state machines.\nThe most important parts are:\n- bindable properties that will be used as binding points for conditions, listeners, and blend animations\n- data bind objects don\u0027t extend from Component anymore to decouple them from artboards\n- because of that, now data bind objects are written in the context of their bound object so there is a unified way for setting data bind targets\n\nThe rest is the usual boilerplate code from core objects and some inheritance changes\n\nDiffs\u003d\nb5f342002 add bindable properties for state machines (#7640)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "5fb0ffa40984ebcc6f2ce836c63a87d090e01647",
      "tree": "5b1895416a998840673050c13790ffdf3fa23005",
      "parents": [
        "042a3f78a6fe7e60330538192536363aea8f6bc1"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 22 22:37:06 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Mon Jul 22 22:37:06 2024 +0000"
      },
      "message": "skip custom events when creating hitshapes\n\nthis is a performance improvement that also fixes #7651 7651\n\nDiffs\u003d\nf55ebd34f skip custom events when creating hitshapes (#7577)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "042a3f78a6fe7e60330538192536363aea8f6bc1",
      "tree": "b1e8d74c0ada479eba2fdefe70f5def0f2d35951",
      "parents": [
        "332db4c2d9f26325be7875d74bae7bfb6c97e506"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 19 13:44:45 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 19 13:44:45 2024 +0000"
      },
      "message": "fix spilled time for animations with speed applied to them\n\nwhen calculating the spilled time of an animation, we were not accounting for their speed, so it would calculate the remaining time incorrectly.\nIt could end up returning a value larger than the elapsed time causing an exponential time loop.\n\nDiffs\u003d\n58a9574ce fix spilled time for animations with speed applied to them (#7630)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "332db4c2d9f26325be7875d74bae7bfb6c97e506",
      "tree": "4719f9dcf89b5ff9eee2c93f50fbb7f9befbb8cd",
      "parents": [
        "88375e79c43001eadfefc5a7f18729865ad78d94"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed Jul 17 20:47:40 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed Jul 17 20:47:40 2024 +0000"
      },
      "message": "update data bind mode to flags\n\nchange how we store data bind mode.\nThis will be helpful once we implement converters to identify whether a converter\u0027s main direction is \"toSource\" or \"toTarget\".\nIt also cleans up how the modal works and saves changes in real time instead of doing it on \"Save\"\n\n\u003cimg width\u003d\"606\" alt\u003d\"data_bind_mode\" src\u003d\"https://github.com/user-attachments/assets/3662df84-e05a-4ea0-aaea-37e0b1294da0\"\u003e\n\nDiffs\u003d\n49cabe3cb update data bind mode to flags (#7612)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "88375e79c43001eadfefc5a7f18729865ad78d94",
      "tree": "a13c8a471537b162226bb8c140a3ee0c73da7432",
      "parents": [
        "595ac88483b8778abdb32ad7d620306f74e54e8f"
      ],
      "author": {
        "name": "dskuza",
        "email": "hello@rive.app",
        "time": "Wed Jul 17 19:27:42 2024 +0000"
      },
      "committer": {
        "name": "dskuza",
        "email": "hello@rive.app",
        "time": "Wed Jul 17 19:27:42 2024 +0000"
      },
      "message": "Only set Core Audio session category for iOS targets\n\nFixes a crash in the latest UAT desktop editor(s) on macOS by targeting setting iOS session category to mixing only for iOS / iPadOS / Catalyst targets. The desktop editor is _not_ any of these targets, so the code changes are not compiled.\n\nSee [here](https://github.com/rive-app/rive/pull/7555/files#r1680306818) for more discussion.\n\nDiffs\u003d\n6c5c79b75 Only set Core Audio session category for iOS targets (#7624)\n\nCo-authored-by: David Skuza \u003cdavid@rive.app\u003e\n"
    },
    {
      "commit": "595ac88483b8778abdb32ad7d620306f74e54e8f",
      "tree": "9b545420a9782ea3ce373c9d2dfdaad9cf2db344",
      "parents": [
        "590a4fd38408e025933a66a65dd8527de845cdb3"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 20:53:30 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 20:53:30 2024 +0000"
      },
      "message": "Run tests, bench, gms, \u0026 goldens on a physical Pixel 8 on CI\n\nStill no diffing yet -- let\u0027s just generate the goldens on iOS and see how it does.\n\nDiffs\u003d\n8e1be1223 Run tests, bench, gms, \u0026 goldens on a physical Pixel 8 on CI (#7618)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "590a4fd38408e025933a66a65dd8527de845cdb3",
      "tree": "c809afaef612b17b294fa75d937e240a5e2139ba",
      "parents": [
        "fa95d87a938b4d1320a3044d3ba1814372af5616"
      ],
      "author": {
        "name": "dskuza",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 16:21:16 2024 +0000"
      },
      "committer": {
        "name": "dskuza",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 16:21:16 2024 +0000"
      },
      "message": "Set audio to mix on for iOS (simulator) and Catalyst\n\nSets audio on iOS (simulator) and Catalyst to mix rather than duck (default). This builds on #7366 by attempting to clean the code up a little, as well as make the changes only have effect when building for Apple platforms.\n\n- [x] Update AudioEngine to contain a pointer to the engine context\n  - This is not exposed via public getter since it\u0027s not used outside of the AudioEngine, but was required for memory management\n- [x] Configure the audio context to mix for Core Audio (only when building for Apple platforms)\n\nTested on:\n- [x] iOS\n- [x] iPadOS\n- [x] macOS Catalyst\n- [x] macOS\n\nDiffs\u003d\n238bf2fe1 Set audio to mix on for iOS (simulator) and Catalyst (#7555)\n\nCo-authored-by: David Skuza \u003cdavid@rive.app\u003e\n"
    },
    {
      "commit": "fa95d87a938b4d1320a3044d3ba1814372af5616",
      "tree": "a32cd0e9d9feb82a892fce341418654645568e32",
      "parents": [
        "d80d404464abd7ebdb12587985a4620e09a6aa40"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 14:56:30 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 14:56:30 2024 +0000"
      },
      "message": "Vulkan!\n\nInitial Vulkan implementation for PLS.\n\nShaders use @PLS_IMPL_NONE, which is an incomplete implementation of pixel local storage, but it\u0027s enough to get started.\n\nDiffs\u003d\nca56d7565 Vulkan! (#7553)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\nCo-authored-by: Dragoș Tiselice \u003cdragostiselice@gmail.com\u003e\n"
    },
    {
      "commit": "d80d404464abd7ebdb12587985a4620e09a6aa40",
      "tree": "aae7044255fdeb017a616edf5ce0c9557fe71f5f",
      "parents": [
        "bd30190be73414b98c59253a5b0f932dae7f618a"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 05:10:35 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue Jul 16 05:10:35 2024 +0000"
      },
      "message": "Use \"python3\" in make_viewer_skia.sh (instead of \"python\")\n\n\"python\" doesn\u0027t exist on all the hosted runners, so it was a game of runner-roulette whether the runtime_test_macos job will pass.\n\nDiffs\u003d\n63b6a13d3 Use \"python3\" in make_viewer_skia.sh (instead of \"python\") (#7597)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "bd30190be73414b98c59253a5b0f932dae7f618a",
      "tree": "9864d5df2f238189ca2444d2180db9ef8c8f00cf",
      "parents": [
        "1e21cf7e1ecc2d8183a259b0a7fa12574a585ca3"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Mon Jul 15 22:50:47 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Mon Jul 15 22:50:47 2024 +0000"
      },
      "message": "Fix build on web.\n\nDiffs\u003d\n8a67331a4 Fix build on web. (#7613)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "1e21cf7e1ecc2d8183a259b0a7fa12574a585ca3",
      "tree": "ec5d2ba98bb46e01afd3a9fcc50fb1c70d39eacb",
      "parents": [
        "ca928c1834880d6635887bcd7ff8a9f33e4b485a"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sun Jul 14 22:21:01 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sun Jul 14 22:21:01 2024 +0000"
      },
      "message": "explicit linux arch\n\nDiffs\u003d\n44fae6bfe explicit linux arch (#7606)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "ca928c1834880d6635887bcd7ff8a9f33e4b485a",
      "tree": "ee101eaefe1e9b2b301b1ae60f3e666ed9312969",
      "parents": [
        "39af1a4cd4bff5441ae030089fdfeecf88d0baaf"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sun Jul 14 19:01:23 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sun Jul 14 19:01:23 2024 +0000"
      },
      "message": "handle linux warnings\n\nDiffs\u003d\n2a1db3835 handle linux warnings (#7598)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "39af1a4cd4bff5441ae030089fdfeecf88d0baaf",
      "tree": "cb686498bb9e9a48be99d0a32977da38e4d9da60",
      "parents": [
        "3d37b510a742e7bb9be7de4558bd7c87d3127741"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sat Jul 13 00:07:43 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Sat Jul 13 00:07:43 2024 +0000"
      },
      "message": "add pic\n\nDiffs\u003d\nc5eb69645 add pic (#7589)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "3d37b510a742e7bb9be7de4558bd7c87d3127741",
      "tree": "5250e5f37c396a1786c80e9924676f471899d0bf",
      "parents": [
        "c2c9ec75bbcc0126764d4ea3a0dc49d744a85d25"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jul 12 01:48:21 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jul 12 01:48:21 2024 +0000"
      },
      "message": "Fixing windows build with rive_native.\n\nDiffs\u003d\n3bf0df5c0 Fixing windows build with rive_native. (#7575)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "c2c9ec75bbcc0126764d4ea3a0dc49d744a85d25",
      "tree": "26219597804a6969f8951db34ca4a5196f0d7c0e",
      "parents": [
        "fb37ec88b3600eb4a030a025f382fa1cbea5064b"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu Jul 11 17:50:32 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu Jul 11 17:50:32 2024 +0000"
      },
      "message": "Renderer in editor\n\nStarting to let tests run.\n\nDiffs\u003d\na0a6c0d3b Renderer in editor (#7495)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "fb37ec88b3600eb4a030a025f382fa1cbea5064b",
      "tree": "a7e0f98b6004674ec1538c1303f3ab3a9f119c80",
      "parents": [
        "6600bc3c4703e7ceed1ae85ea079c69732e6ea1c"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jul 10 22:08:00 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jul 10 22:08:00 2024 +0000"
      },
      "message": "Fix crash when skinnable isn’t found.\n\nFixes https://github.com/rive-app/rive/issues/7317\n\nDiffs\u003d\n876a2dca5 Fix crash when skinnable isn’t found. (#7554)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "6600bc3c4703e7ceed1ae85ea079c69732e6ea1c",
      "tree": "290acf38a0bafa81d25b114b1d92ff76a0159beb",
      "parents": [
        "85a28fb8715e20e91ba986ae700f6b08a47438d7"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Jul 09 23:10:02 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Tue Jul 09 23:10:02 2024 +0000"
      },
      "message": "change how forAll iterates over children\n\nforAll was currently applying the predicate multiple times per element:\n- calling super on each component applying the predicate once\n- applying it again per child when calling forAll in a container component.\n\nDiffs\u003d\n8fbe13788 change how forAll iterates over children (#7546)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "85a28fb8715e20e91ba986ae700f6b08a47438d7",
      "tree": "b15efe9d2ade2dbc58ad761ead247fdcbadd632e",
      "parents": [
        "ca54937a1707639571552b82ddc140b503d23278"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Jul 09 19:55:37 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Jul 09 19:55:37 2024 +0000"
      },
      "message": "Fix jpeg and png decode overflows and error handling.\n\nOur png and jpeg decode methods suffer from overflow bugs caused when multiplying 32 bit dimensions that overflow 32 bits of storage. We fix this in two ways:\n- bump factors to size_t when multiplying to ensure large valid files can be decoded\n- check for overflow when passing row pointers for decoding or copying to ensure we don\u0027t access out of bounds memory\n\nAlso includes some cleanup using unique ptr in png decoding.\n\nAlso includes two tests with a bad png and a half-bad jpeg (half-bad as it can actually decode but provides incorrect/manipulated dimensions to attempt to cause overflow).\n\nIssue reported here: https://github.com/rive-app/rive-cpp/issues/373\n\nDiffs\u003d\n93fb6eb83 Fix jpeg and png decode overflows and error handling. (#7535)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "ca54937a1707639571552b82ddc140b503d23278",
      "tree": "378e17a3ae3c0fc7ff419d9f9ff9d47ea88eb6a2",
      "parents": [
        "716bb4d846935ad2b32d26791af7d6b614895e49"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 05 21:06:31 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jul 05 21:06:31 2024 +0000"
      },
      "message": "add missing validations\n\nfixes #7531\nthere were two validations that were missing in the c++ runtime but were not in Flutter\n\nDiffs\u003d\n1e7b1c030 add missing validations (#7532)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "716bb4d846935ad2b32d26791af7d6b614895e49",
      "tree": "03f3ecd78d2067f50f1f622894294d3cd5e1e8f2",
      "parents": [
        "d18ecfb9c7d9a9c745cce1719c3f0d1a5716c1c9"
      ],
      "author": {
        "name": "avivian",
        "email": "hello@rive.app",
        "time": "Tue Jul 02 13:47:10 2024 +0000"
      },
      "committer": {
        "name": "avivian",
        "email": "hello@rive.app",
        "time": "Tue Jul 02 13:47:10 2024 +0000"
      },
      "message": "use varuint for writing/reading objectid, total properties and property key in animation reset\n\nobjectId, propertykey are definitely written as varuint, not sure if properties total needs to be, but doesn\u0027t hurt to have it that way either I think.\n\nI\u0027m not sure if this is everything that needs to be updated. I tried to use `generate_core_runtime` to update the flutter runtime but that made a bunch of changes like unused imports all over the place...\n\nDiffs\u003d\n07cbce551 use varuint for writing/reading objectid, total properties and property key in animation reset (#7510)\n\nCo-authored-by: Arthur Vivian \u003carthur@rive.app\u003e\nCo-authored-by: Hernan Torrisi \u003chernantorrisi@gmail.com\u003e\n"
    },
    {
      "commit": "d18ecfb9c7d9a9c745cce1719c3f0d1a5716c1c9",
      "tree": "092b5bf0d09c638e3f624e79de0b3fc8e0d4a946",
      "parents": [
        "c7176bd69c671454c25c2096988fafdbaba71bba"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sun Jun 30 15:00:08 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sun Jun 30 15:00:08 2024 +0000"
      },
      "message": "Xxxx transitions with base virtual animation\n\nDiffs\u003d\nf9b1e8ec2 Xxxx transitions with base virtual animation (#7157)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "c7176bd69c671454c25c2096988fafdbaba71bba",
      "tree": "ab72b90e2753a7e7c41117da7e7bd4b57fa0757c",
      "parents": [
        "b9ff2f46d709334d506ec4a769520b153908b014"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Sat Jun 29 01:23:03 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Sat Jun 29 01:23:03 2024 +0000"
      },
      "message": "Layout bitfield to props with keying\n\n- Move layout styles previously in bitfields to core properties\n- Add KeyFrameUint for keying int values (hold keyframes)\n- Add alignment property that can compute the layout properties related to alignment at runtime rather than storing them\n- Add ComboBox in the keyed object hierarchy which displays style related enum values\n\nhttps://github.com/rive-app/rive/assets/186340/ec2ecbde-e539-40cc-b964-2791ad28cc22\n\nDiffs\u003d\ne5db5a652 Layout bitfield to props with keying (#7478)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "b9ff2f46d709334d506ec4a769520b153908b014",
      "tree": "5fa3d7fa123330140aa7829af3a27ec332c1f52b",
      "parents": [
        "e438959e2f3b7d6d1524e3271244eb8dc8ed6845"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 28 19:37:39 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 28 19:37:39 2024 +0000"
      },
      "message": "disable fallback font during artboard rendering\n\nfixes #7479\nThe reason why the text looks different is that the editor uses a default font if it doesn\u0027t find a codepoint in the style defined font.\nFor example, in the font SF Pro, the symbol carriage return (\\r) doesn\u0027t have a codepoint, but it does in the default font, which generates a new text run.\nShare links, or our video recorder, don\u0027t have a default font so they skip that symbol.\nThis issue could happen with any other symbol that isn\u0027t found in the style font, so we decided to disable default fonts when rendering artboard text to guarantee they will look the same as at export time.\n\nDiffs\u003d\n1adf3dbf4 disable fallback font during artboard rendering (#7480)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "e438959e2f3b7d6d1524e3271244eb8dc8ed6845",
      "tree": "4a8b267617a9c98be917bbc3afe369d89176c4d3",
      "parents": [
        "60ca97d3a4088ce76fc6f7e2094415b52ef7c461"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 19:35:30 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 19:35:30 2024 +0000"
      },
      "message": "Miscellaneous Layout UX Fixes\n\n- Fixes issues with edge constraints UX not updating\n- Fixes issue with absolute/relative toggle not updating\n- Fixes bug with incorrect point value when moving edge constraints to Left+Right and Top+Bottom\n- Fix getting into bad state with inherited interpolator\n- Fix layout animation advance bug\n- Force layout bounds to be updated when parent changes (fixes a bug where relative layoutcomponents weren\u0027t updating because left/top value doesnt change when reparenting)\n\nDiffs\u003d\n6f29a9c0c Miscellaneous Layout UX Fixes (#7491)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "60ca97d3a4088ce76fc6f7e2094415b52ef7c461",
      "tree": "4e9e2560520192f2b970ce4558d9ff9aa9a46c3e",
      "parents": [
        "bb814c306a8a3f61ac4f6caa5397482753a83a4c"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 18:26:02 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 18:26:02 2024 +0000"
      },
      "message": "Add yoga to thumbnail generator build\n\nDiffs\u003d\n09ccc9ebb Add yoga to thumbnail generator build (#7494)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "bb814c306a8a3f61ac4f6caa5397482753a83a4c",
      "tree": "4998d9121960346af9b8e00c03a8cb5e5ba7fc14",
      "parents": [
        "3c092fd250c075e399b306141df658126c3db1be"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 16:45:15 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 27 16:45:15 2024 +0000"
      },
      "message": "change how viewmodel instances target their viewmodel\n\nwe don\u0027t call onAddedDirty to viewmodel instances because they don\u0027t belong to an artboard.\nSo this PR changes how they target their viewmodel reference.\n\nDiffs\u003d\naa390d5dc change how viewmodel instances target their viewmodel (#7468)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "3c092fd250c075e399b306141df658126c3db1be",
      "tree": "4b78f686a5378e95c3fa758e366104bbd3746085",
      "parents": [
        "8edc70fc3bba589daf2ae770c4a92601f52c0cb6"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 17:48:36 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 17:48:36 2024 +0000"
      },
      "message": "Xxxx databinding add boolean\n\nAdding booleans to the list of view model primitives\n\nDiffs\u003d\ne66e242c6 Xxxx databinding add boolean (#7456)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "8edc70fc3bba589daf2ae770c4a92601f52c0cb6",
      "tree": "7c4faa4d9cb4bcbfb0074a6761a29e8db127f793",
      "parents": [
        "c7ecdf41112fa5e97b837b0001ac584bdffcb29a"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 16:14:07 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 16:14:07 2024 +0000"
      },
      "message": "Xxxx data binding data context\n\nsome small code improvements\n- reorganize code to get things ready for binding text runs\n- support to bind color two way\n- fix bug: new data binds not updating if they were created in animate mode\n\nDiffs\u003d\n9cd8759a0 Xxxx data binding data context (#7454)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "c7ecdf41112fa5e97b837b0001ac584bdffcb29a",
      "tree": "0c8d0e374432095f594ad1a8c260508ecfa17f96",
      "parents": [
        "40c94ab7ff11ac596b27e4d66d3595d0aeec331a"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 15:20:46 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Fri Jun 21 15:20:46 2024 +0000"
      },
      "message": "Animation for Layouts\n\n- Popout for setting layout animation\n- Supports hold, linear, cubic ease and elastic\n- Layouts can have custom interpolation or inherit from up the layout tree\n- This PR also implements the change to not store flexGrow or alignSelf when setting scaleType, rather we put the logic into syncStyle and directly pass the values for those into the layout engine\n- Tested with Rive Renderer in editor and seems to work well!\n- @alxgibsn I moved the animation popout to the Layout inspector. We discussed the Auto Layout inspector, but since animation can be applied to a layoutcomponent that has no children (whereas the Auto Layout inspector must have children to be expanded), it seemed more appropriate there.\n\nDiffs\u003d\n31f5ee5c4 Animation for Layouts (#7426)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "40c94ab7ff11ac596b27e4d66d3595d0aeec331a",
      "tree": "9904dd9f5d1215254ad6ffef3c1140bbdd07124f",
      "parents": [
        "ba19285dd5723a4f336def854f1275eb4f50e1fe"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 19:03:33 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 19:03:33 2024 +0000"
      },
      "message": "Renames for Yoga and libjpeg\n\nAddresses the Unity issues raised by Adam here: https://2dimensions.slack.com/archives/CLLCU09T6/p1718727712078119\n\nlibjpeg has a flag `NEED_SHORT_EXTERNAL_NAMES`, which renames functions to shorter names, however, I didn\u0027t use this approach because its possible we could get naming collisions if someone brings another 3rd party lib which also has this flag enabled.\n\nDiffs\u003d\na4439ee42 Renames for Yoga and libjpeg (#7446)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "ba19285dd5723a4f336def854f1275eb4f50e1fe",
      "tree": "0ca74ca0388a3088c09b6f963251d072177ca804",
      "parents": [
        "2d4e534a4711482e59fa3708f0c4816054a76732"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 18:07:27 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 18:07:27 2024 +0000"
      },
      "message": "Update LayoutComponentStyle bitfields to be compatible with older C++ versions\n\nDiffs\u003d\n97578005c Update LayoutComponentStyle bitfields to be compatible with older C++ versions (#7436)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "2d4e534a4711482e59fa3708f0c4816054a76732",
      "tree": "932c251770dabb30c88cb2101e1b1776654c5988",
      "parents": [
        "e1e125a6595100e4cdc14def85c97d463bde23ef"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 16:54:52 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 20 16:54:52 2024 +0000"
      },
      "message": "databinding\n\nDiffs\u003d\n75823467d databinding (#7341)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "e1e125a6595100e4cdc14def85c97d463bde23ef",
      "tree": "0fa6e182bfda8e085a58e21ccf743d81874ea6ab",
      "parents": [
        "c825b0a04942e9421caddeb5f23f330a8d4cf12e"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jun 14 21:08:55 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri Jun 14 21:08:55 2024 +0000"
      },
      "message": "Optimize image encoding/decoding in debug builds\n\nWe don\u0027t need to run this code in debug mode, even when we\u0027re debugging our own code. This makes the golden testing go almost twice as fast.\n\nDiffs\u003d\n7e1b3027d Optimize image encoding/decoding in debug builds (#7418)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "c825b0a04942e9421caddeb5f23f330a8d4cf12e",
      "tree": "74964038d3c03f23bb9d1d3dfe1dc4eef0bf88d3",
      "parents": [
        "c134293d05f3fc593daf8042ab569f7ad25c70af"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jun 12 21:03:00 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed Jun 12 21:03:00 2024 +0000"
      },
      "message": "Replace computeIntrinsicSize with measureLayout\n\nReplaces computeIntrinsicSize with measureLayout which lets the layout engine call the measure function as necessary to allow the objects that can respond to changes in size to fit as best as they can given the constraints. This allow for better handling of line wrapping, ellipsis, and pushing content under text to the exact boundary of the text when using max width/height options in the layout engine.\n\nI also tied in a few other fixes for how we allocate layout nodes and styles.\n\nDiffs\u003d\nda0b71559 Replace computeIntrinsicSize with measureLayout (#7410)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "c134293d05f3fc593daf8042ab569f7ad25c70af",
      "tree": "beac462aef33de864d228c6db4c7faf9e3a4b38f",
      "parents": [
        "3bba1c9384cc53bb3080723e206d8ec3ede9a2d0"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Jun 11 16:03:05 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Tue Jun 11 16:03:05 2024 +0000"
      },
      "message": "Yoga layout runtimes\n\nStarting to implement layout component with Yoga in CPP. Layouts works on iOS, macOS, Android and web runtimes.\n\nhttps://github.com/rive-app/rive/assets/186340/e09e639a-d38e-46b8-951d-a5ecc392b53a\n\nDiffs\u003d\n6c76b425f Yoga layout runtimes (#6787)\n\nCo-authored-by: Luigi Rosso \u003cluigi.rosso@gmail.com\u003e\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "3bba1c9384cc53bb3080723e206d8ec3ede9a2d0",
      "tree": "851a396d9d1ab9f4461e0858519c9f1556fa42f8",
      "parents": [
        "7101954caa84c950c0c6a7951964a71d1fe33095"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Jun 11 04:11:25 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Tue Jun 11 04:11:25 2024 +0000"
      },
      "message": "Nested linear animations report events up to parent artboards\n\nPreviously, only nested state machines could report events so that listeners in parent artboards could listen for them. This PR adds event reporting for nested simple animations. Had to refactor some stuff to genericize in order for both state machines and linear animations to have similar functionality.\n\nI\u0027m not sure if its possible, or desirable, for nested remap animations to have the same functionality, but that is not included in this PR.\n\nDiffs\u003d\n097b68f56 Nested linear animations report events up to parent artboards (#7310)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "7101954caa84c950c0c6a7951964a71d1fe33095",
      "tree": "6d0661988ac0a2d1ec7880b4ffaf8534a9171dd7",
      "parents": [
        "5fbbf5f874fe3aba0203ad2d9b0368e966ebf9c4"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Mon Jun 10 23:48:38 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Mon Jun 10 23:48:38 2024 +0000"
      },
      "message": "more renames for harfbuzz\n\nCaught this when working on the JUCE integration. Some harfbuzz renames we missed that cause linking problems on apps that use newer versions of harfbuzz.\n\nDiffs\u003d\n34e186b32 more renames for harfbuzz (#7398)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "5fbbf5f874fe3aba0203ad2d9b0368e966ebf9c4",
      "tree": "046f8343e6bdcd4ea3ca41784c10a7025a3864ac",
      "parents": [
        "afd3a5cd34500fe5f22f2758f676074a4b291e8c"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sat Jun 08 02:54:58 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Sat Jun 08 02:54:58 2024 +0000"
      },
      "message": "mark shape as dirty after flagged as target\n\nDiffs\u003d\nb88272290 mark shape as dirty after flagged as target (#7396)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "afd3a5cd34500fe5f22f2758f676074a4b291e8c",
      "tree": "4598a97b7402f6c44a9acb715a064eb971760534",
      "parents": [
        "fa6e59865cd1de99a3dfe06b5681f8aae266317e"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jun 07 23:59:35 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jun 07 23:59:35 2024 +0000"
      },
      "message": "don’t defer updates when a shape/path is used for hit detect\n\nFixes issue reported by Duolingo.\n\nhttps://2dimensions.slack.com/archives/C029X99PETE/p1717700429867579\n\nDiffs\u003d\na10b1e61e don’t defer updates when a shape/path is used for hit detect (#7392)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "fa6e59865cd1de99a3dfe06b5681f8aae266317e",
      "tree": "5fa6787fa8a9d7f422f92510c25eb35f11bde1d7",
      "parents": [
        "dd5cc310886c2a615608aab843d929677ecb81fb"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jun 07 00:44:49 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri Jun 07 00:44:49 2024 +0000"
      },
      "message": "Get rid of MetricsPath.\n\nThis lets us trim a raw path directly which means all the trim path logic from the editor can now be pushed down to the C++ runtime, even for the case where the rendering is still happening via Skia/Impeller, all our path operations can be done in C++ (without using RenderPath/MetricsPath/RenderMetricsPath/OnlyMetricsPath/etc). Basically, I needed to do this now to not have as many edge cases in the editor for the difference between using our runtime to render with PLS vs Flutter.\n\nIt also quite greatly simplifies the code! More lines removed than added!\n\nSome tests will fail as I think we\u0027re using the MetricsPath in some other parts of the code, but that can be refactored following the patterns used here...\n\nIt also means that most of our runtime now speaks RawPath which means we can optimize/reserve memory ahead of time in a lot of cases (not doing that yet).\n\nDiffs\u003d\n8486c3445 Get rid of MetricsPath. (#7371)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "dd5cc310886c2a615608aab843d929677ecb81fb",
      "tree": "fcf175df3e92ebe50f8132a92de44ad02f0dcc8c",
      "parents": [
        "41a69324a0cad36ea35ca5cbcc6510a28fe815e1"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 06 23:12:40 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Thu Jun 06 23:12:40 2024 +0000"
      },
      "message": "fix bounds calculation ahead of time\n\nthis PR handles marking a shape bounds as dirty after it has updated.\nThis is needed because pointer events can trigger before a new draw update, which would consume the change flag before the shape has properly updated.\n\nDiffs\u003d\n085f5bd2d fix bounds calculation ahead of time (#7380)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "41a69324a0cad36ea35ca5cbcc6510a28fe815e1",
      "tree": "4bd0e209a0fed46b57f4ca683898a273065dee7a",
      "parents": [
        "3f9e940167cd5fd9173c34f2a79fdaad0df19f11"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri May 31 23:31:05 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Fri May 31 23:31:05 2024 +0000"
      },
      "message": "Fix libjpg on Mac Sonoma\n\nDiffs\u003d\ndde676085 Fix libjpg on Mac Sonoma (#7329)\ne0a786c90 Runtime API for Nested Inputs (#7316)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\nCo-authored-by: Gordon Hayes \u003cpggordonhayes@gmail.com\u003e\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "3f9e940167cd5fd9173c34f2a79fdaad0df19f11",
      "tree": "56d380de3111598bed150a1d46e61aeb1bfd6cbc",
      "parents": [
        "eb046e6c5cd8fbcda87b15e5b8130ae3c57a2f89"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri May 24 21:30:48 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri May 24 21:30:48 2024 +0000"
      },
      "message": "Use unique_ptr in import stack.\n\nDiffs\u003d\n01d20e026 Use unique_ptr in import stack. (#7307)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "eb046e6c5cd8fbcda87b15e5b8130ae3c57a2f89",
      "tree": "149f8fc8f8600d79bf9c399fae630c995825f677",
      "parents": [
        "526edf1896b9dd612726794664560629e5d0b02c"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu May 23 20:32:01 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu May 23 20:32:01 2024 +0000"
      },
      "message": "Fail early with bad blend modes.\n\nDiffs\u003d\n5ad13845d Fail early with bad blend modes. (#7302)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "526edf1896b9dd612726794664560629e5d0b02c",
      "tree": "ec951afa69192b92212eddd4bf0140f5bffad2af",
      "parents": [
        "78672988b26d793c93e3f7c31329e715b956c680"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 22 23:17:39 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 22 23:17:39 2024 +0000"
      },
      "message": "Fix warnings about invalid toolsets\n\nAdd our custom android_ndk/emsdk toolsets to \"valid_tools\" for the gmake2 action. These errors were confusing even for people familiar with our build system.\n\nDiffs\u003d\n973ff2276 Fix warnings about invalid toolsets (#7300)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "78672988b26d793c93e3f7c31329e715b956c680",
      "tree": "8965acef1c1bcaae4f7e7569877a0443a252998e",
      "parents": [
        "35f22ae75d7720d64f1bdf72259b370bc6834fa6"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed May 22 21:40:09 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed May 22 21:40:09 2024 +0000"
      },
      "message": "fix for unexpected triggered events\n\nfixes #7226\nThis PR fixes reports of events when animations are playing backward.\nIt considers both the timeline speed and the state machine state speed to determine direction.\nIt also handles not reporting an event twice if it comes from a \"ping pong\" loop.\nIt also adds a small performance improvement, skipping the binary search if possible.\n\nDiffs\u003d\n265c00985 fix for unexpected triggered events (#7227)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "35f22ae75d7720d64f1bdf72259b370bc6834fa6",
      "tree": "740df54cfb1e4e8509e38844e907f88aa1ee9284",
      "parents": [
        "61d6fbb5cfd89aff9ab20ad8a21e58bf8753b807"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed May 22 19:50:10 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Wed May 22 19:50:10 2024 +0000"
      },
      "message": "validating core objects property keys on load\n\nthis should fix fuzz crashes caught from bad animation keys\n\nDiffs\u003d\n8a538c243 validating core objects property keys on load (#7298)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "61d6fbb5cfd89aff9ab20ad8a21e58bf8753b807",
      "tree": "b7ed45fa3541d295df906878bd7873927f17f3f6",
      "parents": [
        "2c45ce80234671ff07236baf8e4f3aef3e7cd8ba"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue May 21 21:13:37 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue May 21 21:13:37 2024 +0000"
      },
      "message": "Make ContourMeasure more robust\n\nMake assertions and operations inside ContourMeasure more robust with degenerate data and NaN.\n\nAdd a rive::math::clamp() method with better behavior surrounding NaN.\n\nChange the ContourMeasureIter constructor to accept a \"const RawPath*\". (The former definition with \"const RawPath\u0026\" accepted r-values, which was unsafe since the iterator stored raw pointers directly to objects owned by the RawPath.)\n\nDelete RawPath operator*(). The way this operator was defined, the matrix had to go on the wrong side of the path relative to how it operated on the data.\n\nDiffs\u003d\ncd6210f42 Make ContourMeasure more robust (#7294)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "2c45ce80234671ff07236baf8e4f3aef3e7cd8ba",
      "tree": "cf9f13f327810e52d281e73ba2ef9f59db1e7b26",
      "parents": [
        "e682a6fbd34e72a01f2a86fca619858dd2bf4c3a"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri May 17 16:02:41 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri May 17 16:02:41 2024 +0000"
      },
      "message": "use world bounds for coarse grained collision test\n\nfixes #7286\nI\u0027m creating this PR mostly to align the way both runtimes behave, although the performance gain is a plus probably.\nDuo and others have reported that this difference of two pixels between runtime and editor are critical to how they build their projects.\n\nDiffs\u003d\n405b8ef90 use world bounds for coarse grained collision test (#7287)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "e682a6fbd34e72a01f2a86fca619858dd2bf4c3a",
      "tree": "9073b10b7dcc075b2ec14964ddf20cc35f4e8c31",
      "parents": [
        "6ecd5882959edd42d0e78785800216ec4c7588e2"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri May 17 01:57:43 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Fri May 17 01:57:43 2024 +0000"
      },
      "message": "initialize seed with chrono\n\nusing rand without seeding it was generating the same sequence of results on every iteration.\nThis PR initializes it with a new seed on every state machine instance.\n\nDiffs\u003d\n3734d9bac initialize seed with chrono (#7285)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "6ecd5882959edd42d0e78785800216ec4c7588e2",
      "tree": "3e8fd87328b5ab1954dba7a646d24e687e832e04",
      "parents": [
        "4aeeaddf4aa621fdcdd48a85bb287d5c24ab9f27"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu May 16 23:46:24 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Thu May 16 23:46:24 2024 +0000"
      },
      "message": "Simple libjpeg\n\nOriginal libjpeg (turbo was forked from an older version of this). Note C api is still the same.\n\nDiffs\u003d\n45b998e68 Simple libjpeg (#7277)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "4aeeaddf4aa621fdcdd48a85bb287d5c24ab9f27",
      "tree": "82fca09a7059226824a9d5f8e7ac39acf9111966",
      "parents": [
        "657354303be0cc13dd8926f6863489964dc62f5c"
      ],
      "author": {
        "name": "mjtalbot",
        "email": "hello@rive.app",
        "time": "Fri May 10 08:18:40 2024 +0000"
      },
      "committer": {
        "name": "mjtalbot",
        "email": "hello@rive.app",
        "time": "Fri May 10 08:18:40 2024 +0000"
      },
      "message": "fix advancing nested animations\n\nflipping the order of conditions to guarantee that all nested animations advance\n\nDiffs\u003d\n5ccc21fa3 fix advancing nested animations (#7246)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "657354303be0cc13dd8926f6863489964dc62f5c",
      "tree": "a33f67beaa7bb92868265c3b649c5c48f5bdcf6a",
      "parents": [
        "f8e8391390ae89629fa5ff0211dc75f23e5c1079"
      ],
      "author": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed May 08 22:59:09 2024 +0000"
      },
      "committer": {
        "name": "bodymovin",
        "email": "hello@rive.app",
        "time": "Wed May 08 22:59:09 2024 +0000"
      },
      "message": "remove harfbuzz flag\n\nDiffs\u003d\n8700c7365 remove harfbuzz flag (#7233)\n\nCo-authored-by: hernan \u003chernan@rive.app\u003e\n"
    },
    {
      "commit": "f8e8391390ae89629fa5ff0211dc75f23e5c1079",
      "tree": "5e02cf49e793457fab8bb00d727c9742647522b7",
      "parents": [
        "8e68ab77876153a04d8e53a9b11f30c2582418ae"
      ],
      "author": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed May 08 22:06:48 2024 +0000"
      },
      "committer": {
        "name": "philter",
        "email": "hello@rive.app",
        "time": "Wed May 08 22:06:48 2024 +0000"
      },
      "message": "Don\u0027t defer path update if Shape has a dependent skin\n\nFixes an issue where shapes set to 0% opacity and also having bound bones were not updating, causing problems with hit detection on those shapes.\n\nDiffs\u003d\ne0c4d9a20 Don\u0027t defer path update if Shape has a dependent skin (#7231)\n\nCo-authored-by: Philip Chung \u003cphilterdesign@gmail.com\u003e\n"
    },
    {
      "commit": "8e68ab77876153a04d8e53a9b11f30c2582418ae",
      "tree": "97af276383bf65376c945d203302965251896324",
      "parents": [
        "49a9ac541a9be88733f5d0ed492ed5cffe3f2384"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 08 21:55:43 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 08 21:55:43 2024 +0000"
      },
      "message": "Fix an assert in contour_measure.cpp\n\nSince fp32 has finite precision, a segment may reasonably become degenerate with length 0, and we need to be robust enough to handle this. Asserting that the distance is non-negative is still a good test.\n\nFixes #7210.\n\nDiffs\u003d\n806ae1fae Fix an assert in contour_measure.cpp (#7232)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "49a9ac541a9be88733f5d0ed492ed5cffe3f2384",
      "tree": "61086fd16bc5b73bec07c14d3269f2b26cdfc656",
      "parents": [
        "448cda297d1c21e3fc0a9ce63a8db1e4eca04af7"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 08 19:31:48 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Wed May 08 19:31:48 2024 +0000"
      },
      "message": "Add strokes, gradients, and blend modes to path_fuzz\n\nDiffs\u003d\n7d03c3faf Add strokes, gradients, and blend modes to path_fuzz (#7230)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "448cda297d1c21e3fc0a9ce63a8db1e4eca04af7",
      "tree": "d233eedf489381adea1ee870026e5e87cbd05ce0",
      "parents": [
        "1fadc01a78f67f0599e98d91d36b1472b8b7f2c1"
      ],
      "author": {
        "name": "mjtalbot",
        "email": "hello@rive.app",
        "time": "Wed May 08 15:09:23 2024 +0000"
      },
      "committer": {
        "name": "mjtalbot",
        "email": "hello@rive.app",
        "time": "Wed May 08 15:09:23 2024 +0000"
      },
      "message": "Wasm fallback and min safari version\n\n### This PR\n- fixes WASM not loading on older Apple devices/browsers\n- adds a fallback mechanism\n\n#### Fix for older devices\nThe addition of `MIN_SAFARI_VERSION` is the only flag that resolved the issue on the affected devices (see discussion: https://2dimensions.slack.com/archives/CLLCU09T6/p1714494911457529)\n\n#### Fallback\nThis PR is meant to showcase a way to introduce a fallback mechanism quickly. Can it be merged? Yes. But we need to consider the impact and alternatives (see below). _Also note that this PR makes an assumption about the best way to handle our single packages, which needs to be discussed before merging (see below)._\n\n#### Problem with this fallback\nWe\u0027ll increase the NPM package size by having two WASM files: `rive.wasm` and `rive_fallback.wasm`. To alleviate any concern, this can be resolved with proper documentation. The packages that load the WASM remotely do so through `unpkg` or `jsdelvr` (or overridden manually). It would not have an impact on the actual end client (to my knowledge), but maybe the perception of the \"increased\" NPM package size is something we want to avoid.\n\n#### Benefit of this approach\nQuick, with minimal change. We continue to use `unpkg` and `jsdelvr` to host.\n\n#### TODO\nAdaptive Loading: Implement more sophisticated loading strategies, such as loading different WASM modules based on the user\u0027s browser capabilities or preferences. This draft PR only loads the fallback if the current one failed. This does not need to be part of this PR and can be a future enhancement.\n\n### Single vs Non-Single versions\n**This fallback mechanism will only work for the non-single packages where we load the WASM bundle separately**. Not the **-single versions, where WASM is bundled with the JS. In my testing during the call to `loadRuntime` the callback for `locateFile` will not be called if Emscripten is built with `-sSINGLE_FILE\u003d1`.\n\nAt the time of making the draft PR I\u0027ve not come up with a solution for this. It might not be possible.\n\nTODO: This needs to be investigated more. Or we should reach out to Emscripten.\n\n#### What this means\nIf we can\u0027t create a fallback for these, then we should make a decision around our single libraries:\n- Should they prefer to support older architecture and we recommend that people use the non-single packages to benefit from the fallback mechanism.\n- Or the alternative and we still recommend using the non-single packages to benefit from a fallback.\n\n**There are other benefits to using the non-single:**\n- Streaming Compilation: Newer browsers can start compiling the WASM file as soon as it starts downloading, which could lead to faster execution start times.\n- Better Cache Control: JavaScript and WASM can be cached separately. If you update one, users may not need to re-download the other. With the single version, I can see how people may end up using it in a way where any update to their site might then be bundling everything again.\n\n### Alternative One\n_Most of the above still apply._\n\nInstead of adding `rive_fallback.wasm` to the current packages, we create another NPM package called `rive_fallback` or something. And all this package is responsible for is to distribute the fallback WASM files, for example, `rive_canvas_fallback.wasm` and `rive_webgl_fallback.wasm`.\n\n**Benefit**\nWe do not increase the perceived NPM package size for our published packages. And we can continue to use `unpkg` and `jsdelivr` for hosting.\n\n### Alternative Two\n_Most of the above still apply._\nWe build our own hosting with versioning, etc.\n\nDiffs\u003d\n4342a3f04 Wasm fallback and min safari version (#7214)\n\nCo-authored-by: Gordon \u003cpggordonhayes@gmail.com\u003e\nCo-authored-by: Maxwell Talbot \u003ctalbot.maxwell@gmail.com\u003e\n"
    },
    {
      "commit": "1fadc01a78f67f0599e98d91d36b1472b8b7f2c1",
      "tree": "21e9dfc8685657a2a1b33d70c018993ca7a02c3d",
      "parents": [
        "785bee1ff7a6d5f5a484f2158342061a4e31f536"
      ],
      "author": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue May 07 01:41:51 2024 +0000"
      },
      "committer": {
        "name": "csmartdalton",
        "email": "hello@rive.app",
        "time": "Tue May 07 01:41:51 2024 +0000"
      },
      "message": "Add a \"path_fuzz\" mode to the PLS fuzzer\n\nMerge all fuzzers into a single application named \"fuzz\". Add another fuzzer that generates random paths. Fix some bugs it found.\n\nDiffs\u003d\n1d0d2b6ac Add a \"path_fuzz\" mode to the PLS fuzzer (#7211)\n\nCo-authored-by: Chris Dalton \u003c99840794+csmartdalton@users.noreply.github.com\u003e\n"
    },
    {
      "commit": "785bee1ff7a6d5f5a484f2158342061a4e31f536",
      "tree": "a0fd6e72f0853febc28294d5652294cbbe748883",
      "parents": [
        "0a88f0e6661072777ec13739ccd586da88fb5a96"
      ],
      "author": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri May 03 21:22:01 2024 +0000"
      },
      "committer": {
        "name": "luigi-rosso",
        "email": "hello@rive.app",
        "time": "Fri May 03 21:22:01 2024 +0000"
      },
      "message": "Fix ios analyzer\n\nTrying to disable some unused features that might be biting us..\n\nDiffs\u003d\n0d03a416b Fix ios analyzer (#7198)\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n"
    }
  ],
  "next": "0a88f0e6661072777ec13739ccd586da88fb5a96"
}
