intermediate implementation with more support for input

This commit is contained in:
Hartmut Seichter 2019-01-09 16:24:16 +01:00
parent 39663f40ef
commit dfe26d9424
9 changed files with 103 additions and 34 deletions

View file

@ -10,6 +10,7 @@ set(hdrs
include/pw/core/quaternion.hpp include/pw/core/quaternion.hpp
include/pw/core/serialize.hpp include/pw/core/serialize.hpp
include/pw/core/image.hpp include/pw/core/image.hpp
include/pw/core/point.hpp
include/pw/core/size.hpp include/pw/core/size.hpp
include/pw/core/timer.hpp include/pw/core/timer.hpp
include/pw/core/globals.hpp include/pw/core/globals.hpp

View file

@ -40,13 +40,13 @@ class debug {
public: public:
enum level { enum level {
kNone, //!< nothing will be logged, even no errors none, //!< nothing will be logged, even no errors
kError, //!< only errors will be logged error, //!< only errors will be logged
kWarning, //!< log warnings (non-critical errors) warning, //!< log warnings (non-critical errors)
kMessage, //!< log messages (something to note but not an error) message, //!< log messages (something to note but not an error)
kNotify, //!< log some more information notification, //!< log some more information
kInfo, //!< log verbose information info, //!< log verbose information
kAll = 0xFF //!< log absolutely everything all = 0xFF //!< log absolutely everything
}; };
/** /**
@ -94,11 +94,11 @@ public:
* @brief get the stream interface of the logger * @brief get the stream interface of the logger
* @return return a temporary object that will write and flush the logger * @return return a temporary object that will write and flush the logger
*/ */
static stream s(enum level level = kInfo); static stream s(enum level level = info);
inline static stream d() { return s(debug::kInfo); } inline static stream d() { return s(debug::info); }
inline static stream e() { return s(debug::kError); } inline static stream e() { return s(debug::error); }
inline static stream w() { return s(debug::kWarning); } inline static stream w() { return s(debug::warning); }
/** /**
* @brief returns the instance of the logger * @brief returns the instance of the logger
@ -115,10 +115,11 @@ public:
typedef std::function<void(const char*)> Callback; typedef std::function<void(const char*)> Callback;
typedef std::vector<Callback> CallbackList; typedef std::vector<Callback> CallbackList;
~debug();
protected: protected:
debug(); debug();
~debug();
CallbackList _callbacks; CallbackList _callbacks;
enum level _level; enum level _level;

View file

@ -0,0 +1,29 @@
#ifndef PW_CORE_POINT_HPP
#define PW_CORE_SIZE_HPP
#include <pw/core/globals.hpp>
namespace pw {
template <typename T_>
struct point_ {
T_ p[2] = { 0, 0 };
point_() = default;
point_(T_ x,T_ y) : p( {x,y} ) {}
const T_ x() { return p[0]; }
const T_ y() { return p[1]; }
};
typedef point_<real_t> point;
typedef point_<int> pointi;
typedef point_<float> pointf;
typedef point_<float> pointd;
}
#endif

View file

@ -35,6 +35,8 @@ struct size_ {
T_ dim[2] = { 0, 0 }; T_ dim[2] = { 0, 0 };
size_() = default;
size_(T_ w,T_ h) : dim( { w, h }) {} size_(T_ w,T_ h) : dim( { w, h }) {}
const T_ width() { return dim[0]; } const T_ width() { return dim[0]; }

View file

@ -60,7 +60,7 @@ struct tpFileLog {
debug::debug() : debug::debug() :
_level(debug::kNotify) _level(debug::notification)
{ {
#if defined(_WINCE) #if defined(_WINCE)
_callbacks.add(new tpFileLog()); _callbacks.add(new tpFileLog());

View file

@ -3,6 +3,7 @@
#include "pw/core/vector.hpp" #include "pw/core/vector.hpp"
#include "pw/core/quaternion.hpp" #include "pw/core/quaternion.hpp"
#include "pw/core/axisangle.hpp" #include "pw/core/axisangle.hpp"
#include "pw/core/debug.hpp"
namespace pw { namespace pw {
@ -50,6 +51,13 @@ void script_core::load(sol::table &ns)
"axis",scripting::property(&axisangled::axis,&axisangled::set_axis), "axis",scripting::property(&axisangled::axis,&axisangled::set_axis),
"angle",scripting::property(&axisangled::angle,&axisangled::set_angle) "angle",scripting::property(&axisangled::angle,&axisangled::set_angle)
); );
ns.new_usertype<debug>("debug",
"new",sol::no_constructor,
"get",&debug::get
);
} }

View file

@ -2,6 +2,7 @@
#define PW_SYSTEM_INPUT_HPP #define PW_SYSTEM_INPUT_HPP
#include <pw/core/globals.hpp> #include <pw/core/globals.hpp>
#include <pw/core/point.hpp>
namespace pw { namespace pw {
@ -10,14 +11,19 @@ public:
static input& get(); static input& get();
point mouse_position() const { return _mouse_position; }
protected: protected:
struct impl; friend class window;
std::unique_ptr<impl> _impl;
private:
input(); input();
~input() = default; ~input() = default;
private:
point _mouse_position;
}; };
} }

View file

@ -1,24 +1,11 @@
#include "pw/system/input.hpp" #include "pw/system/input.hpp"
#include "GLFW/glfw3.h"
namespace pw { namespace pw {
struct input::impl {
GLFWwindow *_window;
};
input::input() input::input()
: _impl(new input::impl())
{ {
} }
input &input::get() input &input::get()
{ {
static input instance; static input instance;
@ -26,7 +13,4 @@ input &input::get()
} }
} }

View file

@ -35,15 +35,43 @@ struct window::impl {
// window_context _context; // window_context _context;
static void drop_callback(GLFWwindow* window, int count, const char** paths)
{
std::cout << __FUNCTION__ << std::endl;
}
static void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
{
std::cout << __FUNCTION__ << std::endl;
}
static void mouse_button_callback(GLFWwindow* window, int button, int action, int mods)
{
std::cout << __FUNCTION__ << std::endl;
// input::get()._mouse_position
}
static void cursor_pos_callback(GLFWwindow* window, double xpos, double ypos)
{
input::get()._mouse_position = point(xpos,ypos);
}
static void key_callback(GLFWwindow *window,int key, int scancode, int action, int mods) static void key_callback(GLFWwindow *window,int key, int scancode, int action, int mods)
{ {
std::cout << __FUNCTION__ << std::endl;
} }
static void character_callback(GLFWwindow* window, unsigned int codepoint)
{
std::cout << __FUNCTION__ << std::endl;
}
static void charmods_callback(GLFWwindow* window, unsigned int codepoint, int mods)
{
std::cout << __FUNCTION__ << std::endl;
}
static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
static void framebuffer_size_callback(GLFWwindow* window, int width, int height)
{ {
window::impl* impl = static_cast<window::impl*>(glfwGetWindowUserPointer(window)); window::impl* impl = static_cast<window::impl*>(glfwGetWindowUserPointer(window));
// impl->on_resize(width,height); // impl->on_resize(width,height);
@ -62,6 +90,16 @@ struct window::impl {
glfwSetFramebufferSizeCallback(_window, window::impl::framebuffer_size_callback); glfwSetFramebufferSizeCallback(_window, window::impl::framebuffer_size_callback);
glfwSetKeyCallback(_window, window::impl::key_callback); glfwSetKeyCallback(_window, window::impl::key_callback);
glfwSetCharCallback(_window, character_callback);
glfwSetCharModsCallback(_window, charmods_callback);
glfwSetScrollCallback(_window, scroll_callback);
glfwSetDropCallback(_window, drop_callback);
glfwSetCursorPosCallback(_window, cursor_pos_callback);
glfwSetMouseButtonCallback(_window, mouse_button_callback);
glfwSetScrollCallback(_window, scroll_callback);
#if 0 #if 0