15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2007 Apple Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * are met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright 902772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer in the 1202772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * documentation and/or other materials provided with the distribution. 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * its contributors may be used to endorse or promote products derived 1502772c6a72f1ee0b226341a4f4439970c29fc861Ben Murdoch * from this software without specific prior written permission. 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)#include "config.h" 311e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/Screen.h" 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/FrameHost.h" 341e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "core/frame/FrameView.h" 35d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)#include "core/frame/LocalFrame.h" 3609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/frame/Settings.h" 3709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles)#include "core/inspector/InspectorInstrumentation.h" 38bfe3590b1806e3ff18f46ee3af5d4b83078f305aTorne (Richard Coles)#include "platform/PlatformScreen.h" 391e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles)#include "platform/geometry/FloatRect.h" 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)namespace blink { 425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 43d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)Screen::Screen(LocalFrame* frame) 445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) : DOMWindowProperty(frame) 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::height() const 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 5209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 5309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 5409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenRect(m_frame->view()).height() * host->deviceScaleFactor()); 551e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return static_cast<unsigned>(screenRect(m_frame->view()).height()); 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::width() const 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 6209380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 6309380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 6409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenRect(m_frame->view()).width() * host->deviceScaleFactor()); 651e202183a5dc46166763171984b285173f8585e5Torne (Richard Coles) return static_cast<unsigned>(screenRect(m_frame->view()).width()); 665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::colorDepth() const 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<unsigned>(screenDepth(m_frame->view())); 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::pixelDepth() const 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<unsigned>(screenDepth(m_frame->view())); 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int Screen::availLeft() const 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 8609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 8709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 8809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenAvailableRect(m_frame->view()).x() * host->deviceScaleFactor()); 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<int>(screenAvailableRect(m_frame->view()).x()); 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)int Screen::availTop() const 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 9609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 9709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 9809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenAvailableRect(m_frame->view()).y() * host->deviceScaleFactor()); 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<int>(screenAvailableRect(m_frame->view()).y()); 1005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::availHeight() const 1035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 10609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 10709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 10809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenAvailableRect(m_frame->view()).height() * host->deviceScaleFactor()); 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<unsigned>(screenAvailableRect(m_frame->view()).height()); 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)unsigned Screen::availWidth() const 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!m_frame) 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return 0; 11609380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) FrameHost* host = m_frame->host(); 11709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) if (host && host->settings().reportScreenSizeInPhysicalPixelsQuirk()) 11809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) return lroundf(screenAvailableRect(m_frame->view()).width() * host->deviceScaleFactor()); 1195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return static_cast<unsigned>(screenAvailableRect(m_frame->view()).width()); 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 122d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)void Screen::trace(Visitor* visitor) 123d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles){ 1247242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#if ENABLE(OILPAN) 1257242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci HeapSupplementable<Screen>::trace(visitor); 1267242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci#endif 1277242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci DOMWindowProperty::trace(visitor); 128d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles)} 129d5428f32f5d1719f774f62e19147104ca245a3abTorne (Richard Coles) 130c1847b1379d12d0e05df27436bf19a9b1bf12deaTorne (Richard Coles)} // namespace blink 131