Hi,

I don't think we are doing that much differently.

Desktop Safari is scaling directly in WebCore using the
pageScaleFactor whereas Qt like iOS scales outside of WebCore (using a
tiled backing store), resulting in the FrameView not being in UI
pixels.

devicePixelRatio currently can become 1 on some viewport meta tag
cases in Qt (/Chromium), but I am already convinced that we should
remove the code doing this, which would basically solve most of our
differences in behavior.

Cheers,
Kenneth


On Wed, May 30, 2012 at 8:17 AM, Simon Fraser <simon.fra...@apple.com> wrote:
> On May 29, 2012, at 7:31 PM, Alexandre Elias wrote:
>
>> Thanks for looking into this, I like this naming scheme and Chrome for 
>> Android would be willing to switch to it.
>>
>> Another major semantic question is how deviceScaleFactor relates to the 
>> FrameView viewport size.  Currently on Chrome for Android and Qt ports, the 
>> viewport is just the physical pixel size, whereas on ChromeOS it's 
>> pre-divided by deviceScaleFactor (passed in that way by the embedder -- the 
>> whole UI is device-scale-independent there).
>>
>> I don't know what the Mac Safari port does and would be very interested to 
>> hear.  If the Mac port behaves like ChromeOS here and there is no intention 
>> to switch to the other approach, we may unfortunately have to introduce yet 
>> another variable to represent the split in behaviors; otherwise ChromeOS can 
>> adjust its viewport size to converge with all other ports.
>
> On Mac and iOS, deviceScaleFactor exactly matches window.devicePixelRatio, 
> and is simply a measure of how many physical pixels correspond to each "UI" 
> pixel on the device: 1 for normal displays, and 2 for Retina displays on 
> relevant iOS devices. Theoretically these could change if a window moves 
> between displays, but are independent of user scaling.
>
> All FrameView/viewport sizes etc are in "UI" pixels, and are not affected by 
> deviceScaleFactor. This sounds like the ChromeOS way, which is preferable to 
> the Android/Qt way by the sound of it.
>
> Gesture zooming on Mac (not to be confused with CSS zoom/text zooming) 
> affects pageScaleFactor, but this is independent of deviceScaleFactor. On 
> Mac, pageScaleFactor is implemented via a RenderStyle transform on the 
> RenderView's RenderLayer. Mac doesn't support the viewport meta tag.
>
> On iOS, zooming is mostly done outside of WebKit. The viewport tag affects 
> page scale in the same way that user zooming does. iOS has its own zoom 
> factor plumbed into WebCore, but ideally would share pageScaleFactor. On iOS, 
> zooming used to not affect "client" coordinates (getBoundingClientRects, 
> event clientX/clientY etc), but gradually iOS has migrated to a model were 
> client coords are relative to the "porthole" viewport (which is not the same 
> as the CSS viewport). Panning on iOS happens outside of WebKit, and is not 
> equivalent to FrameView scrolling, but some notion of the page offset is 
> plumbed through to update scrollTop, and for scroll events etc.
>
> This is a tricky area to get right, especially since different ports have 
> their own notions of zooming, panning etc. It's going to be a challenge to 
> get all ports sharing code here.
>
> Simon
>



-- 
Kenneth Rohde Christiansen
Senior Engineer
Nokia Mobile Phones, Browser / WebKit team
Phone  +45 4093 0598 / E-mail kenneth at webkit.org

http://codeposts.blogspot.com ﹆﹆﹆
_______________________________________________
webkit-dev mailing list
webkit-dev@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-dev

Reply via email to