(I was going to answer a big mail but my observations/concerns are mostly 
targeted by Norbert and Stef)

> On 27 Jan 2017, at 10:49, Tudor Girba <tu...@tudorgirba.com> wrote:
> 
> Hi,
> 
> Thanks for the detailed analysis.
> 
> In summary, Cairo+Pango+SDL2 provide enough support to get a subset of Sparta 
> working that would be equivalent with the Athens that we already have. In 
> other words, with such a backend, when we would tell Sparta to use a blur 
> effect, it will simply do nothing and the image environment can continue to 
> work as it does now.
> 
> I hope that everyone agrees that this is a reasonable fallback scenario that 
> we can count on. And I think this is in line with what Stef was saying as 
> well.
> 
> With this in mind, we should also remember that the Moz2D backend works now 
> which means that we can now focus on Brick to close the loop and provide a 
> complete stack that more people can start utilizing, and we can come back to 
> the alternative backend later.
> 
> Does this path to action address the worry related to the future of Sparta 
> backends?

thanks Doru…. I think having a base system that works in all scenarios (even if 
we miss some features) and is easy to maintain is important.

Then you can have a different backend for complex stuff (is more or less the 
same about Ronie’s Wooden… I love to have the possibility of doing the things 
Ronie do with that, but I would never target to build my UI system on top of 
it). 
Even with this simplification, I would like to know why you choose to strip a 
library from a project instead testing, for example Skia (I know, Skia api is 
not stable, and is C++ and C bindings are still unstable), but well… others 
maybe. 

And some precisions: 

- SDL2 do allow transparent windows and windows without decorations. 
https://wiki.libsdl.org/SDL_SetWindowOpacity 
<https://wiki.libsdl.org/SDL_SetWindowOpacity>, 
https://wiki.libsdl.org/SDL_CreateWindow 
<https://wiki.libsdl.org/SDL_CreateWindow> (and the flags section)
- Cairo do allow acceleration, we need to compile it with right backend. 
        - I disagree is a dead technology. Instead, is a very mature 
technology… that’s why forum is not too active (even if as far as I see, it was 
never too active). Yes, maybe is not in the hype, but is cool and allow us to 
do very nice things.
- examples on images are slow because of how they are programmed, not because 
of cairo :)

cheers!
Esteban

ps: instead “not doing anything” non-suported-operations could throw a 
notification (a silent one)? 

