Giter VIP home page Giter VIP logo

robo-cjk's People

Contributors

2008foison avatar ambuc avatar arnaud-ch avatar blackfoundry avatar davelab6 avatar gaetanbaehr avatar horasio avatar jbmorizot avatar jeremiehornus avatar justvanrossum avatar lylbaby avatar nate303 avatar ruosihuang avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

robo-cjk's Issues

Rename DC or AE glyph should propagate to all parent glyphs

As discussed during the meeting today, this isn't easy.

In my view, this is what should happen, when a DC or AE gets renamed:

  1. Check which parent glyphs use the DC/AE being renamed
  2. Lock all involved glyphs. If locking fails: bail out, don't rename (report who owns the locks)
  3. Check that the set calculated in step 1 is still the same. If no: unlock and bail out
  4. Rename the DC/AE, and fix the references in all the parent glyphs
  5. Unlock all

Should this be done at the RoboCJK client level, or is it a task that can be delegated to the server? The latter would be much better for performance.

My assuption: renaming DCs or AEs should be rare, therefore it's an acceptable tradeoff that the procedure to do it is a little slow or cumbersome.

Cc @fabiocaccamo @GaetanBaehr @JeremieHornus @jbmorizot

Also relates to #23: renaming should be impossible to do accidentally, and should require an obnoxious comfirmation dialog.

Renaming a Character Glyph fails

RoboCJK renames a glyph by:

  • creating a new glyph with the old data
  • deleting the old glyph

The last step currently fails, because the lock cannot be acquired. After this the glyph exists twice in the database.

From the Python output window (when trying to rename uni0065 to e):

uni0065 e
Couldn't acquire the lock for glyph uni0065

Deep components editor

Add variations for DC

  • when find that the extreme shapes of the DC changes too much and need to add too many layers to achieve it, divide them into several variates

RoboCJK Next Milestones

  • Rethink the GUI for more flexibility of use (get rid of the compulsory 3 levels AE DC CG)
  • Make the collaborative tools (GIT, SQL) more general and independant from RoboCJK, but enable their use in RoboCJK
  • Use format closer to traditionnal UFO (with added dedicated libs)
  • Enable easier and more intuitive use of non-linear (beziers) interpolations
  • Include font compiler (VarC, COLRv1…)
  • SQL mode: enable notifications between users (i.e. Mosquito)
  • Enable better interactions with Hangul module and various glyph composition databases

Error when closing the main RoboCJK window

Steps to reproduce:

  • Fresh start of RF
  • Start RoboCJK with start.py
  • Login, choose project, choose font
  • Open a CG for editing
  • Close CG
  • Close main RoboCJK window

Closing the main RoboCJK window prints a double traceback, as seen below:

Whole session output:

hello
'glyphs_composition_database'
total to load 0.36855602264404297
download glyphs: 0.4906461238861084 seconds to download uni34D3
insert glyphs: 0.25344276428222656 seconds to insert 11
get locked-by: 0.0830538272857666 seconds to get locked-by for uni34D3
calculate preview: 0.38976573944091797 seconds to calculate preview of uni34D3
display glyph: 1.2327070236206055 seconds to display uni34D3
download glyphs: 0.5203819274902344 seconds to download uni34D3
insert glyphs: 0.28034400939941406 seconds to insert 11
download glyphs: 0.4242069721221924 seconds to download uni34D3
insert glyphs: 0.282210111618042 seconds to insert 11
download glyphs: 0.5314168930053711 seconds to download uni34D3
insert glyphs: 0.383991003036499 seconds to insert 11
3.346619129180908 to open a uni34D3
Unlocked glyphs: uni34D3
1.0351390838623047 to close uni34D3
Traceback (most recent call last):
  File "/Applications/RoboFont-3.5b.app/Contents/Resources/lib/python3.7/vanilla/vanillaWindows.py", line 604, in windowWillClose_
    self._alertBindings("close")
  File "/Applications/RoboFont-3.5b.app/Contents/Resources/lib/python3.7/vanilla/vanillaWindows.py", line 596, in _alertBindings
    value = callback(self)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/views/roboCJKView.py", line 935, in windowCloses
    self.currentFont.saveGlyph(self.currentGlyph)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/models/font.py", line 1075, in saveGlyph
    self.client.character_glyph_update(self.uid, glyph.name, xml)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/controllers/client.py", line 815, in character_glyph_update
    return self._api_call('character_glyph_update', params)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/controllers/client.py", line 113, in _api_call
    raise HTTPError(f"{response.status_code} {response_data['error']}")
controllers.client.HTTPError: 403 Forbidden - Character Glyph object must be locked by the current user.
Traceback (most recent call last):
  File "lib/doodleDelegate.pyc", line 96, in sendEvent_
  File "/Applications/RoboFont-3.5b.app/Contents/Resources/lib/python3.7/vanilla/vanillaWindows.py", line 604, in windowWillClose_
    self._alertBindings("close")
  File "/Applications/RoboFont-3.5b.app/Contents/Resources/lib/python3.7/vanilla/vanillaWindows.py", line 596, in _alertBindings
    value = callback(self)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/views/roboCJKView.py", line 935, in windowCloses
    self.currentFont.saveGlyph(self.currentGlyph)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/models/font.py", line 1075, in saveGlyph
    self.client.character_glyph_update(self.uid, glyph.name, xml)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/controllers/client.py", line 815, in character_glyph_update
    return self._api_call('character_glyph_update', params)
  File "/Users/just/code/git/BlackFoundry/robo-cjk/sources/controllers/client.py", line 113, in _api_call
    raise HTTPError(f"{response.status_code} {response_data['error']}")
controllers.client.HTTPError: 403 Forbidden - Character Glyph object must be locked by the current user.

Backwards compatibility code still needed?

I'm having trouble with the _initWithLib method on the CharacterGlyph class.

If certain lib keys aren't available it goes into backwards-compatibility mode, looking for lib keys we no longer use (but may exist in old data), and manages to silently clear a glyph that was perfectly fine in Fontra.

The glyph written to the DB by Fontra does not have these keys:

  • "robocjk.axes": the glyph doesn't have axes yet
  • `"robocjk.variationGlyphs": since there are no axes, it also doesn't have variations yet

This together triggers the observed behavior.

Glyphs never get reloaded once opened

If you open a glyph editor in RoboCJK, then close it, it will never reload the glyph from the server, so any change made by someone else will not be seen.

Scenario:

  • User A opens glyph G
  • User A closes glyph G
  • User B opens glyph G
  • User B edits glyph G
  • User B closes glyph G
  • User A opens glyph G
  • User A doesn't see B's changes
  • User A closes glyph G
  • User B's changes are now lost

add designspace.json

add the file accodring to the "font infos" to the project on the repo so that one can generate the VarC VF font

NLI tool in DC

  • hard to distinguish which handle controls which point

default DC naming

a newly created DeepComponent should be named following the required structure of RoboCJK:
DC_0000_00

Add UI + glyph.lib key to tell to not export a character

For example:

glyph.lib["robocjk.skipExport"] = True

A missing key would imply False, so export is "on" by default.

RoboCJK should have a checkbox UI for this, for character glyphs (it's not needed for DCs or AEs).

(This should have no consequences for the MySQL front-end.)

add Force-Push

Will push to git immediately without having to wait 10 minutes for the next synchronisation.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.