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

Unified Diff: native_client_sdk/src/examples/api/mouse_lock/mouselock.cc

Issue 14607005: [NaCl SDK] Cleanup examples. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: feedback Created 7 years, 7 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
Index: native_client_sdk/src/examples/api/mouse_lock/mouselock.cc
diff --git a/native_client_sdk/src/examples/api/mouse_lock/mouselock.cc b/native_client_sdk/src/examples/api/mouse_lock/mouselock.cc
deleted file mode 100644
index 4305b18caa584176ad9100db17dc6f86388a2ee6..0000000000000000000000000000000000000000
--- a/native_client_sdk/src/examples/api/mouse_lock/mouselock.cc
+++ /dev/null
@@ -1,368 +0,0 @@
-// Copyright (c) 2012 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 <cmath>
-#include <cstdlib>
-#include <stdarg.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <algorithm>
-
-#include "mouselock.h"
-
-#ifdef WIN32
-#undef min
-#undef max
-#undef PostMessage
-#endif
-
-// Indicate the direction of the mouse location relative to the center of the
-// view. These values are used to determine which 2D quadrant the needle lies
-// in.
-typedef enum {
- kLeft = 0,
- kRight = 1,
- kUp = 2,
- kDown = 3
-} MouseDirection;
-
-namespace {
-const int kCentralSpotRadius = 5;
-const uint32_t kReturnKeyCode = 13;
-const uint32_t kBackgroundColor = 0xff606060;
-const uint32_t kForegroundColor = 0xfff08080;
-} // namespace
-
-namespace mouselock {
-
-MouseLockInstance::~MouseLockInstance() {
- free(background_scanline_);
- background_scanline_ = NULL;
-}
-
-bool MouseLockInstance::Init(uint32_t argc,
- const char* argn[],
- const char* argv[]) {
- RequestInputEvents(PP_INPUTEVENT_CLASS_MOUSE | PP_INPUTEVENT_CLASS_KEYBOARD);
- return true;
-}
-
-bool MouseLockInstance::HandleInputEvent(const pp::InputEvent& event) {
- switch (event.GetType()) {
- case PP_INPUTEVENT_TYPE_MOUSEDOWN: {
- if (mouse_locked_) {
- UnlockMouse();
- } else {
- LockMouse(
- callback_factory_.NewCallback(&MouseLockInstance::DidLockMouse));
- }
- return true;
- }
-
- case PP_INPUTEVENT_TYPE_MOUSEMOVE: {
- pp::MouseInputEvent mouse_event(event);
- mouse_movement_ = mouse_event.GetMovement();
- Paint();
- return true;
- }
-
- case PP_INPUTEVENT_TYPE_KEYDOWN: {
- pp::KeyboardInputEvent key_event(event);
-
- // Switch in and out of fullscreen when 'Enter' is hit
- if (key_event.GetKeyCode() == kReturnKeyCode) {
- // Ignore switch if in transition
- if (!is_context_bound_)
- return true;
-
- if (fullscreen_.IsFullscreen()) {
- if (!fullscreen_.SetFullscreen(false)) {
- Log("Could not leave fullscreen mode\n");
- } else {
- is_context_bound_ = false;
- }
- } else {
- if (!fullscreen_.SetFullscreen(true)) {
- Log("Could not enter fullscreen mode\n");
- } else {
- is_context_bound_ = false;
- }
- }
- }
- return true;
- }
-
- case PP_INPUTEVENT_TYPE_MOUSEUP:
- case PP_INPUTEVENT_TYPE_MOUSEENTER:
- case PP_INPUTEVENT_TYPE_MOUSELEAVE:
- case PP_INPUTEVENT_TYPE_WHEEL:
- case PP_INPUTEVENT_TYPE_RAWKEYDOWN:
- case PP_INPUTEVENT_TYPE_KEYUP:
- case PP_INPUTEVENT_TYPE_CHAR:
- case PP_INPUTEVENT_TYPE_CONTEXTMENU:
- case PP_INPUTEVENT_TYPE_IME_COMPOSITION_START:
- case PP_INPUTEVENT_TYPE_IME_COMPOSITION_UPDATE:
- case PP_INPUTEVENT_TYPE_IME_COMPOSITION_END:
- case PP_INPUTEVENT_TYPE_IME_TEXT:
- case PP_INPUTEVENT_TYPE_UNDEFINED:
- case PP_INPUTEVENT_TYPE_TOUCHSTART:
- case PP_INPUTEVENT_TYPE_TOUCHMOVE:
- case PP_INPUTEVENT_TYPE_TOUCHEND:
- case PP_INPUTEVENT_TYPE_TOUCHCANCEL:
- default:
- return false;
- }
-}
-
-void MouseLockInstance::DidChangeView(const pp::View& view) {
- // DidChangeView can get called for many reasons, so we only want to
- // rebuild the device context if we really need to.
-
- if ((size_ == view.GetRect().size()) &&
- (was_fullscreen_ == view.IsFullscreen()) && is_context_bound_) {
- Log("DidChangeView SKIP %d,%d FULL=%s CTX Bound=%s",
- view.GetRect().width(),
- view.GetRect().height(),
- view.IsFullscreen() ? "true" : "false",
- is_context_bound_ ? "true" : "false");
- return;
- }
-
- Log("DidChangeView DO %d,%d FULL=%s CTX Bound=%s",
- view.GetRect().width(),
- view.GetRect().height(),
- view.IsFullscreen() ? "true" : "false",
- is_context_bound_ ? "true" : "false");
-
- size_ = view.GetRect().size();
- device_context_ = pp::Graphics2D(this, size_, false);
- waiting_for_flush_completion_ = false;
-
- is_context_bound_ = BindGraphics(device_context_);
- if (!is_context_bound_) {
- Log("Could not bind to 2D context\n.");
- return;
- } else {
- Log("Bound to 2D context size %d,%d.\n", size_.width(), size_.height());
- }
-
- // Create a scanline for fill.
- delete[] background_scanline_;
- background_scanline_ = new uint32_t[size_.width()];
- uint32_t* bg_pixel = background_scanline_;
- for (int x = 0; x < size_.width(); ++x) {
- *bg_pixel++ = kBackgroundColor;
- }
-
- // Remember if we are fullscreen or not
- was_fullscreen_ = view.IsFullscreen();
-
- // Paint this context
- Paint();
-}
-
-void MouseLockInstance::MouseLockLost() {
- if (mouse_locked_) {
- Log("Mouselock unlocked.\n");
- mouse_locked_ = false;
- Paint();
- }
-}
-
-void MouseLockInstance::DidLockMouse(int32_t result) {
- mouse_locked_ = result == PP_OK;
- if (result != PP_OK) {
- Log("Mouselock failed with failed with error number %d.\n", result);
- }
- mouse_movement_.set_x(0);
- mouse_movement_.set_y(0);
- Paint();
-}
-
-void MouseLockInstance::DidFlush(int32_t result) {
- if (result != 0)
- Log("Flushed failed with error number %d.\n", result);
- waiting_for_flush_completion_ = false;
-}
-
-void MouseLockInstance::Paint() {
- // If we are already waiting to paint...
- if (waiting_for_flush_completion_) {
- return;
- }
-
- pp::ImageData image = PaintImage(size_);
- if (image.is_null()) {
- Log("Could not create image data\n");
- return;
- }
-
- device_context_.ReplaceContents(&image);
- waiting_for_flush_completion_ = true;
- device_context_.Flush(
- callback_factory_.NewCallback(&MouseLockInstance::DidFlush));
-}
-
-pp::ImageData MouseLockInstance::PaintImage(const pp::Size& size) {
- pp::ImageData image(this, PP_IMAGEDATAFORMAT_BGRA_PREMUL, size, false);
- if (image.is_null() || image.data() == NULL) {
- Log("Skipping image.\n");
- return image;
- }
-
- ClearToBackground(&image);
-
- DrawCenterSpot(&image, kForegroundColor);
- DrawNeedle(&image, kForegroundColor);
- return image;
-}
-
-void MouseLockInstance::ClearToBackground(pp::ImageData* image) {
- if (image == NULL) {
- Log("ClearToBackground with NULL image.");
- return;
- }
- if (background_scanline_ == NULL) {
- Log("ClearToBackground with no scanline.");
- return;
- }
- int image_height = image->size().height();
- int image_width = image->size().width();
-
- for (int y = 0; y < image_height; ++y) {
- uint32_t* scanline = image->GetAddr32(pp::Point(0, y));
- memcpy(scanline,
- background_scanline_,
- image_width * sizeof(*background_scanline_));
- }
-}
-
-void MouseLockInstance::DrawCenterSpot(pp::ImageData* image,
- uint32_t spot_color) {
- if (image == NULL) {
- Log("DrawCenterSpot with NULL image");
- return;
- }
- // Draw the center spot. The ROI is bounded by the size of the spot, plus
- // one pixel.
- int center_x = image->size().width() / 2;
- int center_y = image->size().height() / 2;
- int region_of_interest_radius = kCentralSpotRadius + 1;
-
- pp::Point left_top(std::max(0, center_x - region_of_interest_radius),
- std::max(0, center_y - region_of_interest_radius));
- pp::Point right_bottom(
- std::min(image->size().width(), center_x + region_of_interest_radius),
- std::min(image->size().height(), center_y + region_of_interest_radius));
- for (int y = left_top.y(); y < right_bottom.y(); ++y) {
- for (int x = left_top.x(); x < right_bottom.x(); ++x) {
- if (GetDistance(x, y, center_x, center_y) < kCentralSpotRadius) {
- *image->GetAddr32(pp::Point(x, y)) = spot_color;
- }
- }
- }
-}
-
-void MouseLockInstance::DrawNeedle(pp::ImageData* image,
- uint32_t needle_color) {
- if (image == NULL) {
- Log("DrawNeedle with NULL image");
- return;
- }
- if (GetDistance(mouse_movement_.x(), mouse_movement_.y(), 0, 0) <=
- kCentralSpotRadius) {
- return;
- }
-
- int abs_mouse_x = std::abs(mouse_movement_.x());
- int abs_mouse_y = std::abs(mouse_movement_.y());
- int center_x = image->size().width() / 2;
- int center_y = image->size().height() / 2;
- pp::Point vertex(mouse_movement_.x() + center_x,
- mouse_movement_.y() + center_y);
- pp::Point anchor_1;
- pp::Point anchor_2;
- MouseDirection direction = kLeft;
-
- if (abs_mouse_x >= abs_mouse_y) {
- anchor_1.set_x(center_x);
- anchor_1.set_y(center_y - kCentralSpotRadius);
- anchor_2.set_x(center_x);
- anchor_2.set_y(center_y + kCentralSpotRadius);
- direction = (mouse_movement_.x() < 0) ? kLeft : kRight;
- if (direction == kLeft)
- anchor_1.swap(anchor_2);
- } else {
- anchor_1.set_x(center_x + kCentralSpotRadius);
- anchor_1.set_y(center_y);
- anchor_2.set_x(center_x - kCentralSpotRadius);
- anchor_2.set_y(center_y);
- direction = (mouse_movement_.y() < 0) ? kUp : kDown;
- if (direction == kUp)
- anchor_1.swap(anchor_2);
- }
-
- pp::Point left_top(std::max(0, center_x - abs_mouse_x),
- std::max(0, center_y - abs_mouse_y));
- pp::Point right_bottom(
- std::min(image->size().width(), center_x + abs_mouse_x),
- std::min(image->size().height(), center_y + abs_mouse_y));
- for (int y = left_top.y(); y < right_bottom.y(); ++y) {
- for (int x = left_top.x(); x < right_bottom.x(); ++x) {
- bool within_bound_1 = ((y - anchor_1.y()) * (vertex.x() - anchor_1.x())) >
- ((vertex.y() - anchor_1.y()) * (x - anchor_1.x()));
- bool within_bound_2 = ((y - anchor_2.y()) * (vertex.x() - anchor_2.x())) <
- ((vertex.y() - anchor_2.y()) * (x - anchor_2.x()));
- bool within_bound_3 = (direction == kUp && y < center_y) ||
- (direction == kDown && y > center_y) ||
- (direction == kLeft && x < center_x) ||
- (direction == kRight && x > center_x);
-
- if (within_bound_1 && within_bound_2 && within_bound_3) {
- *image->GetAddr32(pp::Point(x, y)) = needle_color;
- }
- }
- }
-}
-
-void MouseLockInstance::Log(const char* format, ...) {
- static PPB_Console* console =
- (PPB_Console*)pp::Module::Get()->GetBrowserInterface(
- PPB_CONSOLE_INTERFACE);
-
- if (NULL == console)
- return;
- va_list args;
- va_start(args, format);
- char buf[512];
- vsnprintf(buf, sizeof(buf) - 1, format, args);
- buf[sizeof(buf) - 1] = '\0';
- va_end(args);
-
- pp::Var value(buf);
- console->Log(pp_instance(), PP_LOGLEVEL_ERROR, value.pp_var());
-}
-
-} // namespace mouselock
-
-// This object is the global object representing this plugin library as long
-// as it is loaded.
-class MouseLockModule : public pp::Module {
- public:
- MouseLockModule() : pp::Module() {}
- virtual ~MouseLockModule() {}
-
- // Override CreateInstance to create your customized Instance object.
- virtual pp::Instance* CreateInstance(PP_Instance instance) {
- return new mouselock::MouseLockInstance(instance);
- }
-};
-
-namespace pp {
-
-// Factory function for your specialization of the Module object.
-Module* CreateModule() { return new MouseLockModule(); }
-
-} // namespace pp
« no previous file with comments | « native_client_sdk/src/examples/api/mouse_lock/mouselock.h ('k') | native_client_sdk/src/examples/api/url_loader/example.dsc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698