)]}'
{
  "commit": "83675ed27633283e7fc296c8bca22e841224c096",
  "tree": "d6632c3784ad0680611d197eafdfa9d64f6769c8",
  "parents": [
    "97f70d2e9ef16d8fdf47d52e6ead4f98f69b252e"
  ],
  "author": {
    "name": "Jim Graham",
    "email": "flar@google.com",
    "time": "Tue Jun 30 09:59:03 2026 -0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Jun 30 16:59:03 2026 +0000"
  },
  "message": "[CP-stable] [Impeller] Fix positioning of text shadow masks (#188766)\n\nThis pull request is created manually per (https://github.com/flutter/flutter/blob/main/docs/releases/Flutter-Cherrypick-Process.md#automatically-creates-a-cherry-pick-request)\r\nPlease fill in the form below, and a flutter domain expert will evaluate this cherry pick request.\r\n\r\n### Issue Link:\r\nWhat is the link to the issue this cherry-pick is addressing?\r\n\r\nhttps://github.com/flutter/flutter/issues/188035\r\n\r\n### Impact Description:\r\nApps that use shadows on Text will have those shadows separate from the text and appear at the coordinate origin of the nearest widget that wraps things with some kind of SaveLayer or engine layer.\r\n\r\n### Changelog Description:\r\nExplain this cherry pick:\r\n* Ensures that shadows track the position of text even when enclosed in a SaveLayer\r\n* Prior to this fix, those shadows would appear at the origin of such a SaveLayer - typically the upper or lower corner of one of the parent widgets.\r\n* This would happen on all platforms.\r\n\r\n[flutter/188035] When rendering text with shadows, the shadows would appear elsewhere on the screen, separate from the text\r\n\r\n### Workaround:\r\nNo known workarounds exist.\r\n\r\n### Risk:\r\nWhat is the risk level of this cherry-pick?\r\n\r\n### Test Coverage:\r\nAre you confident that your fix is well-tested by automated tests?\r\n\r\n### Validation Steps:\r\nThe golden images created by this PR will verify the code is correct if the shadows on the text appear directly underneath each rendered string.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "30b884eca47e7c1b7de89651b7c8665d59a07681",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/aiks_dl_text_unittests.cc",
      "new_id": "f1e96d9d2dce1071a4a7ff509f0678cf180396f9",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/aiks_dl_text_unittests.cc"
    },
    {
      "type": "modify",
      "old_id": "6cff7f547fb6de8a41a17ff71afb22874b892167",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/display_list/canvas.cc",
      "new_id": "1b67031f6e483fb3ccf71095a99c44af30017dfe",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/display_list/canvas.cc"
    },
    {
      "type": "modify",
      "old_id": "2f4c6963ed4189afb2b7c9c12dfd6ab43c7bcddc",
      "old_mode": 33188,
      "old_path": "engine/src/flutter/impeller/entity/contents/text_contents.cc",
      "new_id": "d02d115e5a3529dd8cc0f2835aa4c5579218906d",
      "new_mode": 33188,
      "new_path": "engine/src/flutter/impeller/entity/contents/text_contents.cc"
    }
  ]
}
