Skip to content

Commit

Permalink
Refactor: Move meter data to definition package
Browse files Browse the repository at this point in the history
Moves the meter data types from the legacy_definition package to the definition package.
This change simplifies the codebase by removing the redundant legacy_definition package.

Additionally, this change refactors the DesignCompose code to use the new meter data types.

# Conflicts:
#	crates/figma_import/tests/layout-unit-tests.dcf
#	designcompose/src/main/assets/figma/DesignSwitcherDoc_Ljph4e3sC0lHcynfXpoh9f.dcf
#	integration-tests/validation/src/main/assets/figma/AlignmentTestDoc_JIjE9oKQbq8ipi66ab5UaK.dcf
#	integration-tests/validation/src/main/assets/figma/BattleshipDoc_RfGl9SWnBEvdg8T1Ex6ZAR.dcf
#	integration-tests/validation/src/main/assets/figma/BlendModeTestDoc_ZqX5i5g6inv9tANIwMMXUV.dcf
#	integration-tests/validation/src/main/assets/figma/ComponentReplaceDoc_bQVVy2GSZJ8veYaJUrG6Ni.dcf
#	integration-tests/validation/src/main/assets/figma/ComponentReplaceRelayoutDoc_qIh0IOQTCtgeAWZFF5gYSk.dcf
#	integration-tests/validation/src/main/assets/figma/DialsGaugesTestDoc_lZj6E9GtIQQE4HNLpzgETw.dcf
#	integration-tests/validation/src/main/assets/figma/FancyFillTestDoc_xQ9cunHt8VUm6xqJJ2Pjb2.dcf
#	integration-tests/validation/src/main/assets/figma/GridLayoutDoc_MBNjjSbzzKeN7nBjVoewsl.dcf
#	integration-tests/validation/src/main/assets/figma/GridLayoutTestDoc_JOSOEvsrjvMqanyQa5OpNR.dcf
#	integration-tests/validation/src/main/assets/figma/GridWidgetTestDoc_OBhNItd9i9J2LwVYuLxEIx.dcf
#	integration-tests/validation/src/main/assets/figma/HelloVersionDoc_v62Vwlxa4Bb6nopJiAxQAQ_5668177823.dcf
#	integration-tests/validation/src/main/assets/figma/ImageUpdateTestDoc_oQw7kiy94fvdVouCYBC9T0.dcf
#	integration-tests/validation/src/main/assets/figma/InteractionTestDoc_8Zg9viyjYTnyN29pbkR1CE.dcf
#	integration-tests/validation/src/main/assets/figma/LayoutReplacementTestDoc_dwk2GF7RiNvlbbAKPjqldx.dcf
#	integration-tests/validation/src/main/assets/figma/LayoutTestsDoc_Gv63fYTzpeH2ZtxP4go31E.dcf
#	integration-tests/validation/src/main/assets/figma/ListWidgetTestDoc_9ev0MBNHFrgTqJOrAGcEpV.dcf
#	integration-tests/validation/src/main/assets/figma/MaskTestDoc_mEmdUVEIjvBBbV0kELPy37.dcf
#	integration-tests/validation/src/main/assets/figma/ModuleExampleDoc_hPEGkrF0LUqNYEZObXqjXZ.dcf
#	integration-tests/validation/src/main/assets/figma/OpenLinkTestDoc_r7m4tqyKv6y9DWcg7QBEDf.dcf
#	integration-tests/validation/src/main/assets/figma/RecursiveCustomizationsDoc_o0GWzcqdOWEgzj4kIeIlAu.dcf
#	integration-tests/validation/src/main/assets/figma/ShadowsTestDoc_OqK58Y46IqP4wIgKCWys48.dcf
#	integration-tests/validation/src/main/assets/figma/SmartAnimateTestDoc_RW3lFurXCoVDeqY2Y7bf4v.dcf
#	integration-tests/validation/src/main/assets/figma/TelltaleTestDoc_TZgHrKWx8wvQM7UPTyEpmz.dcf
#	integration-tests/validation/src/main/assets/figma/VariableBorderTestDoc_MWnVAfW3FupV4VMLNR1m67.dcf
#	integration-tests/validation/src/main/assets/figma/VariablesTestDoc_HhGxvL4aHhP8ALsLNz56TP.dcf
#	integration-tests/validation/src/main/assets/figma/VariantAnimationTestDoc_pghyUUhlzJNoxxSK86ngiw.dcf
#	integration-tests/validation/src/main/assets/figma/VariantAnimationTimelineTestDoc_vJRf4zxY4QX4zzSSUd1nJ5.dcf
#	integration-tests/validation/src/main/assets/figma/VariantAsteriskTestDoc_gQeYHGCSaBE4zYSFpBrhre.dcf
#	integration-tests/validation/src/main/assets/figma/VariantInteractionsTestDoc_WcsgoLR4aDRSkZHY29Qdhq.dcf
#	integration-tests/validation/src/main/assets/figma/VariantPropertiesTestDoc_4P7zDdrQxj7FZsKJoIQcx1.dcf
#	integration-tests/validation/src/main/assets/figma/VectorRenderingTestDoc_Z3ucY0wMAbIwZIa6mLEWIK.dcf
#	reference-apps/tutorial/app/src/main/assets/figma/TutorialDoc_3z4xExq0INrL9vxPhj9tl7.dcf
  • Loading branch information
