Hi

*According to conclusion above, we will plan how to migrate to Cairo.*
We will need help with Pango.

Cheers,
Alex

On 26 January 2017 at 23:45, 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:
>
>    1. Do we need Bloc or Morphic2 or %name your favourite framework%?
>    2. How advanced and modern do you want it to be?
>    3. What technology stack do we want to use for our new graphical
>    framework?
>    4. What platforms and operating systems do we want to support?
>    5. How flexible technology stack should be? (some parts may change in
>    the future)
>    6. Who will pay for it?
>    7. How many engineers can community afford?
>    8. Do you know how much other systems invest in graphical frameworks?
>    9. 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:
>
>    1. Vector graphics library to render shapes (fill, stroke, path
>    builder, composition and blending operators)
>    2. Font service library (to support different font formats and collect
>    information about local fonts installed in the system)
>    3. Text layout engine (this is where glyph positioning magic happens,
>    link above too)
>    4. Text shaping engine (for high quality text rendering, to understand
>    the problem => http://behdad.org/text/)
>    5. Complex script library (to support ligatures, split glyphs and
>    other UTF8 stuff, remember https://github.com/mi
>    nimaxir/big-list-of-naughty-strings
>    <https://github.com/minimaxir/big-list-of-naughty-strings>)
>    6. Image processing library (for various image effects, like gaussian
>    blur, morphology filter, gamma, displacement map, just to name a few)
>    7. Hardware acceleration. Software rendering is nice, however, modern
>    UIs are full of fancy stuff that require hardware acceleration.
>    8. Window and Event management library. With support of borderless and
>    semi-transparent windows + good support of touchpad.
>    9. 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.
>    10. Make the whole beast cross platform.
>
>
> Did I miss something?
>
> Here are some modern technologies commonly used for mentioned parts:
>
>    1. Skia, Direct2D, CoreGraphics, Cairo
>    2. Fontconfig, Freetype2
>    3. HarfBuzz
>    4. Pango, OpenType
>    5. Graphite2, FriBidi
>    6. Imagemagic, SVG filters libraries
>    7. Vulkan, OpenGL
>    8. wxWidgets, QT, GTK, SDL2
>    9. todo
>    10. 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
>    <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/s
>    how_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/Platf
>>>> orm/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/
>>>
>>>
>

Reply via email to