> 
> Cheers,
> Doru
> 
> 
> 
>> On Jan 26, 2017, at 11:45 PM, Aliaksei Syrel <alex.sy...@gmail.com> wrote:
>> 
>> Hi
>> 
>> (My previous email was not a joke, I don't try to troll anyone. Let tolls do 
>> their job in other places)
>> Let's forget Moz2D for a moment :) Imagine that it does not exist. It was 
>> done just for fun and is even not in pharo repo. 
>> (https://github.com/syrel/Moz2D). We needed something that works and it was 
>> made investing just a few months of time of a single anonymous student 
>> during summer exams session and vacations.
>> 
>> I would like to start maybe one of the most important discussion that will 
>> influence Pharo and will dictate how system will look like in a few years. I 
>> invite everyone to join this discussion, especially board and consortium 
>> members. Because here is where business starts.
>> 
>> There are some real questions:
>>      • Do we need Bloc or Morphic2 or %name your favourite framework%?
>>      • How advanced and modern do you want it to be?
>>      • What technology stack do we want to use for our new graphical 
>> framework?
>>      • What platforms and operating systems do we want to support?
>>      • How flexible technology stack should be? (some parts may change in 
>> the future)
>>      • Who will pay for it?
>>      • How many engineers can community afford?
>>      • Do you know how much other systems invest in graphical frameworks?
>>      • It is not a science project, isn't it?
>> Let me first put my two cents in.
>> 
>> Low-level UI framework (without widgets) consists of multiple parts:
>>      • Vector graphics library to render shapes (fill, stroke, path builder, 
>> composition and blending operators)
>>      • Font service library (to support different font formats and collect 
>> information about local fonts installed in the system)
>>      • Text layout engine (this is where glyph positioning magic happens, 
>> link above too)
>>      • Text shaping engine (for high quality text rendering, to understand 
>> the problem => http://behdad.org/text/)
>>      • Complex script library (to support ligatures, split glyphs and other 
>> UTF8 stuff, remember 
>> https://github.com/minimaxir/big-list-of-naughty-strings)
>>      • Image processing library (for various image effects, like gaussian 
>> blur, morphology filter, gamma, displacement map, just to name a few)
>>      • Hardware acceleration. Software rendering is nice, however, modern 
>> UIs are full of fancy stuff that require hardware acceleration.
>>      • Window and Event management library. With support of borderless and 
>> semi-transparent windows + good support of touchpad.
>>      • Custom written "Glue" library that allows all components to work 
>> together. Since modern libs are implemented in C++ we would need to 
>> implement C wrapper and a lot of integration tests.
>>      • Make the whole beast cross platform.
>> 
>> Did I miss something?
>> 
>> Here are some modern technologies commonly used for mentioned parts:
>>      • Skia, Direct2D, CoreGraphics, Cairo
>>      • Fontconfig, Freetype2
>>      • HarfBuzz
>>      • Pango, OpenType
>>      • Graphite2, FriBidi
>>      • Imagemagic, SVG filters libraries
>>      • Vulkan, OpenGL
>>      • wxWidgets, QT, GTK, SDL2
>>      • todo
>>      • todo
>> Luckily Pango covers bullets 2 - 5. It indeed sounds like a great idea!
>> 
>> Let's assume that we stop on Cairo + Pango. According to pango.com
>> 
>> The integration of Pango with Cairo (http://cairographics.org/) provides a 
>> complete solution with high quality text handling and graphics rendering.
>> 
>> According to the this potential technology stack we will have:
>>      • Cairo for vector graphics and rendering of basic shapes
>>      • Pango for text rendering
>>      • SDL2 for window and events management
>> What we will not get:
>>      • Support of filters; Cairo does not support gaussian blur. 3D 
>> transformations, we will not be able to not implement card flip animation. 
>> Never reach the same performance if using platform native frameworks (e.g. 
>> Direct2D on windows). Cairo will not die, but there is zero progress.
>>      • Vulkan support. Never with cairo. Pure OpenGL too (try to compile 
>> cairo-gl on mac, good luck!) There is a way to compile it with quartz 
>> support. As of version 2.7.9, XQuartz does not provide support for 
>> high-resolution Retina displays to X11 apps, which run in pixel-doubled mode 
>> on high-resolution displays. 
>> (https://bugs.freedesktop.org/show_bug.cgi?id=92777).
>>      • Borderless or transparent window with SDL2. Also, did you notice that 
>> sdl2 window turns black/white while resizing? There is no way to get a 
>> continuous window resize event with SDL2 
>> (https://bugzilla.libsdl.org/show_bug.cgi?id=2077). The issue is that events 
>> stop firing while user is resizing a window because main thread is blocked. 
>> Bug is already 3 years old. Indeed SDL2 is used for games, however how often 
>> do gamers resize game window?
>>      • Stateless API. Must have for a graphical framework like Bloc where 
>> canvas state is not shared between visual elements. It means that while 
>> rendering users must not clean the state of a canvas after every draw call.
>> Bloc is not my or Glenn's or Doru's personal property. We suggest, you 
>> decide. It would be great if community could invest money and time in a 
>> working and appropriate solution.
>> 
>> P.S. If we would not care, we would agree with you instantly and even not 
>> bothered ourselves trying to spend time on finding cheap solution for such a 
>> complex problem.
>> 
>> P.P.S Sorry for a long email :)
>> 
>> Cheers,
>> Alex
>> 
>> On 26 January 2017 at 21:10, Aliaksei Syrel <alex.sy...@gmail.com> wrote:
>> Hi,
>> 
>> Then we will need Cairo + SDL2 (that does not work for us) + Freetype2 (for 
>> fonts) + Graphite (glyphs shaping technology in order to use them within 
>> vector graphics engine) + cross platform OpenGL / Vulkan context/device 
>> provider for hardware acceleration + implement Filters for effects (blur, 
>> lights, color matrix filters, etc...).
>> 
>> Without all those technologies bloc WILL progress, from 80's to 00's. Still 
>> decades behind :)
>> 
>> Cheers
>> 
>> On Jan 26, 2017 20:40, "stepharong" <stephar...@free.fr> wrote:
>> I think that instead of investigating gtk (yet another library to bind and 
>> carry around),
>> it would be smarter to have Sparta back-end using an accelerated Cairo + 
>> pango.
>> Why? Because
>>        - For example Cairo will not disappear in the future (here you will 
>> tell me that it does not have all the full
>>        features.... I think that Bloc should deliver Brick first and focus 
>> on this because else it will stay a nice
>>        experiment.)
>>        - We do not have bench with an accelerated compiled version so no 
>> idea if this is good enough.
>>        - Cairo is about 1.5 mb vs 20Mb and it is packaged.
>> 
>> I share the concerns of Esteban about the maintenance of such Mozz2d 
>> bundling and he was pretty
>> clear with me, he will not maintain it nor take any responsibility about 
>> pharo using it.
>> 
>>        So having a Cairo Sparta back-end would be a smart move.
>> Stef
>> 
>> 
>> 
>> 
>> 
>> Hi,
>> 
>> Thank you for the intensive set of issues you raised during the Bloc 
>> presentation. I think it is worthwhile addressing them more thoroughly, so 
>> let me start with the issue that seemed to have caused the most worries: 
>> Sparta & Moz2D.
>> 
>> Please keep in mind that while I am involved to some extent in Bloc, the 
>> real credits for the current state go to Glenn and Alex.
>> 
>> Moz2D (https://github.com/mozilla/moz2d, 
>> https://wiki.mozilla.org/Platform/GFX/Moz2D) offers an advanced backend and 
>> using it puts us on par with the rendering speed of a web browser, which is 
>> a significant added value over what we have now.
>> 
>> However, as it was noted, it does come with a cost due to the fact that it 
>> is not available as standalone with only the features we are interested in. 
>> The vector graphics part is actually buildable out of the box. However, the 
>> text support needs to be extracted out of Moz2D, and this is where the 
>> patching scripts are used. The patches are there only for compilation 
>> purposes and not for features and they are applied automatically. You can 
>> see it here:
>> https://github.com/syrel/Moz2D
>> 
>> Alex updated recently the Moz2D version and it worked without problems. Of 
>> course, future changes in Moz2D might imply changes in this script as well, 
>> and this implies that we will need to maintain that script. And we could 
>> imagine applying these patches on the trunk of Moz2D to see if they work, 
>> and we can also imagine engaging with the Moz2D owners to see if we can find 
>> a middle ground.
>> 
>> Now, let’s put this into perspective. We are currently using Athens and the 
>> Cairo backend. While Cairo is provided as a standalone library it has not 
>> seen significant advances since Mozzila shifted its focus towards Moz2D. So, 
>> sticking with it might not be an ideal strategy either.
>> 
>> Furthermore, just like Athens, Sparta is an abstraction that allows us to 
>> switch the underlying backend should we need to. Until now we did not find a 
>> cross-platform backend that is as advanced and complete as Moz2D, but there 
>> is no reason to think that none other will appear in the future. Skia is an 
>> alternative but it is only a vector graphic engine without text support, so 
>> using it would imply to have another library for the text support.
>> 
>> Sparta also comes with a reasonable set of tests that is aimed at testing 
>> the basic Moz2D functionality to make sure that the assumptions on top of 
>> which Sparta is built are correct.
>> 
>> All in all, I think that the current situation is not ideal, but there is 
>> already enough engineering in place to actually make it work. And I 
>> definitely think that the potential it opens is rather significant.
>> 
>> And, if more people look at the scripts, we might find even better and 
>> cheaper ways to express it.
>> 
>> Cheers,
>> Doru
>> 
>> 
>> --
>> www.tudorgirba.com
>> www.feenk.com
>> 
>> "We cannot reach the flow of things unless we let go."
>> 
>> 
>> 
>> 
>> 
>> 
>> 
>> -- 
>> Using Opera's mail client: http://www.opera.com/mail/
>> 
>> 
> 
> --
> www.tudorgirba.com
> www.feenk.com
> 
> "Every thing should have the right to be different."
> 
> 
> 
> 
> 

Reply via email to