| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "remoting/client/plugin/chromoting_instance.h" | 5 #include "remoting/client/plugin/chromoting_instance.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 LOG(ERROR) << "Media library not initialized."; | 190 LOG(ERROR) << "Media library not initialized."; |
| 191 return false; | 191 return false; |
| 192 } | 192 } |
| 193 | 193 |
| 194 // Start all the threads. | 194 // Start all the threads. |
| 195 context_.Start(); | 195 context_.Start(); |
| 196 | 196 |
| 197 // Create the chromoting objects that don't depend on the network connection. | 197 // Create the chromoting objects that don't depend on the network connection. |
| 198 // Because we decode on a separate thread we need a FrameConsumerProxy to | 198 // Because we decode on a separate thread we need a FrameConsumerProxy to |
| 199 // bounce calls from the RectangleUpdateDecoder back to the plugin thread. | 199 // bounce calls from the RectangleUpdateDecoder back to the plugin thread. |
| 200 view_.reset(new PepperView(this, &context_)); | 200 consumer_proxy_ = new FrameConsumerProxy(plugin_message_loop_); |
| 201 consumer_proxy_ = new FrameConsumerProxy(view_.get(), plugin_message_loop_); | |
| 202 rectangle_decoder_ = new RectangleUpdateDecoder( | 201 rectangle_decoder_ = new RectangleUpdateDecoder( |
| 203 context_.decode_message_loop(), consumer_proxy_.get()); | 202 context_.decode_message_loop(), consumer_proxy_.get()); |
| 204 | 203 view_.reset(new PepperView(this, &context_, rectangle_decoder_.get())); |
| 205 // Default to a medium grey. | 204 consumer_proxy_->Attach(view_.get()); |
| 206 view_->SetSolidFill(0xFFCDCDCD); | |
| 207 | 205 |
| 208 return true; | 206 return true; |
| 209 } | 207 } |
| 210 | 208 |
| 211 void ChromotingInstance::HandleMessage(const pp::Var& message) { | 209 void ChromotingInstance::HandleMessage(const pp::Var& message) { |
| 212 if (!message.is_string()) { | 210 if (!message.is_string()) { |
| 213 LOG(ERROR) << "Received a message that is not a string."; | 211 LOG(ERROR) << "Received a message that is not a string."; |
| 214 return; | 212 return; |
| 215 } | 213 } |
| 216 | 214 |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 254 } else if (method == "releaseAllKeys") { | 252 } else if (method == "releaseAllKeys") { |
| 255 ReleaseAllKeys(); | 253 ReleaseAllKeys(); |
| 256 } | 254 } |
| 257 } | 255 } |
| 258 | 256 |
| 259 void ChromotingInstance::DidChangeView(const pp::Rect& position, | 257 void ChromotingInstance::DidChangeView(const pp::Rect& position, |
| 260 const pp::Rect& clip) { | 258 const pp::Rect& clip) { |
| 261 DCHECK(plugin_message_loop_->BelongsToCurrentThread()); | 259 DCHECK(plugin_message_loop_->BelongsToCurrentThread()); |
| 262 | 260 |
| 263 SkISize new_size = SkISize::Make(position.width(), position.height()); | 261 SkISize new_size = SkISize::Make(position.width(), position.height()); |
| 264 if (view_->SetViewSize(new_size)) { | 262 SkIRect new_clip = |
| 265 if (mouse_input_filter_.get()) { | 263 SkIRect::MakeXYWH(clip.x(), clip.y(), clip.width(), clip.height()); |
| 266 mouse_input_filter_->set_input_size(new_size); | 264 |
| 267 } | 265 view_->SetView(new_size, new_clip); |
| 268 rectangle_decoder_->SetOutputSize(new_size); | 266 |
| 267 if (mouse_input_filter_.get()) { |
| 268 mouse_input_filter_->set_input_size(view_->get_view_size()); |
| 269 } | 269 } |
| 270 | |
| 271 rectangle_decoder_->UpdateClipRect( | |
| 272 SkIRect::MakeXYWH(clip.x(), clip.y(), clip.width(), clip.height())); | |
| 273 } | 270 } |
| 274 | 271 |
| 275 bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) { | 272 bool ChromotingInstance::HandleInputEvent(const pp::InputEvent& event) { |
| 276 DCHECK(plugin_message_loop_->BelongsToCurrentThread()); | 273 DCHECK(plugin_message_loop_->BelongsToCurrentThread()); |
| 277 | 274 |
| 278 if (!input_handler_.get()) | 275 if (!input_handler_.get()) |
| 279 return false; | 276 return false; |
| 280 | 277 |
| 281 // TODO(wez): When we have a good hook into Host dimensions changes, move | 278 // TODO(wez): When we have a good hook into Host dimensions changes, move |
| 282 // this there. | 279 // this there. |
| 283 // If |input_handler_| is valid, then |mouse_input_filter_| must also be | 280 // If |input_handler_| is valid, then |mouse_input_filter_| must also be |
| 284 // since they are constructed together as part of the input pipeline | 281 // since they are constructed together as part of the input pipeline |
| 285 mouse_input_filter_->set_output_size(view_->get_host_size()); | 282 mouse_input_filter_->set_output_size(view_->get_screen_size()); |
| 286 | 283 |
| 287 return input_handler_->HandleInputEvent(event); | 284 return input_handler_->HandleInputEvent(event); |
| 288 } | 285 } |
| 289 | 286 |
| 290 pp::Var ChromotingInstance::GetInstanceObject() { | 287 pp::Var ChromotingInstance::GetInstanceObject() { |
| 291 if (instance_object_.is_undefined()) { | 288 if (instance_object_.is_undefined()) { |
| 292 ChromotingScriptableObject* object = | 289 ChromotingScriptableObject* object = |
| 293 new ChromotingScriptableObject(this, plugin_message_loop_); | 290 new ChromotingScriptableObject(this, plugin_message_loop_); |
| 294 object->Init(); | 291 object->Init(); |
| 295 | 292 |
| (...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 542 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); | 539 scoped_ptr<base::DictionaryValue> data(new base::DictionaryValue()); |
| 543 data->SetString("message", message); | 540 data->SetString("message", message); |
| 544 PostChromotingMessage("logDebugMessage", data.Pass()); | 541 PostChromotingMessage("logDebugMessage", data.Pass()); |
| 545 | 542 |
| 546 scriptable_object->LogDebugInfo(message); | 543 scriptable_object->LogDebugInfo(message); |
| 547 } | 544 } |
| 548 g_logging_to_plugin = false; | 545 g_logging_to_plugin = false; |
| 549 } | 546 } |
| 550 | 547 |
| 551 } // namespace remoting | 548 } // namespace remoting |
| OLD | NEW |