display_layout.h revision eb525c5499e34cc9c4b825d6d9e75bb07cc06ace
18c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com// Copyright (c) 2013 The Chromium Authors. All rights reserved. 28c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com// Use of this source code is governed by a BSD-style license that can be 38c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com// found in the LICENSE file. 48c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 58c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#ifndef ASH_DISPLAY_DISPLAY_LAYOUT_H_ 68c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#define ASH_DISPLAY_DISPLAY_LAYOUT_H_ 78c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 88c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#include <map> 98c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#include <string> 108c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 118c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#include "ash/ash_export.h" 128c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#include "base/basictypes.h" 138c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#include "base/compiler_specific.h" 148c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 158c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comnamespace base { 168c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comclass Value; 178c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comtemplate <typename T> class JSONValueConverter; 188c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com} 198c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 208c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comnamespace ash { 218c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 228c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comtypedef std::pair<int64, int64> DisplayIdPair; 238c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 248c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.comstruct ASH_EXPORT DisplayLayout { 258c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Layout options where the secondary display should be positioned. 26f539318f0d3dba743ec1886d5d9df0fb1be628a1tfarina enum Position { 278c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com TOP, 288c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com RIGHT, 298c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com BOTTOM, 308c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com LEFT 318c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com }; 328c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 338c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Factory method to create DisplayLayout from ints. The |mirrored| is 348c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // set to false and |primary_id| is set to gfx::Display::kInvalidDisplayId. 358c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Used for persistence and webui. 368c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com static DisplayLayout FromInts(int position, int offsets); 378c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 388c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com DisplayLayout(); 398c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com DisplayLayout(Position position, int offset); 408c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 418c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Returns an inverted display layout. 428c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com DisplayLayout Invert() const WARN_UNUSED_RESULT; 438c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 448c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Converter functions to/from base::Value. 458c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com static bool ConvertFromValue(const base::Value& value, DisplayLayout* layout); 468c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com static bool ConvertToValue(const DisplayLayout& layout, base::Value* value); 478c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 488c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // This method is used by base::JSONValueConverter, you don't need to call 498c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // this directly. Instead consider using converter functions above. 508c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com static void RegisterJSONConverter( 518c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com base::JSONValueConverter<DisplayLayout>* converter); 528c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 538c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com Position position; 548c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 558c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // The offset of the position of the secondary display. The offset is 568c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // based on the top/left edge of the primary display. 57091a594dbc4116ec2e54724432472bf37dae794acommit-bot@chromium.org int offset; 588c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 598c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // True if displays are mirrored. 608c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com bool mirrored; 618c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 628c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // The id of the display used as a primary display. 638c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com int64 primary_id; 648c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 658c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com // Returns string representation of the layout for debugging/testing. 668c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com std::string ToString() const; 678c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com}; 688c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 698c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com} // namespace ash 708c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com 718c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com#endif 728c463b02d9bc1ed430ac92dbcea47a1394994ba4bsalomon@google.com