timothyfroehlich committed Nov 12, 2024
1 parent 4941256 commit 5733ea3
Show file tree
Hide file tree
Showing 47 changed files with 41 additions and 143 deletions.
1 change: 0 additions & 1 deletion crates/dc_bundle/src/legacy_definition.rs
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ use crate::definition::element::VariableMap;
use crate::legacy_definition::element::node::NodeQuery;

pub mod element;
pub mod plugin;
pub mod view;

/// EncodedImageMap contains a mapping from ImageKey to network bytes. It can create an
Expand Down
17 changes: 0 additions & 17 deletions crates/dc_bundle/src/legacy_definition/plugin.rs

This file was deleted.

90 changes: 0 additions & 90 deletions crates/dc_bundle/src/legacy_definition/plugin/meter_data.rs

This file was deleted.

2 changes: 1 addition & 1 deletion crates/dc_bundle/src/legacy_definition/view/node_style.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ use crate::definition::modifier::{
BlendMode, FilterOp, TextAlign, TextAlignVertical, TextOverflow,
};
use crate::definition::modifier::{BoxShadow, LayoutTransform, TextShadow};
use crate::legacy_definition::plugin::meter_data::MeterData;
use crate::definition::plugin::meter_data::MeterData;
use serde::{Deserialize, Serialize};

