blob: dd8913555bf663667f34dced6391e4894e575159 [file]
// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "ui/accessibility/ax_text_attributes.h"
#include "ui/accessibility/ax_node_data.h"
namespace ui {
namespace {
void UpdateProperty(ax::mojom::IntAttribute attribute,
const AXNodeData& node_data,
int* value) {
int maybe_value = node_data.GetIntAttribute(attribute);
if (maybe_value || node_data.HasIntAttribute(attribute)) {
*value = maybe_value;
}
}
void UpdateProperty(ax::mojom::FloatAttribute attribute,
const AXNodeData& node_data,
float* value) {
float maybe_value = node_data.GetFloatAttribute(attribute);
if (maybe_value || node_data.HasFloatAttribute(attribute)) {
*value = maybe_value;
}
}
} // namespace
AXTextAttributes::AXTextAttributes() = default;
AXTextAttributes::~AXTextAttributes() = default;
AXTextAttributes::AXTextAttributes(const AXNodeData& node_data) {
UpdateProperty(ax::mojom::IntAttribute::kBackgroundColor, node_data,
&background_color);
UpdateProperty(ax::mojom::IntAttribute::kColor, node_data, &color);
UpdateProperty(ax::mojom::IntAttribute::kInvalidState, node_data,
&invalid_state);
UpdateProperty(ax::mojom::IntAttribute::kTextOverlineStyle, node_data,
&overline_style);
UpdateProperty(ax::mojom::IntAttribute::kTextDirection, node_data,
&text_direction);
UpdateProperty(ax::mojom::IntAttribute::kTextPosition, node_data,
&text_position);
UpdateProperty(ax::mojom::IntAttribute::kTextStrikethroughStyle, node_data,
&strikethrough_style);
UpdateProperty(ax::mojom::IntAttribute::kTextStyle, node_data, &text_style);
UpdateProperty(ax::mojom::IntAttribute::kTextUnderlineStyle, node_data,
&underline_style);
UpdateProperty(ax::mojom::FloatAttribute::kFontSize, node_data, &font_size);
UpdateProperty(ax::mojom::FloatAttribute::kFontWeight, node_data,
&font_weight);
font_family =
node_data.GetStringAttribute(ax::mojom::StringAttribute::kFontFamily);
marker_types =
node_data.GetIntListAttribute(ax::mojom::IntListAttribute::kMarkerTypes);
highlight_types = node_data.GetIntListAttribute(
ax::mojom::IntListAttribute::kHighlightTypes);
}
AXTextAttributes::AXTextAttributes(AXTextAttributes&&) = default;
AXTextAttributes& AXTextAttributes::operator=(AXTextAttributes&&) = default;
bool AXTextAttributes::IsUnset() const {
return background_color == kUnsetValue && color == kUnsetValue &&
invalid_state == kUnsetValue && overline_style == kUnsetValue &&
strikethrough_style == kUnsetValue && text_position == kUnsetValue &&
font_size == kUnsetValue && font_weight == kUnsetValue &&
text_style == kUnsetValue && underline_style == kUnsetValue &&
font_family.empty() && marker_types.empty() && highlight_types.empty();
}
bool AXTextAttributes::HasTextStyle(
ax::mojom::TextStyle text_style_enum) const {
return text_style != kUnsetValue &&
(static_cast<uint32_t>(text_style) &
(1U << static_cast<uint32_t>(text_style_enum))) != 0;
}
bool AXTextAttributes::operator!=(const AXTextAttributes& other) const {
return !(*this == other);
}
bool AXTextAttributes::HasSameFormattingAs(
const AXTextAttributes& other) const {
return background_color == other.background_color && color == other.color &&
overline_style == other.overline_style &&
strikethrough_style == other.strikethrough_style &&
text_direction == other.text_direction &&
text_position == other.text_position &&
text_style == other.text_style &&
underline_style == other.underline_style &&
font_size == other.font_size && font_weight == other.font_weight &&
font_family == other.font_family;
}
} // namespace ui