Chromium Code Reviews| Index: chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.cc |
| diff --git a/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.cc b/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.cc |
| index cf94cf917d4db6084bf54d83c7511b4e51478811..e0cefea5b79e8c4d54e4693596d6bebd06cf3363 100644 |
| --- a/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.cc |
| +++ b/chrome/browser/extensions/api/braille_display_private/braille_controller_brlapi.cc |
| @@ -87,29 +87,39 @@ std::unique_ptr<DisplayState> BrailleControllerImpl::GetDisplayState() { |
| StartConnecting(); |
| std::unique_ptr<DisplayState> display_state(new DisplayState); |
| if (connection_.get() && connection_->Connected()) { |
| - size_t size; |
| - if (!connection_->GetDisplaySize(&size)) { |
| + unsigned int columns, rows; |
|
Devlin
2016/10/25 22:36:53
nit: chromium style says one variable per line, in
ultimatedbz
2016/10/27 03:16:58
Done.
|
| + if (!connection_->GetDisplaySize(&columns, &rows)) { |
| Disconnect(); |
| - } else if (size > 0) { // size == 0 means no display present. |
| + } else if (rows * columns > 0) { |
| + // rows * columns == 0 means no display present. |
| display_state->available = true; |
| - display_state->text_cell_count.reset(new int(size)); |
| + display_state->text_column_count.reset(new int(columns)); |
| + display_state->text_row_count.reset(new int(rows)); |
| } |
| } |
| return display_state; |
| } |
| -void BrailleControllerImpl::WriteDots(const std::vector<char>& cells) { |
| +void BrailleControllerImpl::WriteDots(const std::vector<char>& cells, |
| + unsigned int cells_cols, |
| + unsigned int cells_rows) { |
| DCHECK_CURRENTLY_ON(BrowserThread::IO); |
| if (connection_ && connection_->Connected()) { |
| - size_t size; |
| - if (!connection_->GetDisplaySize(&size)) { |
| + // Row count and column count of current display. |
| + unsigned int rows, columns; |
|
Devlin
2016/10/25 22:36:53
ditto
ultimatedbz
2016/10/27 03:16:58
Done.
|
| + if (!connection_->GetDisplaySize(&columns, &rows)) { |
| Disconnect(); |
| } |
| - std::vector<unsigned char> sizedCells(size); |
| - std::memcpy(&sizedCells[0], cells.data(), std::min(cells.size(), size)); |
| - if (size > cells.size()) |
| - std::fill(sizedCells.begin() + cells.size(), sizedCells.end(), 0); |
| - if (!connection_->WriteDots(&sizedCells[0])) |
| + std::vector<unsigned char> sized_cells(rows * columns, 0); |
| + unsigned int row_limit = std::min(rows, cells_rows); |
| + unsigned int col_limit = std::min(columns, cells_cols); |
| + for (unsigned int row = 0; row < row_limit; row++) { |
| + for (unsigned int col = 0; col < col_limit; col++) { |
| + sized_cells[row * columns + col] = cells[row * cells_cols + col]; |
| + } |
| + } |
| + |
| + if (!connection_->WriteDots(sized_cells)) |
| Disconnect(); |
| } |
| } |