blob: 2fa65d2670e67848b7989f8c1d5f7203b3c90630 [file] [log] [blame]
// Copyright (c) 2012 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.
#include "ash/common/system/tray/tray_utils.h"
#include "ash/common/material_design/material_design_controller.h"
#include "ash/common/shelf/wm_shelf_util.h"
#include "ash/common/system/tray/tray_constants.h"
#include "ash/common/system/tray/tray_item_view.h"
#include "ui/accessibility/ax_node_data.h"
#include "ui/gfx/font_list.h"
#include "ui/gfx/geometry/vector2d.h"
#include "ui/views/border.h"
#include "ui/views/controls/button/label_button.h"
#include "ui/views/controls/button/md_text_button.h"
#include "ui/views/controls/label.h"
namespace ash {
void SetupLabelForTray(views::Label* label) {
if (MaterialDesignController::IsShelfMaterial()) {
// The text is drawn on an transparent bg, so we must disable subpixel
// rendering.
label->SetSubpixelRenderingEnabled(false);
label->SetFontList(gfx::FontList().Derive(2, gfx::Font::NORMAL,
gfx::Font::Weight::MEDIUM));
} else {
label->SetFontList(
gfx::FontList().Derive(1, gfx::Font::NORMAL, gfx::Font::Weight::BOLD));
label->SetShadows(gfx::ShadowValues(
1,
gfx::ShadowValue(gfx::Vector2d(0, 1), 0, SkColorSetARGB(64, 0, 0, 0))));
label->SetAutoColorReadabilityEnabled(false);
label->SetEnabledColor(SK_ColorWHITE);
label->SetBackgroundColor(SkColorSetARGB(0, 255, 255, 255));
}
}
void SetTrayImageItemBorder(views::View* tray_view, ShelfAlignment alignment) {
if (MaterialDesignController::IsShelfMaterial())
return;
const int tray_image_item_padding = GetTrayConstant(TRAY_IMAGE_ITEM_PADDING);
if (IsHorizontalAlignment(alignment)) {
tray_view->SetBorder(views::CreateEmptyBorder(0, tray_image_item_padding, 0,
tray_image_item_padding));
} else {
tray_view->SetBorder(views::CreateEmptyBorder(
tray_image_item_padding,
kTrayImageItemHorizontalPaddingVerticalAlignment,
tray_image_item_padding,
kTrayImageItemHorizontalPaddingVerticalAlignment));
}
}
void SetTrayLabelItemBorder(TrayItemView* tray_view, ShelfAlignment alignment) {
if (MaterialDesignController::IsShelfMaterial())
return;
if (IsHorizontalAlignment(alignment)) {
tray_view->SetBorder(views::CreateEmptyBorder(
0, kTrayLabelItemHorizontalPaddingBottomAlignment, 0,
kTrayLabelItemHorizontalPaddingBottomAlignment));
} else {
// Center the label for vertical launcher alignment.
int horizontal_padding =
std::max(0, (tray_view->GetPreferredSize().width() -
tray_view->label()->GetPreferredSize().width()) /
2);
tray_view->SetBorder(views::CreateEmptyBorder(
kTrayLabelItemVerticalPaddingVerticalAlignment, horizontal_padding,
kTrayLabelItemVerticalPaddingVerticalAlignment, horizontal_padding));
}
}
void GetAccessibleLabelFromDescendantViews(
views::View* view,
std::vector<base::string16>& out_labels) {
ui::AXNodeData temp_node_data;
view->GetAccessibleNodeData(&temp_node_data);
if (!temp_node_data.GetStringAttribute(ui::AX_ATTR_NAME).empty())
out_labels.push_back(temp_node_data.GetString16Attribute(ui::AX_ATTR_NAME));
// Do not descend into static text labels which may compute their own labels
// recursively.
if (temp_node_data.role == ui::AX_ROLE_STATIC_TEXT)
return;
for (int i = 0; i < view->child_count(); ++i)
GetAccessibleLabelFromDescendantViews(view->child_at(i), out_labels);
}
} // namespace ash