Developing controls based on Canvas?
felix.bembrick at gmail.com
Mon Aug 5 03:11:58 PDT 2013
I am investigating the feasibility of developing a JavaFX 8 control based
on Canvas. I have chosen Canvas as the base class as this control is of a
very dynamic nature and would not be easy to implement with a retained mode
style ancestor (at least as far as I can tell).
So is this feasible? While I can readily see how to render the visual
aspects of the control, I am not sure how to best "embed" other controls
within it should that become necessary (and almost certainly will).
For example, how would I go about embedding a Button within my control? It
looks to me like I would need to create an actual Button node somewhere
else in the scenegraph and then perhaps render it within my control using
gc.drawImage() passing in a snapshot of the Button node. That's OK but
then I have to somehow handle events and I am not sure how best to do that.
Another issue I see is that there seems to be no way to apply effects to
individual graphic elements within the Canvas as the applyEffect() method
applies to the entire Canvas.
Finally, a significant obstacle is this issue:
This issue relates to the lack of support for LCD font smoothing within
Canvas. This may not sound that serious but the difference between LCD
font-smoothed text in other controls and the grey-scale text in Canvas is
so distinct on my current machine that a control based on Canvas would
really stick out like a sore thumb and appear significantly less appealing
than a "standard" control.
So, am I wasting my time?
Are there any other issues I am likely to face?
Are there other ways to develop dynamic controls which may involve
thousands of nodes (such as lines, curves etc.)?
More information about the openjfx-dev