Amen and +1.

On Tue, Dec 10, 2013 at 9:11 PM, Stephen F Northover
<steve.x.northo...@oracle.com> wrote:
> As I said before, it would be up to the application.  If it was critical
> that your application do something like embed Excel, then it could live with
> the limitations.  Perhaps you work in a company where you have a custom
> native control that you are already embedding in Swing and you want to
> migrate to FX.  These sorts of applications could live with the limitations.
>
> Steve
>
> On 2013-12-10 3:03 PM, Felix Bembrick wrote:
>>
>> Do you think it's either feasible or viable to the extent that a
>> successful implementation would not have the limitations such as lack of
>> transparency or be limited by the inability to apply Node transforms and
>> functionality to native controls?  I mean, such a large undertaking would
>> only made sense if the end result gave us something we don't have now and
>> that it worked well.
>>
>> Felix
>>
>>
>>
>> On 11 December 2013 06:57, Stephen F Northover
>> <steve.x.northo...@oracle.com <mailto:steve.x.northo...@oracle.com>> wrote:
>>
>>     I was very interesting in heavyweight integration a while back but
>>     could not get anyone very enthusiastic about it.
>>
>>     Steve
>>
>>
>>     On 2013-12-10 1:35 PM, Felix Bembrick wrote:
>>>
>>>     Stephen, why do you refer to this discussion as "academic"?
>>>
>>>     Felix
>>>
>>>
>>>
>>>     On 11 December 2013 05:20, Stephen F Northover
>>>     <steve.x.northo...@oracle.com
>>>     <mailto:steve.x.northo...@oracle.com>> wrote:
>>>
>>>         Yes, if it helps an application ship using the components and
>>>         technology they need to make their product successful.  In
>>>         any case, this discussion is academic.
>>>
>>>         Steve
>>>
>>>
>>>         On 2013-12-10 12:25 PM, Anthony Petrov wrote:
>>>
>>>             We have implemented HW/LW components mixing for AWT/Swing
>>>             in the past [1]. However, the feature is very limited (no
>>>             transparency support, etc.), and the limitations come
>>>             from native system capabilities that can't be worked
>>>             around easily.
>>>
>>>             Do we really want something limited like this in FX?
>>>
>>>             [1]
>>>
>>> http://www.oracle.com/technetwork/articles/java/mixing-components-433992.html
>>>
>>>             --             best regards,
>>>             Anthony
>>>
>>>             On 12/10/2013 06:14 AM, Stephen F Northover wrote:
>>>
>>>                 At one point,  I was very interested in seeing this
>>>                 happen but there
>>>                 wasn't the band width and resources.
>>>
>>>                 Steve
>>>
>>>                 On 2013-12-09 1:00 PM, Felix Bembrick wrote:
>>>
>>>                     What can we expect from the JavaFX team in this
>>>                     regard in the future?
>>>                     I know we have talked about mixing lightweight
>>>                     and heavyweight
>>>                     controls in the same context but is it going to
>>>                     happen? Is this
>>>                     planned for JFX9 perhaps? Is it *really* even
>>>                     feasible?
>>>
>>>                         On 10 Dec 2013, at 4:55, Stephen F Northover
>>>                         <steve.x.northo...@oracle.com
>>>                         <mailto:steve.x.northo...@oracle.com>> wrote:
>>>
>>>                         Today, you can only exercise the choice by
>>>                         writing native code and
>>>                         you face heavyweight / lightweight issues
>>>                         depending on the platform
>>>                         and API.
>>>
>>>                         Steve
>>>
>>>                             On 2013-12-09 12:31 PM, Felix Bembrick wrote:
>>>                             Stephen, I thoroughly agree that JavaFX
>>>                             is by far the best choice
>>>                             for non-native apps/widgets which is
>>>                             precisely my point. They are
>>>                             the kind of apps perfect for using JavaFX.
>>>
>>>                             But you refer to giving people the choice
>>>                             to go native where
>>>                             appropriate. How can I exercise that
>>>                             choice? Where is the support
>>>                             for native widgets in JavaFX?
>>>
>>>                             And isn't the real Holy Grail being able
>>>                             to mix native and
>>>                             non-native widgets in the same app with
>>>                             all features of Node being
>>>                             available to every widget, with all the
>>>                             effects and transforms, all
>>>                             the CSS/styling and with all the performance?
>>>
>>>                             Could JavaFX ever be such a toolkit?
>>>
>>>                                 On 10 Dec 2013, at 2:24, Stephen F
>>>                                 Northover
>>>                                 <steve.x.northo...@oracle.com
>>>                                 <mailto:steve.x.northo...@oracle.com>>
>>> wrote:
>>>
>>>                                 Here are my thoughts on the matter.
>>>                                  Give people the choice of
>>>                                 whether to use native or non-native
>>>                                 components.  In some
>>>                                 applications, everything will be
>>>                                 non-native.  In others, only the
>>>                                 main content area will be non-native
>>>                                 and the rest will be native.
>>>                                 In some mobile applications, perhaps
>>>                                 the preference pages will be
>>>                                 native and other parts will not.
>>>
>>>                                 JavaFX is the best choice for
>>>                                 non-native widgets and we are
>>>                                 committed to making it the best
>>>                                 toolkit all around.
>>>
>>>                                 Steve
>>>
>>>                                     On 2013-12-09 9:49 AM, Scott
>>>                                     Palmer wrote:
>>>                                     I agree that perfect sync with
>>>                                     native look and feels is not what
>>>                                     is required and not worth the
>>>                                     effort.  I do think though that
>>>                                     major concepts in the platform's
>>>                                     look and feel should (must!) be
>>>                                     followed or the user experience
>>>                                     is ruined.
>>>
>>>                                     The example of the order of the
>>>                                     ok and cancel buttons has been
>>>                                     brought up already.  But that
>>>                                     isn't even the most important one.
>>>
>>>                                     Things like shortcut keys. CTRL-C
>>>                                     to copy on windows, Command-C to
>>>                                     copy on Mac.  Standard menu
>>>                                     layouts, right-click behaviour and
>>>                                     standard context menus.  They
>>>                                     just have to be in the right place.
>>>                                     That they look different doesn't
>>>                                     matter as much. And this doesn't
>>>                                     mean that you can't try new ideas
>>>                                     for UI.  But basic things that
>>>                                     users expect to work should still
>>>                                     work. E.g. Command-Q on OS X
>>>                                     better quit the app :-)
>>>
>>>                                     As noted already with my
>>>                                     reference to Office and
>>>                                     browsers.. Fully
>>>                                     native apps can be non-compliant
>>>                                     with the platforms look and
>>>                                     feel.  So this isn't really a
>>>                                     Java-specific issue.
>>>
>>>                                     Scott
>>>
>>>                                         On Dec 9, 2013, at 4:24 AM,
>>>                                         Felix Bembrick
>>>                                         <felix.bembr...@gmail.com
>>>
>>> <mailto:felix.bembr...@gmail.com>>
>>>                                         wrote:
>>>
>>>                                         Spoiler: This is something I
>>>                                         have become intensely passionate
>>>                                         about so this is likely to be
>>>                                         a long post...
>>>
>>>                                         OK, so this (hijacked) thread
>>>                                         started out as a discussion of
>>>                                         options in JavaFX for
>>>                                         implementing "Look and Feel".
>>>                                         I think
>>>                                         everyone agrees that even
>>>                                         with CSS and skins, JavaFX
>>>                                         lacks the
>>>                                         built-in ability to define a
>>>                                         true Look *and* Feel. Further to
>>>                                         this, there has been
>>>                                         discussion on Twitter and
>>>                                         elsewhere
>>>                                         regarding *native* Look and
>>>                                         Feel and the merits of attempting
>>>                                         such an animal with JavaFX.
>>>
>>>                                         It is on this topic that I
>>>                                         would like to add my 2 bits
>>>                                         (as I am
>>>                                         known to do)!  I was going to
>>>                                         use my blog
>>>                                         http://justmy2bits.com
>>>                                         but decided I would be much
>>>                                         more likely to be able to engage
>>>                                         fellow JavaFX developers in a
>>>                                         positive, polite and respectful
>>>                                         conversation here.
>>>
>>>                                         First, anyone who may follow
>>>                                         me on Twitter, in this forum
>>>                                         or when
>>>                                         I post in other forums
>>>                                         (anyone?) will probably be a
>>>                                         little bit
>>>                                         confused as to where I
>>>                                         actually stand on this issue.
>>>                                          Well, this
>>>                                         stems from the fact that I
>>>                                         have been giving confusing
>>>                                         (if not
>>>                                         conflicting) input into
>>>                                         various threads on this topic
>>>                                         for quite a
>>>                                         while.
>>>
>>>                                         Why?
>>>
>>>                                         Well, because until very
>>>                                         recently, I myself was
>>>                                         completely torn
>>>                                         on the subject of native Look
>>>                                         and Feel.  In fact, I seemed to
>>>                                         oscillate on an almost daily
>>>                                         basis from thinking it's a great,
>>>                                         achievable idea to dismissing
>>>                                         such an idea on various
>>>                                         grounds.  I
>>>                                         am swaying so much because I
>>>                                         have so much riding on successful
>>>                                         ports of JavaFX to iOS and
>>>                                         Android and because those
>>>                                         ports depend
>>>                                         heavily on resolving this
>>>                                         issue once and for all.
>>>
>>>                                         Now I have had something of
>>>                                         an epiphany and reached a
>>>                                         conclusion.  I now do not
>>>                                         believe that pouring large
>>>                                         (massive?)
>>>                                         amounts of resources into the
>>>                                         painstaking task of building a
>>>                                         fully compliant, fully
>>>                                         performant native Look and
>>>                                         Feel is
>>>                                         justifiable or worth the
>>>                                         effort.  And let's be clear
>>>                                         about this:
>>>                                         it is a *lot* of effort!
>>>
>>>                                         But before I proceed I just
>>>                                         want to say categorically how
>>>                                         much I
>>>                                         admire the thoroughly awesome
>>>                                         work/efforts of the likes of
>>>                                         Pedro
>>>                                         DV, Claudine Zillmann,
>>>                                         Hendrik Ebbers et. al. in
>>>                                         (trying ever so
>>>                                         hard) to bring native Look
>>>                                         and Feel to various
>>>                                         OS/platforms with
>>>                                         JavaFX.  I cannot put in
>>>                                         words how much I am in awe of the
>>>                                         commitment, the attention to
>>>                                         detail, the technical
>>>                                         prowess, the
>>>                                         artistry and the drive of
>>>                                         these fantastic people. Their
>>>                                         work
>>>                                         will undoubtedly be extremely
>>>                                         useful to many developers
>>>                                         worldwide.
>>>
>>>                                         I want to make all that
>>>                                         *perfectly clear* because now
>>>                                         I am going
>>>                                         to explain why I (probably)
>>>                                         will not be one of those
>>>                                         people and
>>>                                         (hopefully) do it with the
>>>                                         utmost respect for the
>>>                                         aforementioned
>>>                                         rock stars :-)
>>>
>>>                                         Right, so back to the issue
>>>                                         of whether to or not to
>>>                                         implement or
>>>                                         use a native Look and Feel.
>>>                                          Some of the following
>>>                                         comments have
>>>                                         already been made by me on
>>>                                         other networks and in other
>>>                                         forums so
>>>                                         apologies if it seems a bit
>>>                                         repetitive to some.
>>>
>>>                                         At first glance, the idea of
>>>                                         a native Look and Feel seems
>>>                                         almost
>>>                                         like the proverbial Holy
>>>                                         Grail.  I mean, if such a
>>>                                         thing were
>>>                                         truly possible and viable,
>>>                                         who wouldn't want one? You
>>>                                         still have
>>>                                         your single codebase across
>>>                                         all platforms and you just just
>>>                                         plug-in the particular native
>>>                                         Look and Feel for your target
>>>                                         platform and voila!  World
>>>                                         domination will surely soon
>>>                                         follow!
>>>
>>>                                         Well, not quite.  It's a
>>>                                         great idea but I am going out
>>>                                         on a limb
>>>                                         to claim that it has *never*
>>>                                         worked.  Ever!  And by "work"
>>>                                         I mean
>>>                                         so that your "not-so-native"
>>>                                         app looks and feels (which
>>>                                         includes
>>>                                         all aspects of behaviour, not
>>>                                         just appearance) *exactly* like a
>>>                                         true native app and *no one*
>>>                                         could tell you that it *wasn't* a
>>>                                         native app.
>>>
>>>                                         Yes, I know there are masses
>>>                                         now screaming at their
>>>                                         monitors who
>>>                                         will undoubtedly cite the
>>>                                         numerous success stories of
>>>                                         Swing apps
>>>                                         or maybe even Qt or some
>>>                                         other cross-platform UI
>>>                                         toolkit and
>>>                                         maybe my standards/criteria
>>>                                         are harsher than others but I
>>>                                         stand
>>>                                         by my claim that this has
>>>                                         *never ever* really, really,
>>>                                         really
>>>                                         worked.
>>>
>>>                                         OK, so why not?
>>>
>>>                                         Here's my first point: I
>>>                                         postulate that such a noble
>>>                                         goal is not
>>>                                         actually achievable.  It is
>>>                                         not actually achievable for a
>>>                                         number
>>>                                         of reasons.
>>>
>>>                                         It is not actually achievable
>>>                                         because, in most cases, we do not
>>>                                         have access to the code that
>>>                                         implements the native controls on
>>>                                         each OS so, at best, we are
>>>                                         "guessing" when we try to
>>>                                         emulate all
>>>                                         aspects of their appearance
>>>                                         and behaviour.  Try as we may, we
>>>                                         will never get *every*
>>>                                         control exactly right and I
>>>                                         firmly believe
>>>                                         that anything that purports
>>>                                         to be something else needs to be
>>>                                         *identical*.
>>>
>>>                                         It is not actually achievable
>>>                                         because just as you feel you have
>>>                                         reached an acceptable level
>>>                                         of "compliance" (which I
>>>                                         again wager
>>>                                         is never 100%), the goal
>>>                                         posts will move.  That is,
>>>                                         the OS vendor
>>>                                         will release an update and
>>>                                         even the minor ones can
>>>                                         change either
>>>                                         the appearance or behaviour
>>>                                         of controls, sometimes in subtle
>>>                                         ways, sometimes in not so
>>>                                         subtle ways.  Either way,
>>>                                         there is then
>>>                                         going to be a period of time
>>>                                         where you are playing a
>>>                                         futile game
>>>                                         of catch-up and during that
>>>                                         time your "native" controls
>>>                                         will be
>>>                                         surely exposed for the
>>>                                         impostors they are.
>>>
>>>                                         It is not actually achievable
>>>                                         because the same control on
>>>                                         one OS
>>>                                         can look and feel/behave
>>>                                         quite differently on another
>>>                                         OS which
>>>                                         leads to very poor levels of
>>>                                         reuse.
>>>
>>>                                         It is not actually achievable
>>>                                         because many controls simply
>>>                                         can't
>>>                                         be emulated in using
>>>                                         Java/JavaFX most likely
>>>                                         because they have
>>>                                         exclusive access to native
>>>                                         system or OS calls that are not
>>>                                         accessible to Java or because
>>>                                         the expected levels of
>>>                                         performance
>>>                                         or "snappiness" cannot be
>>>                                         achieved using Java by any
>>>                                         means.  Even
>>>                                         with JNA or JNI you would be
>>>                                         left scratching your head in many
>>>                                         cases.
>>>
>>>                                         And, it is not actually
>>>                                         achievable because it's
>>>                                         simply too much
>>>                                         work to get anywhere near to
>>>                                         perfection!  We are talking
>>>                                         *massive* amounts of effort
>>>                                         and very few people have
>>>                                         either the
>>>                                         talent, the eye, the
>>>                                         attention to detail or the
>>>                                         patience to see
>>>                                         such a project right through
>>>                                         to the end where *all*
>>>                                         controls are
>>>                                         covered.  The rock stars I
>>>                                         mentioned earlier are the
>>>                                         exceptions
>>>                                         of course.  There's clearly
>>>                                         zero point in emulating
>>>                                         *some* of the
>>>                                         controls only; you need the
>>>                                         *full set* or it's just not
>>>                                         viable.
>>>
>>>                                         Finally, and to look at it
>>>                                         another way, what do we get
>>>                                         even if
>>>                                         some super-human delivers us
>>>                                         a native Look and Feel for every
>>>                                         possible platform?  Well, a
>>>                                         massive maintenance nightmare
>>>                                         for a
>>>                                         start!  This super-human
>>>                                         would basically be spending
>>>                                         all their
>>>                                         super time and using up all
>>>                                         their super powers just
>>>                                         keeping such
>>>                                         libraries current.
>>>
>>>                                         So, if you are still with me,
>>>                                         why bother?  Just consider if all
>>>                                         those rock stars (and super
>>>                                         heroes) concentrated all
>>>                                         their super
>>>                                         efforts into either improving
>>>                                         the features, stability,
>>>                                         performance or appearance of
>>>                                         JavaFX itself?  Just think
>>>                                         what we
>>>                                         could achieve!
>>>
>>>                                         And on the why bother theme,
>>>                                         why bother to devote all that
>>>                                         time
>>>                                         and effort, spend all those
>>>                                         millions, tear out all that
>>>                                         hair and
>>>                                         hit all those roadblocks when
>>>                                         the very thing we are trying to
>>>                                         achieve is already available?
>>>
>>>                                         Yes, that's right, if you
>>>                                         really, really, really want
>>>                                         to build a
>>>                                         native app then why don't you
>>>                                         just build a native app?
>>>                                          There are
>>>                                         numerous tools, languages,
>>>                                         IDEs, toolchains and
>>>                                         libraries that
>>>                                         enable you to build awesome
>>>                                         *true* native apps!  I just don't
>>>                                         think JavaFX is one of them :-)
>>>
>>>                                         And it doesn't have to be one
>>>                                         of those toolkits because JavaFX
>>>                                         can be used to build an
>>>                                         entirely different class of
>>>                                         application
>>>                                         and I now strongly believe
>>>                                         that this is the kind of app
>>>                                         we should
>>>                                         be concentrating on.  That
>>>                                         class (or classes) of app is
>>>                                         one that
>>>                                         is not so heavily dependent
>>>                                         on the native Look and Feel and
>>>                                         doesn't need to be.  There
>>>                                         are probably hundreds of
>>>                                         thousands of
>>>                                         apps that are like this.
>>>                                          They are everywhere and
>>>                                         JavaFX is
>>>                                         *perfect* for them!
>>>
>>>                                         Scott Palmer has argued that
>>>                                         this approach is not valid (and
>>>                                         sorry Scott if am
>>>                                         inaccurately paraphrasing
>>>                                         you). He cites
>>>                                         examples such as Chrome,
>>>                                         Firefox and even MS Office as
>>>                                         proof that
>>>                                         this approach does not work.
>>>                                          However, my response to that
>>>                                         would
>>>                                         be to say that just because
>>>                                         these are examples of where the
>>>                                         developers got it seriously
>>>                                         wrong, they do not prove that
>>>                                         this
>>>                                         approach can't work and isn't
>>>                                         working all over the marketplace.
>>>
>>>                                         There is no need to develop
>>>                                         crappy, mistake ridden
>>>                                         software by
>>>                                         using a toolkit such as
>>>                                         JavaFX in a way that does not
>>>                                         attempt to
>>>                                         emulate the native Look and
>>>                                         Feel and the fact that even big
>>>                                         companies like Google *still*
>>>                                         clearly get it horribly wrong
>>>                                         doesn't imply that we *all*
>>>                                         have to be so ineffective.
>>>
>>>                                         Part of my newly-found
>>>                                         aversion to emulated native
>>>                                         Look and Feel
>>>                                         comes from my many years of
>>>                                         both developing and using Swing
>>>                                         applications.  Sure, I know
>>>                                         there are *some* (handful?)
>>>                                         successful Swing apps, most
>>>                                         notably those developed with the
>>>                                         NetBeans RCP, but in general
>>>                                         Swing has failed to have any
>>>                                         penetration into serious
>>>                                         commercial software.  Why?
>>>                                         Well, there
>>>                                         are several reasons (and a
>>>                                         lot are due to Java itself)
>>>                                         but, for
>>>                                         me, I was never satisfied
>>>                                         with the so-called native
>>>                                         Look and Feel
>>>                                         options that come with Swing.
>>>                                          I have been (and still am) very
>>>                                         critical of the Windows Look
>>>                                         and Feel in Swing in particular
>>>                                         because, even today, there is
>>>                                         a vast gulf between an actual
>>>                                         native Windows application
>>>                                         and a Swing application with
>>>                                         this Look
>>>                                         and Feel.  So much so that I
>>>                                         still want to almost knock my
>>>                                         monitor off the desk when I
>>>                                         am using an application
>>>                                         developed in
>>>                                         this way.  For me, this is
>>>                                         not acceptable and such an
>>>                                         application
>>>                                         could never be released as a
>>>                                         serious commercial product.
>>>
>>>                                         And that's pretty much what
>>>                                         this all boils down to:
>>>                                         developing
>>>                                         serious commercial software.
>>>
>>>                                         If you are interested in
>>>                                         developing something else
>>>                                         then these
>>>                                         lengthy comments (am I
>>>                                         *still* going?) probably do
>>>                                         not apply to
>>>                                         you :-)
>>>
>>>                                         So to summarise, I argue that
>>>                                         it is not possible to develop
>>>                                         serious commercial software
>>>                                         using emulated Look and Feel in
>>>                                         JavaFX or in *any* UI
>>>                                         toolkit.  I *strongly*
>>>                                         recommend that we
>>>                                         all work together to make
>>>                                         JavaFX as good as it can be
>>>                                         (which is
>>>                                         absolutely awesome) by
>>>                                         focusing on the core product,
>>>                                         the API, the
>>>                                         performance, the feature set,
>>>                                         the stability *and* the supported
>>>                                         platforms rather than throw
>>>                                         good money after bad on a
>>>                                         *wonderful*
>>>                                         goal that ultimately can
>>>                                         never be reached...
>>>
>>>                                         Just my 2 bits,
>>>
>>>                                         Felix
>>>
>>>                                         P.S. I surely hope I have not
>>>                                         offended any/all those who either
>>>                                         disagree with the main points
>>>                                         or who still believe that native
>>>                                         Look and Feel is viable.  I
>>>                                         remind you all that I am on
>>>                                         my knees
>>>                                         bowing with respect to the
>>>                                         rock stars I referred to and
>>>                                         anyone
>>>                                         else working on similar
>>>                                         projects.  Absolutely no
>>>                                         offence is
>>>                                         intended, I am merely
>>>                                         expressing my (passionate)
>>>                                         feelings on this
>>>                                         subject.
>>>
>>>
>>>                                             On 9 December 2013 19:10,
>>>                                             Felix Bembrick
>>>                                             <felix.bembr...@gmail.com
>>>
>>> <mailto:felix.bembr...@gmail.com>>
>>>                                             wrote:
>>>
>>>
>>>
>>>                                                 On 9 December 2013
>>>                                                 16:10, Scott Palmer
>>>                                                 <swpal...@gmail.com
>>>
>>> <mailto:swpal...@gmail.com>>
>>>                                                 wrote:
>>>
>>>
>>>                                                     On Dec 8, 2013,
>>>                                                     at 9:18 PM, Felix
>>>                                                     Bembrick
>>>
>>> <felix.bembr...@gmail.com
>>>
>>> <mailto:felix.bembr...@gmail.com>>
>>>                                                     wrote:
>>>
>>>                                                 <snip>
>>>
>>>                                                     Firstly, it will
>>>                                                     *never* be
>>>                                                     possible to
>>>                                                     completely
>>>                                                     emulate the
>>>                                                     native look
>>>                                                     and feel.
>>>
>>>                                                 Sure it is. Though it
>>>                                                 may never be
>>>                                                 practical, for many
>>>                                                 of the
>>>                                                 reasons you have given.
>>>
>>>                                                     My reasoning is:
>>>                                                     why bother?
>>>
>>>                                                 Because it matters.
>>>                                                 As computer literate
>>>                                                 developers, we often
>>>                                                 don't realize what
>>>                                                 trips other people
>>>                                                 up.  I get so frustrated
>>>                                                 with apps these days
>>>                                                 because they have
>>>                                                 become hard to use
>>>                                                 simply because the
>>>                                                 developers tried to
>>>                                                 define their own look

Reply via email to