Eirik wrote:
> > Sooner or later, the XML parsing architecture will be loaded anyway, no?
> > Before the user can do anything useful with NetBeans?

Not really. You can connect to DB without parsing XML. You can open a 
TypeScript project without parsing XML. You can open a Gradle project without 
parsing an XML.

While on performance team we fought hard to avoid - let's load all my 
functionality on startup attitude - no user of NetBeans is using all NetBeans 
functionality.

True, when working with Maven, one needs to load the XML in anyway.

> Well I like the idea of using annotation processing to define SVG-s and
> place them inside a generated catalog.

Just like there are public/private classes/package, there shall be public/
private icons. The fact that some module has an icon doesn't mean other 
modules can use it. One has to export that icon explicitly.

> The implementation detail, whether we shall create some cached png-s in
> compile time or, compile them into Java Graphich2D calls is indifferent
> to me, probably it would just depend how much effort we can put into this.

Recording/replaying Graphics2D calls has been done in the past by numerous 
projects. It's just a matter of which one to choose. Btw. Can you cache PNGs 
at compile time? As Eirik wrote:

> > It would be much easier to just generate PNG images from the SVGs, the
> > first time they are used. On any given computer, only one or two scalings
> > are going to be in use (e.g. 2x on all MacOS machines, and perhaps 1x for
> > an external monitor). 

and that seems to me like request to cache the PNGs at runtime. That would be 
a different story.


> The one problem with @StaticResource is currently it does not take
> account the module dependencies. I do not know if that's a feature or
> just a shortcoming of the implementation.

@StaticResource verifies that a resource is on your compilation classpath. That 
means it takes into account module dependencies. What exactly is the problem?

-jt

