display_layout_builder.cc 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. // Copyright 2016 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ui/display/display_layout_builder.h"
  5. #include <algorithm>
  6. #include "ui/display/display.h"
  7. #include "ui/display/util/display_util.h"
  8. namespace display {
  9. DisplayLayoutBuilder::DisplayLayoutBuilder(const DisplayLayout& layout)
  10. : layout_(layout.Copy()) {}
  11. DisplayLayoutBuilder::DisplayLayoutBuilder(int64_t primary_id)
  12. : layout_(new DisplayLayout) {
  13. layout_->primary_id = primary_id;
  14. }
  15. DisplayLayoutBuilder::~DisplayLayoutBuilder() {}
  16. DisplayLayoutBuilder& DisplayLayoutBuilder::SetDefaultUnified(
  17. bool default_unified) {
  18. layout_->default_unified = default_unified;
  19. return *this;
  20. }
  21. DisplayLayoutBuilder& DisplayLayoutBuilder::ClearPlacements() {
  22. layout_->placement_list.clear();
  23. return *this;
  24. }
  25. DisplayLayoutBuilder& DisplayLayoutBuilder::AddDisplayPlacement(
  26. int64_t display_id,
  27. int64_t parent_display_id,
  28. DisplayPlacement::Position position,
  29. int offset) {
  30. DisplayPlacement placement;
  31. placement.position = position;
  32. placement.offset = offset;
  33. placement.display_id = display_id;
  34. placement.parent_display_id = parent_display_id;
  35. AddDisplayPlacement(placement);
  36. return *this;
  37. }
  38. DisplayLayoutBuilder& DisplayLayoutBuilder::AddDisplayPlacement(
  39. const DisplayPlacement& placement) {
  40. layout_->placement_list.push_back(placement);
  41. return *this;
  42. }
  43. DisplayLayoutBuilder& DisplayLayoutBuilder::SetSecondaryPlacement(
  44. int64_t secondary_id,
  45. DisplayPlacement::Position position,
  46. int offset) {
  47. layout_->placement_list.clear();
  48. AddDisplayPlacement(secondary_id, layout_->primary_id, position, offset);
  49. return *this;
  50. }
  51. std::unique_ptr<DisplayLayout> DisplayLayoutBuilder::Build() {
  52. std::sort(layout_->placement_list.begin(), layout_->placement_list.end(),
  53. [](const DisplayPlacement& a, const DisplayPlacement& b) {
  54. return CompareDisplayIds(a.display_id, b.display_id);
  55. });
  56. return std::move(layout_);
  57. }
  58. } // namespace display