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 13, 2024
1 parent 2b00867 commit 168cb48
Show file tree
Hide file tree
Showing 46 changed files with 238 additions and 251 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
27 changes: 27 additions & 0 deletions crates/figma_import/src/figma_schema.rs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ use std::collections::HashMap;
use dc_bundle::definition::element::Color;
use dc_bundle::definition::element::FloatColor;
use serde::{Deserialize, Serialize};
use dc_bundle::definition::element;

// We use serde to decode Figma's JSON documents into Rust structures.
// These structures were derived from Figma's public API documentation, which has more information
Expand Down Expand Up @@ -1372,3 +1373,29 @@ pub struct VariablesResponse {
pub status: i32,
pub meta: VariablesMeta,
}

pub(crate) fn parse_path(path: &Path) -> Option<element::Path> {
let mut output = element::Path::new();
for segment in svgtypes::SimplifyingPathParser::from(path.path.as_str()) {
match segment {
Ok(svgtypes::SimplePathSegment::MoveTo { x, y }) => {
output.move_to(x as f32, y as f32);
}
Ok(svgtypes::SimplePathSegment::LineTo { x, y }) => {
output.line_to(x as f32, y as f32);
}
Ok(svgtypes::SimplePathSegment::CurveTo { x1, y1, x2, y2, x, y }) => {
output.cubic_to(x1 as f32, y1 as f32, x2 as f32, y2 as f32, x as f32, y as f32);
}
Ok(svgtypes::SimplePathSegment::Quadratic { x1, y1, x, y }) => {
output.quad_to(x1 as f32, y1 as f32, x as f32, y as f32);
}
Ok(svgtypes::SimplePathSegment::ClosePath) => {
output.close();
}
Err(_) => return None,
}
}
output.with_winding_rule(path.winding_rule.into());
Some(output)
}
2 changes: 1 addition & 1 deletion crates/figma_import/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ mod fetch;
mod figma_schema;
mod image_context;
pub mod reaction_schema;
pub mod toolkit_style;
pub mod meter_schema;
pub mod tools;
mod transform_flexbox;
mod variable_utils;
Expand Down
110 changes: 110 additions & 0 deletions crates/figma_import/src/meter_schema.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
// Copyright 2023 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

//! `toolkit_style` contains all of the style-related types that `toolkit_schema::View`
//! uses.
use crate::figma_schema;

use dc_bundle::definition::plugin::meter_data::MeterData;
use dc_bundle::definition::plugin::{
ArcMeterData, ProgressBarMeterData, ProgressMarkerMeterData, ProgressVectorMeterData,
RotationMeterData,
};
use serde::{Deserialize, Serialize};
use dc_bundle::definition::element::Path;
use dc_bundle::legacy_definition::view::view_style::ViewStyle;

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct RotationMeterJson {
pub enabled: bool,
pub start: f32,
pub end: f32,
pub discrete: bool,
pub discrete_value: f32,
}

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ArcMeterJson {
pub enabled: bool,
pub start: f32,
pub end: f32,
pub discrete: bool,
pub discrete_value: f32,
pub corner_radius: f32,
}

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProgressBarMeterJson {
pub enabled: bool,
pub discrete: bool,
pub discrete_value: f32,
#[serde(default)]
pub vertical: bool,
#[serde(default)]
pub end_x: f32,
#[serde(default)]
pub end_y: f32,
}

#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProgressMarkerMeterJson {
pub enabled: bool,
pub discrete: bool,
pub discrete_value: f32,
#[serde(default)]
pub vertical: bool,
#[serde(default)]
pub start_x: f32,
#[serde(default)]
pub end_x: f32,
#[serde(default)]
pub start_y: f32,
#[serde(default)]
pub end_y: f32,
}

// // Schema for progress vector data that we write to serialized data
// #[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
// #[serde(rename_all = "camelCase")]
// pub struct ProgressVectorMeterJson {
// pub enabled: bool,
// pub discrete: bool,
// pub discrete_value: f32,
// }

// Schema for progress vector data that we read from Figma plugin data
#[derive(Serialize, Deserialize, Clone, Debug, Default, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct ProgressVectorMeterJson {
pub enabled: bool,
pub discrete: bool,
pub discrete_value: f32,
pub paths: Vec<figma_schema::Path>,
}

// Schema for dials & gauges Figma plugin data
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum MeterJson {
ArcJson(ArcMeterJson),
RotationJson(RotationMeterJson),
ProgressBarJson(ProgressBarMeterJson),
ProgressMarkerJson(ProgressMarkerMeterJson),
ProgressVectorJson(ProgressVectorMeterJson),
}
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
62 changes: 0 additions & 62 deletions crates/figma_import/src/toolkit_style.rs

This file was deleted.

Loading

0 comments on commit 168cb48

Please sign in to comment.