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