<Swing Dev> [9] Review request for 8157065: There is no the focus border on the selected tab.

Semyon Sadetsky semyon.sadetsky at oracle.com
Wed Sep 14 08:51:44 UTC 2016



On 9/13/2016 9:03 PM, Alexandr Scherbatiy wrote:
> On 9/13/2016 8:49 PM, Semyon Sadetsky wrote:
>> On 9/13/2016 8:46 PM, Alexandr Scherbatiy wrote:
>>> On 9/13/2016 8:34 PM, Semyon Sadetsky wrote:
>>>>
>>>> On 9/13/2016 8:25 PM, Alexandr Scherbatiy wrote:
>>>>> On 9/13/2016 7:38 PM, Semyon Sadetsky wrote:
>>>>>>
>>>>>>
>>>>>> On 9/13/2016 7:21 PM, Alexandr Scherbatiy wrote:
>>>>>>> On 9/12/2016 10:42 PM, Semyon Sadetsky wrote:
>>>>>>>>
>>>>>>>>
>>>>>>>> On 9/12/2016 9:48 PM, Alexandr Scherbatiy wrote:
>>>>>>>>> On 9/12/2016 7:52 PM, Semyon Sadetsky wrote:
>>>>>>>>>> On 9/12/2016 6:50 PM, Alexandr Scherbatiy wrote:
>>>>>>>>>>
>>>>>>>>>>> On 9/12/2016 6:42 PM, Semyon Sadetsky wrote:
>>>>>>>>>>>> GTKPainter does not implement a lot of methods which can be 
>>>>>>>>>>>> accessed by public API. Could you, please, explain, why 
>>>>>>>>>>>> this specific method is more important than, for example, 
>>>>>>>>>>>> paintToolBarContentBackground() or 
>>>>>>>>>>>> paintToggleButtonBorder(), or all other unimplemented?
>>>>>>>>>>>>
>>>>>>>>>>>> In general, how do you separate public API methods of the 
>>>>>>>>>>>> SynthPainter class into two sets: the first set that 
>>>>>>>>>>>> *should be* over-riden and the second set of methods that 
>>>>>>>>>>>> *should not be* overr-riden? Are there any systematic 
>>>>>>>>>>>> criterium for that differentiation?
>>>>>>>>>>>   All the same methods with different number of arguments 
>>>>>>>>>>> which do not fall to overridden implementation should be 
>>>>>>>>>>> overridden to provide proper implementation.
>>>>>>>>>> Where I can read about this rule for SynthPainter? And it 
>>>>>>>>>> obviously is not true.
>>>>>>>>>   This is a usual rule for public methods which can be used by 
>>>>>>>>> an external application.
>>>>>>>>>> There are a lot of methods that are not over-riden in 
>>>>>>>>>> GTKPainter. I even wrote an examples above.
>>>>>>>>>   The SynthPainter.paintToolBarContentBackground(..., 
>>>>>>>>> orientation) calls 
>>>>>>>>> SynthPainter.paintToolBarContentBackground(...) without the 
>>>>>>>>> orientation and the GTKPainter .paintToolBarContentBackground 
>>>>>>>>> overrides the method without the orientation.  So calls to 
>>>>>>>>> gtkPainter.paintToolBarContentBackground(..., orientation) 
>>>>>>>>> falls down to the overriden method in GTKPainter.
>>>>>>>>>
>>>>>>>>>  The same is for SynthPainter.paintProgressBarBackground(..., 
>>>>>>>>> orientation) and paintScrollBarBackground(..., orientation) 
>>>>>>>>> methods.
>>>>>>>>>
>>>>>>>>>  The SynthPainter has only one paintToggleButtonBorder() method.
>>>>>>>> Interesting rule... I thought that more specific method version 
>>>>>>>> may have different implementation.
>>>>>>>   It was done for historical reason. For example before the fix 
>>>>>>> JDK-5033822 "Synth ScrollBar paintTrack() dosn't support 
>>>>>>> orientation"
>>>>>>>   there was only paintScrollBarBackground() method without the 
>>>>>>> orientation in the SynthPainter class.
>>>>>>>   After the fix the paintScrollBarBackground() method with the 
>>>>>>> orientation is added which default implementation just calls the 
>>>>>>> same method without the orientation because old user's 
>>>>>>> subclasses can override the method without the orientation an 
>>>>>>> not be aware about new method version.
>>>>>>>
>>>>>>>> What would you say about paintSeparatorBackground() ?
>>>>>>>> It's (..., orientation) version is over-ridden while the 
>>>>>>>> generic version is not over-ridden.
>>>>>>>    I guess that it is just a bug.
>>>>>> Not sure. GTKPainter has never been providing a systematic API 
>>>>>> from the beginning. It is not for an arbitrary external use, 
>>>>>> because the resulting painting will be unpredictable. I explained 
>>>>>> this in this thread many times. And even if I would like to 
>>>>>> provide this useless method implementation 
>>>>>   It is a part of the public SynthPainter API and can be called by 
>>>>> an external application.
>>>> I can be called without any predictable result.  This is the 
>>>> current state. It cannot be changed by the change you are proposing 
>>>> to add.
>>>   The result is described in the public method javadoc.
>>>>>> I were not able to do this because the orientation is a required 
>>>>>> parameter to paint the GTK tab border.
>>>>>   The overridden method without the orientation can just call the 
>>>>> overridden method with orientation passing a default orientation 
>>>>> value.
>>>> And what the default value is? It is not defined.
>>> https://docs.oracle.com/javase/7/docs/api/javax/swing/JSeparator.html
>>> Creates a new horizontal separator: Constructor JSeparator().
>> Sorry, I didn't get how the separator orientation is related to 
>> tabbed pane border.
> https://docs.oracle.com/javase/7/docs/api/javax/swing/JTabbedPane.html#setTabPlacement(int) 
>
>     The default value, if not set, is SwingConstants.TOP.
It is a default for JTabbedPane but not for the LnF. JTabbedPane always 
has some orientation and it is used in the painter. But I cannot even 
imagine what should be painted if the GTK painter API is called to paint 
TabbedPane without orientation and why. Because orientation is mandatory 
in the corresponding gtk-lib call.

