Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Explicitly distinguish design and user coordinates and locations #47

Closed
wants to merge 1 commit into from

Conversation

rsheeter
Copy link
Contributor

@rsheeter rsheeter commented Dec 11, 2022

Introduce explicit user vs design coord and location types and begin to use them in the right places. Conversion is currently entirely bogus, and explicitly noted so.

Intent is that in the end we will explicitly move between them using the mapping type added in #46. I current imagine building a design:user map and storing in StaticMetadata.

Builds on #43. Step toward #22.

@rsheeter rsheeter changed the base branch from main to glyphs December 11, 2022 23:25
@rsheeter rsheeter changed the base branch from glyphs to gir December 11, 2022 23:25
@rsheeter rsheeter changed the title [WIP] Distinct types for coords Explicitly distinguish design and user coordinates and locations Dec 12, 2022
@rsheeter rsheeter marked this pull request as ready for review December 12, 2022 00:07
@anthrotype
Copy link
Member

I current imagine building a design:user map

As I noted in #46, in designspace axes element, the map goes the other way around: i.e. from user to design

@@ -60,7 +59,7 @@ pub type DesignSpaceLocation = BTreeMap<String, OrderedFloat<f32>>;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
pub struct Glyph {
pub name: String,
pub sources: HashMap<DesignSpaceLocation, GlyphInstance>,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

actually I think for these we don't want UserSpaceLocation. Sources in designspace are always in design-space, not user-space. Instances can avail themselves of being optionally defined in user-space, but sources (aka the designer's "masters") are always design locations because that's what the designer works with, and nobody requested to define sources with user-space location so far.

So I don't think it helps anything to have Glyph::sources keyed by user-space location.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had in mind to leave designspace behind when creating IR and work exclusively in user and normalized space. Is that a bad idea?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reminder for self, per f2f I believe the user of internal coordinates was acceptable here.

@@ -50,7 +53,7 @@ impl Cache {
fn new(
global_metadata_sources: StateSet,
glyph_names: HashSet<String>,
locations: HashMap<PathBuf, Vec<DesignSpaceLocation>>,
locations: HashMap<PathBuf, Vec<UserSpaceLocation>>,
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

so yeah that's incorrect, the locations of sources in designspace (in this particular case, locations contains the location of each glif file) are in design-space coordinates, not user-space

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My rationale was that for IR generation the userspace location would be what you want?

@rsheeter
Copy link
Contributor Author

I think I've now changed this so much it makes sense to make a new PR against #56

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants