// Copyright 2013 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#import "chrome/browser/ui/cocoa/infobars/infobar_container_cocoa.h"

#import "chrome/browser/ui/cocoa/infobars/infobar_cocoa.h"
#import "chrome/browser/ui/cocoa/infobars/infobar_container_controller.h"

InfoBarContainerCocoa::InfoBarContainerCocoa(
    InfoBarContainerController* controller)
    : infobars::InfoBarContainer(this),
      controller_(controller) {
}

InfoBarContainerCocoa::~InfoBarContainerCocoa() {
  RemoveAllInfoBarsForDestruction();
}

void InfoBarContainerCocoa::PlatformSpecificAddInfoBar(
    infobars::InfoBar* infobar,
    size_t position) {
  InfoBarCocoa* infobar_cocoa = static_cast<InfoBarCocoa*>(infobar);
  [controller_ addInfoBar:infobar_cocoa position:position];
}

void InfoBarContainerCocoa::PlatformSpecificRemoveInfoBar(
    infobars::InfoBar* infobar) {
  InfoBarCocoa* infobar_cocoa = static_cast<InfoBarCocoa*>(infobar);
  [controller_ removeInfoBar:infobar_cocoa];
}

SkColor InfoBarContainerCocoa::GetInfoBarSeparatorColor() const {
  return SK_ColorBLACK;
}

void InfoBarContainerCocoa::InfoBarContainerStateChanged(bool is_animating) {
  [controller_ positionInfoBarsAndRedraw:is_animating];
}

bool InfoBarContainerCocoa::DrawInfoBarArrows(int* x) const {
  if (x)
    *x = [controller_ infobarArrowX];
  return ![controller_ shouldSuppressTopInfoBarTip];
}