#[derive(Copy, Clone, PartialEq, Debug, Serialize, Deserialize)]
Expand Down
14 changes: 5 additions & 9 deletions crates/figma_import/src/reflection.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,23 +95,19 @@ pub fn registry() -> serde_reflection::Result<serde_reflection::Registry> {
.trace_type::<dc_bundle::definition::layout::GridLayoutType>(&samples)
.expect("couldn't trace GridLayoutType");
tracer
.trace_type::<dc_bundle::legacy_definition::plugin::meter_data::RotationMeterData>(&samples)
.trace_type::<dc_bundle::definition::plugin::RotationMeterData>(&samples)
.expect("couldn't trace RotationMeterData");
tracer
.trace_type::<dc_bundle::legacy_definition::plugin::meter_data::ArcMeterData>(&samples)
.trace_type::<dc_bundle::definition::plugin::ArcMeterData>(&samples)
.expect("couldn't trace ArcMeterData");
tracer
.trace_type::<dc_bundle::legacy_definition::plugin::meter_data::ProgressBarMeterData>(
&samples,
)
.trace_type::<dc_bundle::definition::plugin::ProgressBarMeterData>(&samples)
.expect("couldn't trace ProgressBarMeterData");
tracer
.trace_type::<dc_bundle::legacy_definition::plugin::meter_data::ProgressVectorMeterData>(
&samples,
)
.trace_type::<dc_bundle::definition::plugin::ProgressVectorMeterData>(&samples)
.expect("couldn't trace ProgressVectorMeterData");
tracer
.trace_type::<dc_bundle::legacy_definition::plugin::meter_data::MeterData>(&samples)
.trace_type::<dc_bundle::definition::plugin::meter_data::MeterData>(&samples)
.expect("couldn't trace MeterData");
tracer
.trace_type::<dc_bundle::definition::layout::PositionType>(&samples)
Expand Down
8 changes: 5 additions & 3 deletions crates/figma_import/src/toolkit_style.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
//! uses.
use crate::figma_schema;
use dc_bundle::legacy_definition::plugin::meter_data::{
ArcMeterData, MeterData, ProgressBarMeterData, ProgressMarkerMeterData,
ProgressVectorMeterData, RotationMeterData,

use dc_bundle::definition::plugin::meter_data::MeterData;
use dc_bundle::definition::plugin::{
ArcMeterData, ProgressBarMeterData, ProgressMarkerMeterData, ProgressVectorMeterData,
RotationMeterData,
};
use serde::{Deserialize, Serialize};

Expand Down
Binary file modified crates/figma_import/tests/layout-unit-tests.dcf
Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ private fun calculateRotationData(
): androidx.compose.ui.graphics.Matrix {
val rotation =
(rotationData.start + meterValue / 100f * (rotationData.end - rotationData.start))
.coerceDiscrete(rotationData.discrete, rotationData.discreteValue)
.coerceDiscrete(rotationData.discrete, rotationData.discrete_value)

val nodeWidth = style.fixedWidth(density)
val nodeHeight = style.fixedHeight(density)
Expand Down Expand Up @@ -170,15 +170,15 @@ private fun calculateProgressBarData(
): Pair<Size, androidx.compose.ui.graphics.Matrix?> {
// Progress bar discrete values are done by percentage
val discretizedMeterValue =
meterValue.coerceDiscrete(progressBarData.discrete, progressBarData.discreteValue)
meterValue.coerceDiscrete(progressBarData.discrete, progressBarData.discrete_value)

// Resize the progress bar by interpolating between 0 and endX or endY depending on whether it
// is a horizontal or vertical progress bar
if (progressBarData.vertical) {
val width = style.layout_style.width.getDim().pointsAsDp(density).value
// Calculate bar extents from the parent layout if it exists, or from the progress bar data
// if not.
var endY = progressBarData.endY
var endY = progressBarData.end_y
parent?.let { p ->
val parentSize = p.computedLayout?.let { Size(it.width, it.height) }
parentSize?.let { pSize ->
Expand All @@ -196,7 +196,7 @@ private fun calculateProgressBarData(
val height = style.layout_style.height.getDim().pointsAsDp(density).value
// Calculate bar extents from the parent layout if it exists, or from the progress bar data
// if not.
var endX = progressBarData.endX
var endX = progressBarData.end_x
parent?.let { p ->
val parentSize = p.computedLayout?.let { Size(it.width, it.height) }
parentSize?.let { pSize ->
Expand All @@ -219,7 +219,7 @@ private fun calculateProgressMarkerData(
): androidx.compose.ui.graphics.Matrix {
// Progress marker discrete values are done by percentage
val discretizedMeterValue =
meterValue.coerceDiscrete(markerData.discrete, markerData.discreteValue)
meterValue.coerceDiscrete(markerData.discrete, markerData.discrete_value)

// Calculate node and parent render sizes if available. These will only be available for
// squoosh, and will be used to calculate the progress sizes and extents
Expand All @@ -239,14 +239,14 @@ private fun calculateProgressMarkerData(
val overrideTransform = style.getTransform(density)
if (markerData.vertical) {
var startY =
parentSize?.let { it.height - (mySize?.height ?: 0f) / 2f } ?: markerData.startY
val endY = mySize?.let { -it.height / 2f } ?: markerData.endY
parentSize?.let { it.height - (mySize?.height ?: 0f) / 2f } ?: markerData.start_y
val endY = mySize?.let { -it.height / 2f } ?: markerData.end_y
val moveY = lerp(startY, endY, discretizedMeterValue, density)
val topOffset = style.layout_style.margin.top.pointsAsDp(density).value
overrideTransform.setYTranslation(moveY - topOffset)
} else {
var startX = mySize?.let { -it.width / 2f } ?: markerData.startX
var endX = parentSize?.let { it.width - (mySize?.width ?: 0f) / 2f } ?: markerData.endX
var startX = mySize?.let { -it.width / 2f } ?: markerData.start_x
var endX = parentSize?.let { it.width - (mySize?.width ?: 0f) / 2f } ?: markerData.end_x
val moveX = lerp(startX, endX, discretizedMeterValue, density)
val leftOffset = style.layout_style.margin.start.pointsAsDp(density).value
overrideTransform.setXTranslation(moveX - leftOffset)
Expand All @@ -266,7 +266,7 @@ private fun calculateArcData(
val arcAngleMeter =
(arcMeterValue / 100f * (arcData.end - arcData.start)).coerceDiscrete(
arcData.discrete,
arcData.discreteValue,
arcData.discrete_value,
)
if (shape.shape.get() is Shape.Arc) {
val arc = (shape.shape.get() as Shape.Arc).value
Expand All @@ -280,7 +280,7 @@ private fun calculateArcData(
arcData.start,
arcAngleMeter,
arc.inner_radius,
arcData.cornerRadius,
arcData.corner_radius,
arc.is_mask,
)
)
Expand All @@ -302,7 +302,7 @@ private fun calculateProgressVectorData(
density: Float,
) {
val strokeWidth = style.node_style.stroke.stroke_weight.toUniform() * density
val discretizedMeterValue = meterValue.coerceDiscrete(data.discrete, data.discreteValue)
val discretizedMeterValue = meterValue.coerceDiscrete(data.discrete, data.discrete_value)

// Get full length of path
var pathLen = 0f
Expand Down Expand Up @@ -357,14 +357,14 @@ internal fun ContentDrawScope.render(
// Check if there is meter data for a dial/gauge/progress bar
if (style.node_style.meter_data.isPresent) {
when (val meterData = style.node_style.meter_data.get()) {
is MeterData.rotationData -> {
is MeterData.RotationData -> {
val rotationData = meterData.value
if (rotationData.enabled) {
overrideTransform =
calculateRotationData(rotationData, meterValue, style, density)
}
}
is MeterData.progressBarData -> {
is MeterData.ProgressBarData -> {
val progressBarData = meterData.value
if (progressBarData.enabled) {
val progressBarSizeTransform =
Expand All @@ -379,7 +379,7 @@ internal fun ContentDrawScope.render(
overrideTransform = progressBarSizeTransform.second
}
}
is MeterData.progressMarkerData -> {
is MeterData.ProgressMarkerData -> {
val progressMarkerData = meterData.value
if (progressMarkerData.enabled) {
overrideTransform =
Expand All @@ -393,14 +393,14 @@ internal fun ContentDrawScope.render(
)
}
}
is MeterData.arcData -> {
is MeterData.ArcData -> {
val arcData = meterData.value
if (arcData.enabled) {
shape = calculateArcData(arcData, meterValue, shape)
customArcAngle = true
}
}
is MeterData.progressVectorData -> {
is MeterData.ProgressVectorData -> {
// If this is a vector path progress bar, save it here so we can convert it to a
// set of path instructions and render it instead of the normal stroke.
if (meterData.value.enabled) progressVectorMeterData = meterData.value
Expand Down Expand Up @@ -633,14 +633,14 @@ internal fun ContentDrawScope.squooshShapeRender(
// Check if there is meter data for a dial/gauge/progress bar
if (style.node_style.meter_data.isPresent) {
when (val meterData = style.node_style.meter_data.get()) {
is MeterData.rotationData -> {
is MeterData.RotationData -> {
val rotationData = meterData.value
if (rotationData.enabled) {
overrideTransform =
calculateRotationData(rotationData, meterValue, style, density)
}
}
is MeterData.progressBarData -> {
is MeterData.ProgressBarData -> {
val progressBarData = meterData.value
if (progressBarData.enabled) {
val progressBarSizeTransform =
Expand All @@ -655,7 +655,7 @@ internal fun ContentDrawScope.squooshShapeRender(
overrideTransform = progressBarSizeTransform.second
}
}
is MeterData.progressMarkerData -> {
is MeterData.ProgressMarkerData -> {
val progressMarkerData = meterData.value
if (progressMarkerData.enabled) {
overrideTransform =
Expand All @@ -669,14 +669,14 @@ internal fun ContentDrawScope.squooshShapeRender(
)
}
}
is MeterData.arcData -> {
is MeterData.ArcData -> {
val arcData = meterData.value
if (arcData.enabled) {
shape = calculateArcData(arcData, meterValue, shape)
customArcAngle = true
}
}
is MeterData.progressVectorData -> {
is MeterData.ProgressVectorData -> {
// If this is a vector path progress bar, save it here so we can convert it to a
// set of path instructions and render it instead of the normal stroke.
if (meterData.value.enabled) progressVectorMeterData = meterData.value
Expand Down
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
8 changes: 8 additions & 0 deletions proto/definition/plugin/meter_data.proto
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,13 @@ message ProgressMarkerMeterData {
float end_y = 8;
}

// Schema for progress vector data that we write to serialized data
message ProgressVectorMeterData {
bool enabled = 1;
bool discrete = 2;
float discrete_value = 3;
}

// A container message that holds one of the meter data types (rotation, arc,
// progress bar, or progress marker).
message MeterData {
Expand All @@ -76,5 +83,6 @@ message MeterData {
ArcMeterData arc_data = 2;
ProgressBarMeterData progress_bar_data = 3;
ProgressMarkerMeterData progress_marker_data = 4;
ProgressVectorMeterData progress_vector_data = 5;
}
}
Binary file not shown.

0 comments on commit 5733ea3

Please sign in to comment.