Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(586)

Unified Diff: pdf/pdfium/pdfium_engine.cc

Issue 1953053002: Add private PPAPI interfaces for PDFium accessibility. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Another speculative compiler error fix Created 4 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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_);
}
« no previous file with comments | « pdf/pdfium/pdfium_engine.h ('k') | pdf/pdfium/pdfium_page.h » ('j') | pdf/pdfium/pdfium_page.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698