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

Unified Diff: chrome/renderer/render_widget_fullscreen_pepper.cc

Issue 6709032: Move render_widget files to content. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 9 years, 9 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
« no previous file with comments | « chrome/renderer/render_widget_fullscreen_pepper.h ('k') | chrome/renderer/render_widget_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/renderer/render_widget_fullscreen_pepper.cc
===================================================================
--- chrome/renderer/render_widget_fullscreen_pepper.cc (revision 78695)
+++ chrome/renderer/render_widget_fullscreen_pepper.cc (working copy)
@@ -1,395 +0,0 @@
-// Copyright (c) 2010 The Chromium Authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-#include "chrome/renderer/render_widget_fullscreen_pepper.h"
-
-#include "chrome/common/render_messages.h"
-#include "chrome/renderer/render_thread.h"
-#include "content/renderer/ggl.h"
-#include "content/renderer/gpu_channel_host.h"
-#include "content/renderer/pepper_platform_context_3d_impl.h"
-#include "gpu/command_buffer/client/gles2_implementation.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebCursorInfo.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebSize.h"
-#include "third_party/WebKit/Source/WebKit/chromium/public/WebWidget.h"
-#include "webkit/plugins/ppapi/plugin_delegate.h"
-#include "webkit/plugins/ppapi/ppapi_plugin_instance.h"
-
-using WebKit::WebCanvas;
-using WebKit::WebCompositionUnderline;
-using WebKit::WebCursorInfo;
-using WebKit::WebInputEvent;
-using WebKit::WebRect;
-using WebKit::WebSize;
-using WebKit::WebString;
-using WebKit::WebTextDirection;
-using WebKit::WebTextInputType;
-using WebKit::WebVector;
-using WebKit::WebWidget;
-
-namespace {
-
-// WebWidget that simply wraps the pepper plugin.
-class PepperWidget : public WebWidget {
- public:
- PepperWidget(webkit::ppapi::PluginInstance* plugin,
- RenderWidgetFullscreenPepper* widget)
- : plugin_(plugin),
- widget_(widget),
- cursor_(WebCursorInfo::TypePointer) {
- }
-
- // WebWidget API
- virtual void close() {
- delete this;
- }
-
- virtual WebSize size() {
- return size_;
- }
-
- virtual void resize(const WebSize& size) {
- size_ = size;
- WebRect plugin_rect(0, 0, size_.width, size_.height);
- plugin_->ViewChanged(plugin_rect, plugin_rect);
- widget_->Invalidate();
- }
-
- virtual void animate() {
- }
-
- virtual void layout() {
- }
-
- virtual void paint(WebCanvas* canvas, const WebRect& rect) {
- WebRect plugin_rect(0, 0, size_.width, size_.height);
- plugin_->Paint(canvas, plugin_rect, rect);
- }
-
- virtual void composite(bool finish) {
- ggl::Context* context = widget_->context();
- DCHECK(context);
- gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context);
- unsigned int texture = plugin_->GetBackingTextureId();
- gl->BindTexture(GL_TEXTURE_2D, texture);
- gl->DrawArrays(GL_TRIANGLES, 0, 3);
- ggl::SwapBuffers(context);
- }
-
- virtual void themeChanged() {
- NOTIMPLEMENTED();
- }
-
- virtual bool handleInputEvent(const WebInputEvent& event) {
- return plugin_->HandleInputEvent(event, &cursor_);
- }
-
- virtual void mouseCaptureLost() {
- NOTIMPLEMENTED();
- }
-
- virtual void setFocus(bool focus) {
- NOTIMPLEMENTED();
- }
-
- // TODO(piman): figure out IME and implement these if necessary.
- virtual bool setComposition(
- const WebString& text,
- const WebVector<WebCompositionUnderline>& underlines,
- int selectionStart,
- int selectionEnd) {
- return false;
- }
-
- virtual bool confirmComposition() {
- return false;
- }
-
- virtual bool confirmComposition(const WebString& text) {
- return false;
- }
-
- virtual WebTextInputType textInputType() {
- return WebKit::WebTextInputTypeNone;
- }
-
- virtual WebRect caretOrSelectionBounds() {
- return WebRect();
- }
-
- virtual void setTextDirection(WebTextDirection) {
- }
-
- virtual bool isAcceleratedCompositingActive() const {
- return widget_->context() && (plugin_->GetBackingTextureId() != 0);
- }
-
- private:
- scoped_refptr<webkit::ppapi::PluginInstance> plugin_;
- RenderWidgetFullscreenPepper* widget_;
- WebSize size_;
- WebCursorInfo cursor_;
-
- DISALLOW_COPY_AND_ASSIGN(PepperWidget);
-};
-
-} // anonymous namespace
-
-// static
-RenderWidgetFullscreenPepper* RenderWidgetFullscreenPepper::Create(
- int32 opener_id, RenderThreadBase* render_thread,
- webkit::ppapi::PluginInstance* plugin) {
- DCHECK_NE(MSG_ROUTING_NONE, opener_id);
- scoped_refptr<RenderWidgetFullscreenPepper> widget(
- new RenderWidgetFullscreenPepper(render_thread, plugin));
- widget->Init(opener_id);
- return widget.release();
-}
-
-RenderWidgetFullscreenPepper::RenderWidgetFullscreenPepper(
- RenderThreadBase* render_thread,
- webkit::ppapi::PluginInstance* plugin)
- : RenderWidgetFullscreen(render_thread),
- plugin_(plugin),
- context_(NULL),
- buffer_(0),
- program_(0) {
-}
-
-RenderWidgetFullscreenPepper::~RenderWidgetFullscreenPepper() {
- DestroyContext();
-}
-
-void RenderWidgetFullscreenPepper::Invalidate() {
- InvalidateRect(gfx::Rect(size_.width(), size_.height()));
-}
-
-void RenderWidgetFullscreenPepper::InvalidateRect(const WebKit::WebRect& rect) {
- if (CheckCompositing()) {
- scheduleComposite();
- } else {
- didInvalidateRect(rect);
- }
-}
-
-void RenderWidgetFullscreenPepper::ScrollRect(
- int dx, int dy, const WebKit::WebRect& rect) {
- if (CheckCompositing()) {
- scheduleComposite();
- } else {
- didScrollRect(dx, dy, rect);
- }
-}
-
-void RenderWidgetFullscreenPepper::Destroy() {
- // This function is called by the plugin instance as it's going away, so reset
- // plugin_ to NULL to avoid calling into a dangling pointer e.g. on Close().
- plugin_ = NULL;
- Send(new ViewHostMsg_Close(routing_id_));
-}
-
-webkit::ppapi::PluginDelegate::PlatformContext3D*
-RenderWidgetFullscreenPepper::CreateContext3D() {
- if (!context_) {
- CreateContext();
- }
- if (!context_)
- return NULL;
- return new PlatformContext3DImpl(context_);
-}
-
-void RenderWidgetFullscreenPepper::DidInitiatePaint() {
- if (plugin_)
- plugin_->ViewInitiatedPaint();
-}
-
-void RenderWidgetFullscreenPepper::DidFlushPaint() {
- if (plugin_)
- plugin_->ViewFlushedPaint();
-}
-
-void RenderWidgetFullscreenPepper::Close() {
- // If the fullscreen window is closed (e.g. user pressed escape), reset to
- // normal mode.
- if (plugin_)
- plugin_->SetFullscreen(false, false);
-}
-
-webkit::ppapi::PluginInstance*
-RenderWidgetFullscreenPepper::GetBitmapForOptimizedPluginPaint(
- const gfx::Rect& paint_bounds,
- TransportDIB** dib,
- gfx::Rect* location,
- gfx::Rect* clip) {
- if (plugin_ &&
- plugin_->GetBitmapForOptimizedPluginPaint(paint_bounds, dib,
- location, clip))
- return plugin_;
- return NULL;
-}
-
-void RenderWidgetFullscreenPepper::OnResize(const gfx::Size& size,
- const gfx::Rect& resizer_rect) {
- if (context_) {
- gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context_);
-#if defined(OS_MACOSX)
- ggl::ResizeOnscreenContext(context_, size);
-#else
- gl->ResizeCHROMIUM(size.width(), size.height());
-#endif
- gl->Viewport(0, 0, size.width(), size.height());
- }
- RenderWidget::OnResize(size, resizer_rect);
-}
-
-WebWidget* RenderWidgetFullscreenPepper::CreateWebWidget() {
- return new PepperWidget(plugin_, this);
-}
-
-void RenderWidgetFullscreenPepper::CreateContext() {
- DCHECK(!context_);
- RenderThread* render_thread = RenderThread::current();
- DCHECK(render_thread);
- GpuChannelHost* host = render_thread->EstablishGpuChannelSync();
- if (!host)
- return;
- const int32 attribs[] = {
- ggl::GGL_ALPHA_SIZE, 8,
- ggl::GGL_DEPTH_SIZE, 0,
- ggl::GGL_STENCIL_SIZE, 0,
- ggl::GGL_SAMPLES, 0,
- ggl::GGL_SAMPLE_BUFFERS, 0,
- ggl::GGL_NONE,
- };
- context_ = ggl::CreateViewContext(
- host,
- routing_id(),
- "GL_OES_packed_depth_stencil GL_OES_depth24",
- attribs);
- if (!context_ || !InitContext()) {
- DestroyContext();
- return;
- }
- ggl::SetSwapBuffersCallback(
- context_,
- NewCallback(this, &RenderWidgetFullscreenPepper::DidFlushPaint));
-}
-
-void RenderWidgetFullscreenPepper::DestroyContext() {
- if (context_) {
- gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context_);
- if (program_) {
- gl->DeleteProgram(program_);
- program_ = 0;
- }
- if (buffer_) {
- gl->DeleteBuffers(1, &buffer_);
- buffer_ = 0;
- }
- ggl::DestroyContext(context_);
- context_ = NULL;
- }
-}
-
-namespace {
-
-const char kVertexShader[] =
- "attribute vec2 in_tex_coord;\n"
- "varying vec2 tex_coord;\n"
- "void main() {\n"
- " gl_Position = vec4(in_tex_coord.x * 2. - 1.,\n"
- " in_tex_coord.y * 2. - 1.,\n"
- " 0.,\n"
- " 1.);\n"
- " tex_coord = vec2(in_tex_coord.x, in_tex_coord.y);\n"
- "}\n";
-
-const char kFragmentShader[] =
- "precision mediump float;\n"
- "varying vec2 tex_coord;\n"
- "uniform sampler2D in_texture;\n"
- "void main() {\n"
- " gl_FragColor = texture2D(in_texture, tex_coord);\n"
- "}\n";
-
-GLuint CreateShaderFromSource(gpu::gles2::GLES2Implementation* gl,
- GLenum type,
- const char* source) {
- GLuint shader = gl->CreateShader(type);
- gl->ShaderSource(shader, 1, &source, NULL);
- gl->CompileShader(shader);
- int status;
- gl->GetShaderiv(shader, GL_COMPILE_STATUS, &status);
- if (!status) {
- int size = 0;
- gl->GetShaderiv(shader, GL_INFO_LOG_LENGTH, &size);
- scoped_array<char> log(new char[size]);
- gl->GetShaderInfoLog(shader, size, NULL, log.get());
- DLOG(ERROR) << "Compilation failed: " << log.get();
- gl->DeleteShader(shader);
- shader = 0;
- }
- return shader;
-}
-
-const float kTexCoords[] = {
- 0.f, 0.f,
- 0.f, 2.f,
- 2.f, 0.f,
-};
-
-} // anonymous namespace
-
-bool RenderWidgetFullscreenPepper::InitContext() {
- gpu::gles2::GLES2Implementation* gl = ggl::GetImplementation(context_);
- program_ = gl->CreateProgram();
-
- GLuint vertex_shader =
- CreateShaderFromSource(gl, GL_VERTEX_SHADER, kVertexShader);
- if (!vertex_shader)
- return false;
- gl->AttachShader(program_, vertex_shader);
- gl->DeleteShader(vertex_shader);
-
- GLuint fragment_shader =
- CreateShaderFromSource(gl, GL_FRAGMENT_SHADER, kFragmentShader);
- if (!fragment_shader)
- return false;
- gl->AttachShader(program_, fragment_shader);
- gl->DeleteShader(fragment_shader);
-
- gl->BindAttribLocation(program_, 0, "in_tex_coord");
- gl->LinkProgram(program_);
- int status;
- gl->GetProgramiv(program_, GL_LINK_STATUS, &status);
- if (!status) {
- int size = 0;
- gl->GetProgramiv(program_, GL_INFO_LOG_LENGTH, &size);
- scoped_array<char> log(new char[size]);
- gl->GetProgramInfoLog(program_, size, NULL, log.get());
- DLOG(ERROR) << "Link failed: " << log.get();
- return false;
- }
- gl->UseProgram(program_);
- int texture_location = gl->GetUniformLocation(program_, "in_texture");
- gl->Uniform1i(texture_location, 0);
-
- gl->GenBuffers(1, &buffer_);
- gl->BindBuffer(GL_ARRAY_BUFFER, buffer_);
- gl->BufferData(GL_ARRAY_BUFFER,
- sizeof(kTexCoords),
- kTexCoords,
- GL_STATIC_DRAW);
- gl->VertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, NULL);
- gl->EnableVertexAttribArray(0);
- return true;
-}
-
-bool RenderWidgetFullscreenPepper::CheckCompositing() {
- bool compositing = webwidget_->isAcceleratedCompositingActive();
- if (compositing != is_accelerated_compositing_active_) {
- didActivateAcceleratedCompositing(compositing);
- }
- return compositing;
-}
« no previous file with comments | « chrome/renderer/render_widget_fullscreen_pepper.h ('k') | chrome/renderer/render_widget_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698