#ifndef PDF_ACCESSIBILITY_STRUCTS_H_
#define PDF_ACCESSIBILITY_STRUCTS_H_
#include <stdint.h>
#include <string>
#include <vector>
#include "third_party/skia/include/core/SkBitmap.h"
#include "ui/gfx/geometry/point.h"
#include "ui/gfx/geometry/rect.h"
#include "ui/gfx/geometry/rect_f.h"
namespace chrome_pdf {
struct AccessibilityDocInfo {
bool operator==(const AccessibilityDocInfo& other) const;
bool operator!=(const AccessibilityDocInfo& other) const;
uint32_t page_count = 0;
bool text_accessible = false;
bool text_copyable = false;
};
struct AccessibilityPageInfo {
uint32_t page_index = 0;
gfx::Rect bounds;
uint32_t text_run_count = 0;
uint32_t char_count = 0;
};
enum class AccessibilityTextRenderMode {
kUnknown = -1,
kFill = 0,
kStroke = 1,
kFillStroke = 2,
kInvisible = 3,
kFillClip = 4,
kStrokeClip = 5,
kFillStrokeClip = 6,
kClip = 7,
kMaxValue = kClip,
};
struct AccessibilityTextStyleInfo {
AccessibilityTextStyleInfo();
AccessibilityTextStyleInfo(const std::string& font_name,
int font_weight,
AccessibilityTextRenderMode render_mode,
float font_size,
uint32_t fill_color,
uint32_t stroke_color,
bool is_italic,
bool is_bold);
AccessibilityTextStyleInfo(const AccessibilityTextStyleInfo& other);
~AccessibilityTextStyleInfo();
std::string font_name;
int font_weight = 0;
AccessibilityTextRenderMode render_mode =
AccessibilityTextRenderMode::kUnknown;
float font_size = 0.0f;
uint32_t fill_color = 0;
uint32_t stroke_color = 0;
bool is_italic = false;
bool is_bold = false;
};
enum class AccessibilityTextDirection {
kNone = 0,
kLeftToRight = 1,
kRightToLeft = 2,
kTopToBottom = 3,
kBottomToTop = 4,
kMaxValue = kBottomToTop,
};
struct AccessibilityTextRunInfo {
AccessibilityTextRunInfo();
AccessibilityTextRunInfo(uint32_t len,
const gfx::RectF& bounds,
AccessibilityTextDirection direction,
const AccessibilityTextStyleInfo& style);
AccessibilityTextRunInfo(const AccessibilityTextRunInfo& other);
~AccessibilityTextRunInfo();
uint32_t len = 0;
gfx::RectF bounds;
AccessibilityTextDirection direction = AccessibilityTextDirection::kNone;
AccessibilityTextStyleInfo style;
};
struct AccessibilityCharInfo {
uint32_t unicode_character = 0;
double char_width = 0.0;
};
struct AccessibilityTextRunRangeInfo {
size_t index = 0;
uint32_t count = 0;
};
struct AccessibilityLinkInfo {
AccessibilityLinkInfo();
AccessibilityLinkInfo(const std::string& url,
uint32_t index_in_page,
const gfx::RectF& bounds,
const AccessibilityTextRunRangeInfo& text_range);
AccessibilityLinkInfo(const AccessibilityLinkInfo& other);
~AccessibilityLinkInfo();
std::string url;
uint32_t index_in_page = 0;
gfx::RectF bounds;
AccessibilityTextRunRangeInfo text_range;
};
struct AccessibilityImageInfo {
AccessibilityImageInfo();
AccessibilityImageInfo(const std::string& alt_text,
uint32_t text_run_index,
const gfx::RectF& bounds,
const SkBitmap& image_data);
AccessibilityImageInfo(const AccessibilityImageInfo& other);
~AccessibilityImageInfo();
std::string alt_text;
uint32_t text_run_index = 0;
gfx::RectF bounds;
SkBitmap image_data;
};
struct AccessibilityHighlightInfo {
AccessibilityHighlightInfo();
AccessibilityHighlightInfo(const std::string& note_text,
uint32_t index_in_page,
uint32_t color,
const gfx::RectF& bounds,
const AccessibilityTextRunRangeInfo& text_range);
AccessibilityHighlightInfo(const AccessibilityHighlightInfo& other);
~AccessibilityHighlightInfo();
std::string note_text;
uint32_t index_in_page = 0;
uint32_t color = 0;
gfx::RectF bounds;
AccessibilityTextRunRangeInfo text_range;
};
struct AccessibilityTextFieldInfo {
AccessibilityTextFieldInfo();
AccessibilityTextFieldInfo(const std::string& name,
const std::string& value,
bool is_read_only,
bool is_required,
bool is_password,
uint32_t index_in_page,
uint32_t text_run_index,
const gfx::RectF& bounds);
AccessibilityTextFieldInfo(const AccessibilityTextFieldInfo& other);
~AccessibilityTextFieldInfo();
std::string name;
std::string value;
bool is_read_only = false;
bool is_required = false;
bool is_password = false;
uint32_t index_in_page = 0;
uint32_t text_run_index = 0;
gfx::RectF bounds;
};
struct AccessibilityChoiceFieldOptionInfo {
std::string name;
bool is_selected = false;
gfx::RectF bounds;
};
enum class ChoiceFieldType {
kListBox = 0,
kComboBox = 1,
kMinValue = kListBox,
kMaxValue = kComboBox,
};
struct AccessibilityChoiceFieldInfo {
AccessibilityChoiceFieldInfo();
AccessibilityChoiceFieldInfo(
const std::string& name,
const std::vector<AccessibilityChoiceFieldOptionInfo>& options,
ChoiceFieldType type,
bool is_read_only,
bool is_multi_select,
bool has_editable_text_box,
uint32_t index_in_page,
uint32_t text_run_index,
const gfx::RectF& bounds);
AccessibilityChoiceFieldInfo(const AccessibilityChoiceFieldInfo& other);
~AccessibilityChoiceFieldInfo();
std::string name;
std::vector<AccessibilityChoiceFieldOptionInfo> options;
ChoiceFieldType type;
bool is_read_only = false;
bool is_multi_select = false;
bool has_editable_text_box = false;
uint32_t index_in_page = 0;
uint32_t text_run_index = 0;
gfx::RectF bounds;
};
enum class ButtonType {
kPushButton = 1,
kCheckBox = 2,
kRadioButton = 3,
kMinValue = kPushButton,
kMaxValue = kRadioButton,
};
struct AccessibilityButtonInfo {
AccessibilityButtonInfo();
AccessibilityButtonInfo(const std::string& name,
const std::string& value,
ButtonType type,
bool is_read_only,
bool is_checked,
uint32_t control_count,
uint32_t control_index,
uint32_t index_in_page,
uint32_t text_run_index,
const gfx::RectF& bounds);
AccessibilityButtonInfo(const AccessibilityButtonInfo& other);
~AccessibilityButtonInfo();
std::string name;
std::string value;
ButtonType type;
bool is_read_only = false;
bool is_checked = false;
uint32_t control_count = 0;
uint32_t control_index = 0;
uint32_t index_in_page = 0;
uint32_t text_run_index = 0;
gfx::RectF bounds;
};
struct AccessibilityFormFieldInfo {
AccessibilityFormFieldInfo();
AccessibilityFormFieldInfo(
const std::vector<AccessibilityTextFieldInfo>& text_fields,
const std::vector<AccessibilityChoiceFieldInfo>& choice_fields,
const std::vector<AccessibilityButtonInfo>& buttons);
AccessibilityFormFieldInfo(const AccessibilityFormFieldInfo& other);
~AccessibilityFormFieldInfo();
std::vector<AccessibilityTextFieldInfo> text_fields;
std::vector<AccessibilityChoiceFieldInfo> choice_fields;
std::vector<AccessibilityButtonInfo> buttons;
};
struct AccessibilityPageObjects {
AccessibilityPageObjects();
AccessibilityPageObjects(
const std::vector<AccessibilityLinkInfo>& links,
const std::vector<AccessibilityImageInfo>& images,
const std::vector<AccessibilityHighlightInfo>& highlights,
const AccessibilityFormFieldInfo& form_fields);
AccessibilityPageObjects(const AccessibilityPageObjects& other);
~AccessibilityPageObjects();
std::vector<AccessibilityLinkInfo> links;
std::vector<AccessibilityImageInfo> images;
std::vector<AccessibilityHighlightInfo> highlights;
AccessibilityFormFieldInfo form_fields;
};
enum class FocusObjectType {
kNone = 0,
kDocument = 1,
kLink = 2,
kHighlight = 3,
kTextField = 4,
kMaxValue = kTextField,
};
struct AccessibilityFocusInfo {
FocusObjectType focused_object_type = FocusObjectType::kNone;
uint32_t focused_object_page_index = 0;
uint32_t focused_annotation_index_in_page = 0;
};
struct AccessibilityViewportInfo {
double zoom = 0.0;
double scale = 0.0;
gfx::Point scroll;
gfx::Point offset;
uint32_t selection_start_page_index = 0;
uint32_t selection_start_char_index = 0;
uint32_t selection_end_page_index = 0;
uint32_t selection_end_char_index = 0;
AccessibilityFocusInfo focus_info;
};
enum class AccessibilityAction {
kNone = 0,
kScrollToMakeVisible = 1,
kDoDefaultAction = 2,
kScrollToGlobalPoint = 3,
kSetSelection = 4,
kMaxValue = kSetSelection,
};
enum class AccessibilityAnnotationType {
kNone = 0,
kLink = 1,
kMaxValue = kLink,
};
enum class AccessibilityScrollAlignment {
kNone = 0,
kCenter,
kTop,
kBottom,
kLeft,
kRight,
kClosestToEdge,
kMaxValue = kClosestToEdge,
};
struct PageCharacterIndex {
uint32_t page_index = 0;
uint32_t char_index = 0;
};
struct AccessibilityActionData {
AccessibilityActionData();
AccessibilityActionData(
AccessibilityAction action,
AccessibilityAnnotationType annotation_type,
const gfx::Point& target_point,
const gfx::Rect& target_rect,
uint32_t annotation_index,
uint32_t page_index,
AccessibilityScrollAlignment horizontal_scroll_alignment,
AccessibilityScrollAlignment vertical_scroll_alignment,
const PageCharacterIndex& selection_start_index,
const PageCharacterIndex& selection_end_index);
AccessibilityActionData(const AccessibilityActionData& other);
~AccessibilityActionData();
AccessibilityAction action = AccessibilityAction::kNone;
AccessibilityAnnotationType annotation_type =
AccessibilityAnnotationType::kNone;
gfx::Point target_point;
gfx::Rect target_rect;
uint32_t annotation_index = 0;
uint32_t page_index = 0;
AccessibilityScrollAlignment horizontal_scroll_alignment =
AccessibilityScrollAlignment::kNone;
AccessibilityScrollAlignment vertical_scroll_alignment =
AccessibilityScrollAlignment::kNone;
PageCharacterIndex selection_start_index;
PageCharacterIndex selection_end_index;
};
}
#endif