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_); |
} |