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

🎨 Add support for P3 color space #115

Merged
merged 1 commit into from
May 16, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion src/converter/context.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,10 @@ def find_symbols(node: dict) -> List[Sequence[int]]:


class Context:
def init(self, components_page: Optional[dict], id_map: Dict[Sequence[int], dict]) -> None:
def init(
self, components_page: Optional[dict], id_map: Dict[Sequence[int], dict], color_space: str
) -> None:
self._color_space = color_space
self._sketch_components: Dict[Sequence[int], Swatch] = {}
self.symbols_page = None
self._node_by_id = id_map
Expand All @@ -30,6 +33,9 @@ def init(self, components_page: Optional[dict], id_map: Dict[Sequence[int], dict
# width -> (x, y)
self._symbol_position = {0: [0, 0]}

def color_space(self) -> int:
return 2 if self._color_space == "DISPLAY_P3" else 1

def component(self, cid: Sequence[int]) -> Tuple[dict, Optional[Swatch]]:
fig_component = self.fig_node(cid)

Expand Down
7 changes: 6 additions & 1 deletion src/converter/convert.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,12 @@ def convert_fig_tree_to_sketch(
# We should either bring the fonts to the same indexed_components to pass
# them as parameter or move the indexed components to the component file
# and store there the components, for consistency purposes
context.init(components_page, id_map)
if "documentColorProfile" in fig["document"]:
color_space = fig["document"]["documentColorProfile"]
else:
color_space = "sRGB"

context.init(components_page, id_map, color_space)

# Convert all normal pages
sketch_pages: List[Page] = convert_pages(fig_pages, output)
Expand Down
2 changes: 1 addition & 1 deletion src/converter/document.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ def convert(pages: List[Page], output_zip: zipfile.ZipFile) -> dict:
"gradients": [],
"exportPresets": [],
},
"colorSpace": 1,
"colorSpace": context.color_space(),
"currentPageIndex": 0,
"foreignLayerStyles": [],
"foreignSymbols": [],
Expand Down
2 changes: 1 addition & 1 deletion tests/converter/test_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ def test_gradient_background(self, warnings):

@pytest.fixture
def style_overrides(monkeypatch):
context.init(None, {(0, 1): FIG_TEXT_STYLE, (0, 2): FIG_COLOR_STYLE})
context.init(None, {(0, 1): FIG_TEXT_STYLE, (0, 2): FIG_COLOR_STYLE}, "DISPLAY_P3")


@pytest.mark.usefixtures("style_overrides")
Expand Down
2 changes: 1 addition & 1 deletion tests/converter/test_image.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

def test_corrupted_images(warnings):
figtree, id_map = fig2tree.convert_fig("tests/data/broken_images.fig", None)
context.init(None, id_map)
context.init(None, id_map, "DISPLAY_P3")
figpage = figtree["document"]["children"][0]
page = tree.convert_node(figpage, "DOCUMENT")

Expand Down
6 changes: 5 additions & 1 deletion tests/converter/test_instance.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,11 @@

@pytest.fixture
def symbol(monkeypatch):
context.init(None, {(0, 3): FIG_SYMBOL, (0, 1): FIG_TEXT, (0, 2): FIG_RECT, (1, 9): FIG_TEXT})
context.init(
None,
{(0, 3): FIG_SYMBOL, (0, 1): FIG_TEXT, (0, 2): FIG_RECT, (1, 9): FIG_TEXT},
"DISPLAY_P3",
)
context._component_symbols = {(0, 3): False}


Expand Down
5 changes: 3 additions & 2 deletions tests/converter/test_prototype.py
Original file line number Diff line number Diff line change
Expand Up @@ -74,17 +74,18 @@ def canvas(monkeypatch):
(0, 4): FIG_ARTBOARD,
(0, 5): FIG_OVERLAY,
},
"DISPLAY_P3",
)


@pytest.fixture
def overlay(monkeypatch):
context.init(None, {(0, 5): FIG_OVERLAY})
context.init(None, {(0, 5): FIG_OVERLAY}, "DISPLAY_P3")


@pytest.fixture
def manual_overlay(monkeypatch):
context.init(None, {(0, 6): FIG_MANUAL_OVERLAY})
context.init(None, {(0, 6): FIG_MANUAL_OVERLAY}, "DISPLAY_P3")


@pytest.mark.usefixtures("canvas")
Expand Down
2 changes: 1 addition & 1 deletion tests/converter/test_shape_path.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ def test_arrow_override(self):

def test_complex_vector():
figtree, id_map = fig2tree.convert_fig("tests/data/vector.fig", None)
context.init(None, id_map)
context.init(None, id_map, "DISPLAY_P3")
figpage = figtree["document"]["children"][0]
page = tree.convert_node(figpage, "DOCUMENT")
vector = page.layers[0].layers[0]
Expand Down
2 changes: 1 addition & 1 deletion tests/converter/test_symbol.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@

@pytest.fixture
def empty_context(monkeypatch):
context.init(None, {})
context.init(None, {}, "DISPLAY_P3")


def test_rounded_corners(no_prototyping, empty_context):
Expand Down
Loading