Browse Source

nacl: quick and dirty mouse support.

legacy
Sam Hocevar sam 13 years ago
parent
commit
e5df84100b
4 changed files with 30 additions and 9 deletions
  1. +21
    -1
      src/platform/nacl/nacl_instance.cpp
  2. +4
    -5
      src/platform/nacl/nacl_instance.h
  3. +2
    -0
      src/platform/nacl/opengl_context.h
  4. +3
    -3
      test/tutorial/tut03.cpp

+ 21
- 1
src/platform/nacl/nacl_instance.cpp View File

@@ -17,6 +17,7 @@
#include <ppapi/cpp/var.h>
#include <ppapi/cpp/module.h>
#include <ppapi/cpp/completion_callback.h>
#include <ppapi/cpp/input_event.h>

#include "core.h"
#include "debug/quad.h"
@@ -31,7 +32,7 @@ NaClInstance::NaClInstance(PP_Instance instance)
: pp::Instance(instance),
m_size(0, 0)
{
;
RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE);
}

NaClInstance::~NaClInstance()
@@ -101,6 +102,25 @@ void NaClInstance::DidChangeView(const pp::Rect& position, const pp::Rect& clip)
DrawSelf();
}

bool NaClInstance::HandleInputEvent(const pp::InputEvent& event)
{
switch (event.GetType())
{
case PP_INPUTEVENT_TYPE_MOUSEDOWN:
Input::SetMouseButton(pp::MouseInputEvent(event).GetButton());
break;
case PP_INPUTEVENT_TYPE_MOUSEUP:
Input::UnsetMouseButton(pp::MouseInputEvent(event).GetButton());
break;
case PP_INPUTEVENT_TYPE_MOUSEMOVE:
Input::SetMousePos(ivec2(pp::MouseInputEvent(event).GetPosition().x(), opengl_context_->GetSize().height() - 1 - pp::MouseInputEvent(event).GetPosition().y()));
break;
default:
break;
}
return true;
}

void NaClInstance::DrawSelf()
{
if (opengl_context_ == NULL)


+ 4
- 5
src/platform/nacl/nacl_instance.h View File

@@ -36,14 +36,13 @@ class NaClInstance : public pp::Instance {
// Bind and publish the module's methods to JavaScript.
//void InitializeMethods(ScriptingBridge* bridge);


// Called to draw the contents of the module's browser area.
void DrawSelf();
virtual bool HandleInputEvent(const pp::InputEvent& event);

// private:
// Browser connectivity and scripting support.
// ScriptingBridge scripting_bridge_;
void DrawSelf();

SharedOpenGLContext opengl_context_;
SharedOpenGLContext opengl_context_;

ivec2 m_size;
};


+ 2
- 0
src/platform/nacl/opengl_context.h View File

@@ -61,6 +61,8 @@ class OpenGLContext : public pp::Graphics3DClient {
/// Resize the context.
void ResizeContext(const pp::Size& size);

pp::Size const& GetSize() { return size_; }

/// The OpenGL ES 2.0 interface.
const struct PPB_OpenGLES2* gles2() const {
return gles2_interface_;


+ 3
- 3
test/tutorial/tut03.cpp View File

@@ -80,7 +80,7 @@ public:
m_deltascale[i] = 1.0;
m_dirty[i] = 2;
}
#if defined __CELLOS_LV2__ || defined __native_client__
#if defined __CELLOS_LV2__
//m_center = f64cmplx(-.22815528839841, -1.11514249704382);
//m_center = f64cmplx(0.001643721971153, 0.822467633298876);
m_center = f64cmplx(-0.65823419062254, .50221777363480);
@@ -178,7 +178,7 @@ public:
f64cmplx worldmouse = m_center + ScreenToWorldOffset(mousepos);

ivec3 buttons = Input::GetMouseButtons();
#if !defined __CELLOS_LV2__ && !defined __native_client__
#if !defined __CELLOS_LV2__
if ((buttons[0] || buttons[2]) && mousepos.x != -1)
{
double zoom = buttons[0] ? -0.0005 : 0.0005;
@@ -210,7 +210,7 @@ public:
zoom = 1e-14 / m_radius;
}
m_radius *= zoom;
#if !defined __CELLOS_LV2__ && !defined __native_client__
#if !defined __CELLOS_LV2__
m_center = (m_center - worldmouse) * zoom + worldmouse;
worldmouse = m_center + ScreenToWorldOffset(mousepos);
#endif


Loading…
Cancel
Save