On 4/24/2018 11:53 PM, Sergey Bylokhov wrote:

On 24/04/2018 13:22, Anton Tarasov wrote:
Clarification. The coordinate should not actually be split into displays every time it's scaled up/down. It's enough to calculate its offset in the "terminal" display and scale it accordingly. Then have all the displays already mapped b/w device and user spaces. But the problem is right here. Even in the current implementation, when there are two displays with different scales, their bounds are converted to the user space incorrectly. The conversion is straight-forward - scaleDown(x,y), ScaleDown(w/h). However, in order to keep the layout of the displays in the user space, the origin of a display should be scaled by the scale factor of the adjacent display, not its own.

I remember that we tried to implement it this way, or even implemented it this way, but changed later. The problem in situation above is occurred if there are a few screens on the left side with different scales and it is unclear which one should be used to scale the x,y of the right screen. Situation became worse if there are some holes between screens, or screens are intersected.

Well, in theory I'm thinking of the following. Consider introducing a notion of a coordinate with a state: unresolved, resolved. An unresolved coordinate can be resolved only in relationship. Say, an origin of a monitor adjacent to several other monitors with different scales (ambiguous situation mentioned above) is resolved to a fixed value (in user space) in relationship to a particular adjacent monitor. The relationship comes into play when, roughly speaking, you need to calculate a distance b/w two points, belonging to two different monitors. In case of the origin of a monitor, the other point would be the origin of another monitor.
Hard to say if it's feasible (and relevant) in the context of Swing/AWT...

Regards,
Anton.

Reply via email to