Chromium Code Reviews| Index: pdf/pdfium/pdfium_engine.cc |
| diff --git a/pdf/pdfium/pdfium_engine.cc b/pdf/pdfium/pdfium_engine.cc |
| index 09d8a2f5ec1e64c196e87981fce53607ab6817ea..b7f357a1724cc04bda08c8303033a25f2439d7fb 100644 |
| --- a/pdf/pdfium/pdfium_engine.cc |
| +++ b/pdf/pdfium/pdfium_engine.cc |
| @@ -2303,6 +2303,62 @@ std::string PDFiumEngine::GetPageAsJSON(int index) { |
| return page_json; |
| } |
| +void PDFiumEngine::EnableAccessibility() { |
| + if (!(HasPermission(PERMISSION_COPY) || |
| + HasPermission(PERMISSION_COPY_ACCESSIBLE))) { |
| + return; |
|
Lei Zhang
2016/05/09 23:58:49
Would it be helpful to return false to give the ac
dmazzoni
2016/05/10 22:09:18
Good thought.
I moved SetAccessibilityDocInfo up
|
| + } |
| + |
| + PP_PrivateAccessibilityViewportInfo viewport_info; |
| + viewport_info.scroll.x = 0; |
| + viewport_info.scroll.y = -client_->GetToolbarHeight(); |
| + viewport_info.offset = page_offset_; |
| + viewport_info.zoom = current_zoom_; |
| + pp::PDF::SetAccessibilityViewportInfo(GetPluginInstance(), &viewport_info); |
| + |
| + PP_PrivateAccessibilityDocInfo doc_info; |
| + doc_info.page_count = pages_.size(); |
| + doc_info.text_accessible = PP_FromBool( |
| + HasPermission(PERMISSION_COPY_ACCESSIBLE)); |
| + doc_info.text_copyable = PP_FromBool(HasPermission(PERMISSION_COPY)); |
| + pp::PDF::SetAccessibilityDocInfo(GetPluginInstance(), &doc_info); |
| + |
| + for (uint32_t page_index = 0; page_index < pages_.size(); ++page_index) { |
|
Lei Zhang
2016/05/09 23:58:49
size_t instead of uint32_t?
dmazzoni
2016/05/10 22:09:18
Done.
|
| + FPDF_TEXTPAGE text_page = pages_[page_index]->GetTextPage(); |
| + int char_count = FPDFText_CountChars(text_page); |
| + PP_PrivateAccessibilityPageInfo page_info; |
| + page_info.bounds = pages_[page_index]->rect(); |
| + page_info.char_count = char_count; |
| + pp::PDF::SetAccessibilityPageInfo( |
| + GetPluginInstance(), page_index, &page_info); |
| + |
| + int char_index = 0; |
| + int text_run_index = 0; |
| + while (char_index < char_count) { |
| + PP_PrivateAccessibilityTextRunInfo text_run_info; |
| + pp::FloatRect bounds; |
| + pages_[page_index]->GetTextRunInfo( |
| + char_index, &text_run_info.len, &text_run_info.font_size, &bounds); |
| + text_run_info.direction = PP_PRIVATEDIRECTION_LTR; |
| + text_run_info.bounds = bounds; |
| + std::vector<PP_PrivateAccessibilityCharInfo> chars; |
| + chars.resize(text_run_info.len); |
|
Lei Zhang
2016/05/09 23:58:49
I think you can combine this with the previous lin
dmazzoni
2016/05/10 22:09:18
Done.
|
| + for (uint32_t i = 0; i < text_run_info.len; ++i) { |
| + chars[i].unicode_character = FPDFText_GetUnicode(text_page, i); |
| + chars[i].char_width = pages_[page_index]->GetCharWidth(i); |
| + } |
| + |
| + pp::PDF::SetAccessibilityTextRunInfo(GetPluginInstance(), |
| + page_index, |
| + text_run_index, |
| + &text_run_info, |
| + chars.data()); |
| + text_run_index++; |
| + char_index += text_run_info.len; |
| + } |
| + } |
| +} |
| + |
| bool PDFiumEngine::GetPrintScaling() { |
| return !!FPDF_VIEWERREF_GetPrintScaling(doc_); |
| } |