--Semyon
>
>   Thanks,
>   Alexandr.
>>
>> --Semyon
>>>
>>>   Thanks,
>>>   Alexandr.
>>>>
>>>> --Semyon
>>>>>
>>>>>   Thanks,
>>>>>   Alexandr.
>>>>>>
>>>>>> --Semyon
>>>>>>>
>>>>>>>   Thanks,
>>>>>>>   Alexandr.
>>>>>>>>
>>>>>>>> --Semyon
>>>>>>>>>
>>>>>>>>>  Thanks,
>>>>>>>>>  Alexandr.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> --Semyon
>>>>>>>>>>>
>>>>>>>>>>>   Thanks,
>>>>>>>>>>>   Alexandr.
>>>>>>>>>>>>
>>>>>>>>>>>> --Semyon
>>>>>>>>>>>>
>>>>>>>>>>>> On 9/12/2016 6:20 PM, Alexandr Scherbatiy wrote:
>>>>>>>>>>>>> The paintTabbedPaneTabBorder() without orientation should 
>>>>>>>>>>>>> be implemented as well because it can be accessed by 
>>>>>>>>>>>>> public API.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Alexandr.
>>>>>>>>>>>>>
>>>>>>>>>>>>> On 6/3/2016 10:54 PM, Semyon Sadetsky wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On 6/3/2016 10:34 PM, Sergey Bylokhov wrote:
>>>>>>>>>>>>>>> On 03.06.16 22:21, Semyon Sadetsky wrote:
>>>>>>>>>>>>>>>>> What reason? Why it is not public? since I provided 
>>>>>>>>>>>>>>>>> the code example
>>>>>>>>>>>>>>>>> where these methods are accessed by the user?
>>>>>>>>>>>>>>>> GTK toollkit painting sequence is very different.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> What does it mean "different"? Even in this fix you 
>>>>>>>>>>>>>>> implement one of the method according to the spec and 
>>>>>>>>>>>>>>> skip the same method for some unknown reason.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I still did not get why an overload method should 
>>>>>>>>>>>>>>>>>> have the same behavior
>>>>>>>>>>>>>>>>>> as its associates. This is a brand new design 
>>>>>>>>>>>>>>>>>> principle I've never heard
>>>>>>>>>>>>>>>>>> before.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> ...........
>>>>>>>>>>>>>>>> That's nice...
>>>>>>>>>>>>>>>> Do you have any other concerns?
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I still do not understand why the first method with 
>>>>>>>>>>>>>>> default orientation is not implemented.
>>>>>>>>>>>>>> I guess you meant "is not over-ridden". :) Once again: 
>>>>>>>>>>>>>> because it is never used.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>
>>>>>>>>
>>>>>>>
>>>>>>
>>>>>
>>>>
>>>
>>
>




More information about the swing-dev mailing list