diff --git a/src/GraphQL/AssetType/AssetType.php b/src/GraphQL/AssetType/AssetType.php index c32ed60d2..f537ac62a 100644 --- a/src/GraphQL/AssetType/AssetType.php +++ b/src/GraphQL/AssetType/AssetType.php @@ -71,6 +71,13 @@ public function build(&$config) 'height' => Type::int(), ], ]); + $focalPointsType = new ObjectType([ + 'name' => 'focalPoints', + 'fields' => [ + 'x' => Type::float(), + 'y' => Type::float(), + ], + ]); // see https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#Resolution_switching_Same_size_different_resolutions $resolutionsType = Type::listOf(new ObjectType([ @@ -123,6 +130,10 @@ public function build(&$config) 'type' => Type::float(), 'resolve' => [$resolver, 'resolveDuration'], ], + 'focalPoints' => [ + 'type' => $focalPointsType, + 'resolve' => [$resolver, 'resolveFocalPoints'], + ], 'srcset' => [ 'type' => Type::listOf(new ObjectType([ 'name' => 'srcset', diff --git a/src/GraphQL/Resolver/AssetType.php b/src/GraphQL/Resolver/AssetType.php index 3f3a20b72..878fadb0f 100644 --- a/src/GraphQL/Resolver/AssetType.php +++ b/src/GraphQL/Resolver/AssetType.php @@ -376,7 +376,26 @@ public function resolveVersion($value = null, $args = [], $context = [], Resolve } /** - * @param ElementDescriptor $value + * @return array{x: float, y: float}|null + * + * @throws Exception + */ + public function resolveFocalPoints(?ElementDescriptor $value = null, array $context = []): ?array + { + $asset = $this->getAssetFromValue($value, $context); + + if (!$asset instanceof Asset\Image) { + return null; + } + + return [ + 'x' => $asset->getCustomSetting('focalPointX'), + 'y' => $asset->getCustomSetting('focalPointY'), + ]; + } + + /** + * @param ElementDescriptor|null $value * @param array $context * * @return Asset|null