18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* 28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Copyright (C) 2006, 2007 Apple Inc. All rights reserved. 30bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch * Copyright (C) 2009 Torch Mobile, Inc. 48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * modification, are permitted provided that the following conditions 78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * are met: 88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * documentation and/or other materials provided with the distribution. 138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * 148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY 158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE COMPUTER, INC. OR 188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */ 268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "config.h" 288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "PlatformScreen.h" 298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 30d0825bca7fe65beaee391d30da42e937db621564Steve Block#include "HostWindow.h" 318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "IntRect.h" 328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FloatRect.h" 338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Frame.h" 348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "FrameView.h" 358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "Page.h" 368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include <windows.h> 378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectnamespace WebCore { 398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project// Returns info for the default monitor if widget is NULL 418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic MONITORINFOEX monitorInfoForWidget(Widget* widget) 428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 43231d4e3152a9c27a73b6ac7badbe6be673aa3ddfSteve Block HWND window = widget ? widget->root()->hostWindow()->platformPageClient() : 0; 448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project HMONITOR monitor = MonitorFromWindow(window, MONITOR_DEFAULTTOPRIMARY); 458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MONITORINFOEX monitorInfo; 478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project monitorInfo.cbSize = sizeof(MONITORINFOEX); 488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project GetMonitorInfo(monitor, &monitorInfo); 498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return monitorInfo; 508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectstatic DEVMODE deviceInfoForWidget(Widget* widget) 538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DEVMODE deviceInfo; 558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deviceInfo.dmSize = sizeof(DEVMODE); 568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project deviceInfo.dmDriverExtra = 0; 57d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINCE) 580bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch if (!EnumDisplaySettings(0, ENUM_CURRENT_SETTINGS, &deviceInfo)) 590bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch deviceInfo.dmBitsPerPel = 16; 600bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 610bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch MONITORINFOEX monitorInfo = monitorInfoForWidget(widget); 628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project EnumDisplaySettings(monitorInfo.szDevice, ENUM_CURRENT_SETTINGS, &deviceInfo); 630bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return deviceInfo; 668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint screenDepth(Widget* widget) 698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DEVMODE deviceInfo = deviceInfoForWidget(widget); 71a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch if (deviceInfo.dmBitsPerPel == 32) { 72a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // Some video drivers return 32, but this function is supposed to ignore the alpha 73a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch // component. See <http://webkit.org/b/42972>. 74a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return 24; 75a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch } 768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return deviceInfo.dmBitsPerPel; 778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectint screenDepthPerComponent(Widget* widget) 808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project // FIXME: Assumes RGB -- not sure if this is right. 82a94275402997c11dd2e778633dacf4b7e630a35dBen Murdoch return screenDepth(widget) / 3; 838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectbool screenIsMonochrome(Widget* widget) 868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 87d0825bca7fe65beaee391d30da42e937db621564Steve Block#if OS(WINCE) 880bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch // EnumDisplaySettings doesn't set dmColor in DEVMODE. 890bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch return false; 900bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#else 918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project DEVMODE deviceInfo = deviceInfoForWidget(widget); 928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return deviceInfo.dmColor == DMCOLOR_MONOCHROME; 930bf48ef3be53ddaa52bbead65dfd75bf90e7a2b5Ben Murdoch#endif 948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect screenRect(Widget* widget) 978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MONITORINFOEX monitorInfo = monitorInfoForWidget(widget); 998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return monitorInfo.rcMonitor; 1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectFloatRect screenAvailableRect(Widget* widget) 1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project{ 1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project MONITORINFOEX monitorInfo = monitorInfoForWidget(widget); 1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project return monitorInfo.rcWork; 1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} 1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project 1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project} // namespace WebCore 109