| Index: remoting/client/rectangle_update_decoder.cc
|
| diff --git a/remoting/client/rectangle_update_decoder.cc b/remoting/client/rectangle_update_decoder.cc
|
| index ffc95f07725602f5885782e10f3fc51847c2d48d..1b4a7711d5dcf3d733b03b537e02cfad4a228950 100644
|
| --- a/remoting/client/rectangle_update_decoder.cc
|
| +++ b/remoting/client/rectangle_update_decoder.cc
|
| @@ -30,6 +30,7 @@ RectangleUpdateDecoder::RectangleUpdateDecoder(
|
| : task_runner_(task_runner),
|
| consumer_(consumer),
|
| source_size_(SkISize::Make(0, 0)),
|
| + source_dpi_(SkIPoint::Make(0, 0)),
|
| view_size_(SkISize::Make(0, 0)),
|
| clip_area_(SkIRect::MakeEmpty()),
|
| paint_scheduled_(false) {
|
| @@ -63,8 +64,9 @@ void RectangleUpdateDecoder::DecodePacket(scoped_ptr<VideoPacket> packet,
|
|
|
| base::ScopedClosureRunner done_runner(done);
|
| bool decoder_needs_reset = false;
|
| + bool notify_size_or_dpi_change = false;
|
|
|
| - // If the packet includes a screen size, store it.
|
| + // If the packet includes screen size or DPI information, store them.
|
| if (packet->format().has_screen_width() &&
|
| packet->format().has_screen_height()) {
|
| SkISize source_size = SkISize::Make(packet->format().screen_width(),
|
| @@ -72,18 +74,26 @@ void RectangleUpdateDecoder::DecodePacket(scoped_ptr<VideoPacket> packet,
|
| if (source_size_ != source_size) {
|
| source_size_ = source_size;
|
| decoder_needs_reset = true;
|
| + notify_size_or_dpi_change = true;
|
| + }
|
| + }
|
| + if (packet->format().has_x_dpi() && packet->format().has_y_dpi()) {
|
| + SkIPoint source_dpi(SkIPoint::Make(packet->format().x_dpi(),
|
| + packet->format().y_dpi()));
|
| + if (source_dpi != source_dpi_) {
|
| + source_dpi_ = source_dpi;
|
| + notify_size_or_dpi_change = true;
|
| }
|
| }
|
|
|
| // If we've never seen a screen size, ignore the packet.
|
| - if (source_size_.isZero()) {
|
| + if (source_size_.isZero())
|
| return;
|
| - }
|
|
|
| - if (decoder_needs_reset) {
|
| + if (decoder_needs_reset)
|
| decoder_->Initialize(source_size_);
|
| - consumer_->SetSourceSize(source_size_);
|
| - }
|
| + if (notify_size_or_dpi_change)
|
| + consumer_->SetSourceSize(source_size_, source_dpi_);
|
|
|
| if (!decoder_->IsReadyForData()) {
|
| // TODO(ajwong): This whole thing should move into an invalid state.
|
|
|