1 /* 2 * Copyright (C) 2007 Apple Inc. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of 14 * its contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY 18 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 19 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 20 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 22 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 23 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 24 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 */ 28 29 30 #include "config.h" 31 #include "core/page/Screen.h" 32 33 #include "core/inspector/InspectorInstrumentation.h" 34 #include "core/page/Frame.h" 35 #include "core/page/FrameView.h" 36 #include "core/page/Page.h" 37 #include "core/page/Settings.h" 38 #include "core/platform/PlatformScreen.h" 39 #include "core/platform/graphics/FloatRect.h" 40 41 namespace WebCore { 42 43 Screen::Screen(Frame* frame) 44 : DOMWindowProperty(frame) 45 { 46 ScriptWrappable::init(this); 47 } 48 49 unsigned Screen::height() const 50 { 51 if (!m_frame) 52 return 0; 53 long height = static_cast<long>(screenRect(m_frame->view()).height()); 54 Page* page = m_frame->page(); 55 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 56 height = lroundf(height * page->deviceScaleFactor()); 57 InspectorInstrumentation::applyScreenHeightOverride(m_frame, &height); 58 return static_cast<unsigned>(height); 59 } 60 61 unsigned Screen::width() const 62 { 63 if (!m_frame) 64 return 0; 65 long width = static_cast<long>(screenRect(m_frame->view()).width()); 66 Page* page = m_frame->page(); 67 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 68 width = lroundf(width * page->deviceScaleFactor()); 69 InspectorInstrumentation::applyScreenWidthOverride(m_frame, &width); 70 return static_cast<unsigned>(width); 71 } 72 73 unsigned Screen::colorDepth() const 74 { 75 if (!m_frame) 76 return 0; 77 return static_cast<unsigned>(screenDepth(m_frame->view())); 78 } 79 80 unsigned Screen::pixelDepth() const 81 { 82 if (!m_frame) 83 return 0; 84 return static_cast<unsigned>(screenDepth(m_frame->view())); 85 } 86 87 int Screen::availLeft() const 88 { 89 if (!m_frame) 90 return 0; 91 Page* page = m_frame->page(); 92 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 93 return lroundf(screenAvailableRect(m_frame->view()).x() * page->deviceScaleFactor()); 94 return static_cast<int>(screenAvailableRect(m_frame->view()).x()); 95 } 96 97 int Screen::availTop() const 98 { 99 if (!m_frame) 100 return 0; 101 Page* page = m_frame->page(); 102 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 103 return lroundf(screenAvailableRect(m_frame->view()).y() * page->deviceScaleFactor()); 104 return static_cast<int>(screenAvailableRect(m_frame->view()).y()); 105 } 106 107 unsigned Screen::availHeight() const 108 { 109 if (!m_frame) 110 return 0; 111 Page* page = m_frame->page(); 112 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 113 return lroundf(screenAvailableRect(m_frame->view()).height() * page->deviceScaleFactor()); 114 return static_cast<unsigned>(screenAvailableRect(m_frame->view()).height()); 115 } 116 117 unsigned Screen::availWidth() const 118 { 119 if (!m_frame) 120 return 0; 121 Page* page = m_frame->page(); 122 if (page && page->settings()->reportScreenSizeInPhysicalPixelsQuirk()) 123 return lroundf(screenAvailableRect(m_frame->view()).width() * page->deviceScaleFactor()); 124 return static_cast<unsigned>(screenAvailableRect(m_frame->view()).width()); 125 } 126 127 } // namespace WebCore 128