> It could be also fine for me if we do not move the existing images  to a
> central catalog by altering the ImageUtilities.getIcon(). We update the
> module to use the catalog whenever we find the time for that.
> 
> On 9/23/20 9:13 AM, Eirik Bakke wrote:
> >> SVG is a huge language, which incorporates large portions of CSS. No way
> >> you can get all SVGs to display properly this way.> 
> > OK, I take that back, you could intercept calls at the Graphics2D API
> > level. But *so* much easier, and more reliable, to just cache PNG
> > versions...
> > 
> > E
> > 
> > -----Original Message-----
> > From: Eirik Bakke <[email protected]>
> > Sent: Wednesday, September 23, 2020 12:04 PM
> > To: [email protected]
> > Subject: RE: IDE Icon Registry (The SVG Story Continues) (AKA What about
> > to clean up some mess)> 
> >> That obviously has to slow NetBeans startup down.
> > 
> > Sooner or later, the XML parsing architecture will be loaded anyway, no?
> > Before the user can do anything useful with NetBeans?
> > 
> > Isn't it a lot better to have loading happen during startup, while the
> > user is already checking their email, fetching their cup of coffee etc.?
> > Isn't this why we have "warmup" tasks running to initialize the editor
> > infrastructure and so on early, before the user actually starts
> > interacting with the IDE?> 
> >> Let's process the SVG icons during compile time and turn them into Java
> >> classes.> 
> > It would be much easier to just generate PNG images from the SVGs, the
> > first time they are used. On any given computer, only one or two scalings
> > are going to be in use (e.g. 2x on all MacOS machines, and perhaps 1x for
> > an external monitor). See
> > https://issues.apache.org/jira/browse/NETBEANS-3469 .> 
> >> The class would contain all the instructions `fillRect`, `arc`, `lineTo`,
> >> etc.  in the form of Java code.> 
> > SVG is a huge language, which incorporates large portions of CSS. No way
> > you can get all SVGs to display properly this way.
> > 
> > -- Eirik
> > 
> > 
> > -----Original Message-----
> > From: Jaroslav Tulach <[email protected]>
> > Sent: Wednesday, September 23, 2020 6:59 AM
> > To: Apache NetBeans <[email protected]>
> > Cc: Laszlo Kishalmi <[email protected]>
> > Subject: Re: IDE Icon Registry (The SVG Story Continues) (AKA What about
> > to clean up some mess)
> > 
> > XML is bad. Does it mean that SVG is bad as well?
> > 
> > XML, as implemented in Java with Xerces parser is a massive piece of
> > software. It composes of about three thousand of classes. Does our
> > current infrastructure for rendering SVG uses Xerces? That means we need
> > to load all the infrastructure when drawing first SVG icon. That
> > obviously has to slow NetBeans startup down.
> > 
> > Once upon time an XML parser was necessary to start NetBeans (think of
> > `layer.xml` files, of `config/Modules/*.xml` files, etc.). However when I
> > was working on the NetBeans performance team, we eliminated all of that
> > with caches. The goal was: No XML parsing on (second and subsequent)
> > startup.
> > 
> > Now, when we are switching to SVGs, we are reintroducing the Xerces
> > overhead again. Can we avoid it?
> > 
> > Here is a plan which, by a chance, also addressed the IDE Icon registry
> > problem. Let's process the SVG icons during compile time and turn them
> > into Java classes. Such technologies (based on Batik) exist (for example
> > http:// ebourg.github.io/flamingo-svg-transcoder/) and it is just a
> > matter or integrating them into our build system. Let's imagine an
> > annotation processor to process @SVG annotation:
> > 
> > ```
> > @SVG(resource="resources/wait.svg", className="GenericIcons")
> > @SVG(resource="resources/wait-too-long.svg", className="GenericIcons")
> > package org.openide.util; ```
> > 
> > That would generate a class like
> > 
> > ```java
> > public GenericIcons {
> > 
> >    private GenericIcons() {}
> >    public static ImageIcon wait() {...}
> >    public static ImageIcon waitTooLong() { ... } ```
> > 
> > The class would contain all the instructions `fillRect`, `arc`, `lineTo`,
> > etc. in the form of Java code. The SVG files would be removed from our
> > JARs. E.g. we would immediately solve the problem of comments, long
> > meta-data and XML parsing. All the icons would be available as Java code,
> > ready to run and ready to be GCed once no icon from a generated class is
> > in use.
> > 
> > In addition to that this class would hook into existing resource oriented
> > API, so all icons could be referred via their location. Moreover we could
> > also implement Tim's suggestion to hook into UIDefault resources with
> > 
> > ```java
> > @SVG(uid={"wait-icon"})
> > ```
> > 
> > The `GenericIcons` class could be in private packages, or it could be
> > placed into public packages. Then it would form an API other modules can
> > use[1] and could avoid the duplication of icons.
> > 
> > Would that work? If so, and we can eliminate all the XML parsing on
> > startup, I'd be in support of some form of SVG icon registry.
> > 
> > Best regards.
> > -jt
> > 
> > PS:  There is `@StaticResource` annotation currently, so there is no need
> > to copy `wait` icon 30 times at various places even now...> 
> > Dne úterý 22. září 2020 8:15:28 CEST, Laszlo Kishalmi napsal(a):
> >> Dear all,
> >> 
> >> We have about 4200 icons/images in the repository. most probably many
> >> of them are duplicates, triplicates, multiplicates copied to different
> >> locations.
> >> 
> >> Just in a recent PR, Eirik added 34 new svg icons to 192 places.
> >> (https://github.com/apache/netbeans/pull/2387)
> >> 
> >> We have 28 instances of wait.gif (and 4 wait.png).
> >> 
> >> I think before jumping into the svg era, we need to stop, look around
> >> and think. Could we do better?
> >> 
> >> I think, yes, there is a demand for a common icon catalog. Or more
> >> icon catalogs (per cluster?)
> >> 
> >> I've done a very raw sketch to get the base of a discussion. It is a
> >> raw Idea I have in my mind:
> >> https://github.com/apache/netbeans/pull/2388
> >> 
> >> My two main goals:
> >>    - Move reusable icons to a centralized place catalog. I'd imagine
> >> 
> >> these catalogs as public java Enums
> >> 
> >>    - Provide backward compatibility based on icon resource names
> >> 
> >> Feedbacks/requirements/insights are welcome!
> >> 
> >> BTW, I'm completely Ok if we do not do anything about this. I just
> >> wanted to draw some attention on this issue.
> >> 
> >> --
> >> 
> >> Laszlo Kishalmi
> >> 
> >> 
> >> 
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: [email protected]
> >> For additional commands, e-mail: [email protected]
> >> 
> >> For further information about the NetBeans mailing lists, visit:
> >> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> > 
> > For further information about the NetBeans mailing lists, visit:
> > https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> > 
> > 
> > 
> > B KKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKCB
> >  [  X  ܚX KK[XZ[> 
> >   ] ][  X  ܚX P ] X[ ˘\X K ܙ B  ܈Y][ۘ[  [X[  K[XZ[
> >   ] Z[ ] X[ ˘\X K ܙ B B  ܈ \ \ [  ܛX][ۈX  ]H ] X[ 
> >   XZ[[  \   \ ] B ΋    Z K \X K ܙ   ۙ Y[  K \ ^KӑU PS  
> >   XZ[[   \  B B B B> 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> > 
> > For further information about the NetBeans mailing lists, visit:
> > https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
> 
> For further information about the NetBeans mailing lists, visit:
> https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists





---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists



Reply via email to