diff --git a/core/base/Node.h b/core/base/Node.h index 937367bb..0f203703 100644 --- a/core/base/Node.h +++ b/core/base/Node.h @@ -366,21 +366,21 @@ namespace easy2d void DrawBorder(); protected: - String name_; - size_t hash_name_; - float display_opacity_; - float real_opacity_; - int order_; - bool visible_; - bool clip_enabled_; - bool dirty_sort_; - bool dirty_transform_; - Node* parent_; - Color border_color_; - Children children_; - cpGeometry border_; - Transform transform_; - math::Matrix initial_matrix_; - math::Matrix final_matrix_; + String name_; + size_t hash_name_; + float display_opacity_; + float real_opacity_; + int order_; + bool visible_; + bool clip_enabled_; + bool dirty_sort_; + bool dirty_transform_; + Node* parent_; + Color border_color_; + Children children_; + cpGeometry border_; + Transform transform_; + math::Matrix initial_matrix_; + math::Matrix final_matrix_; }; } diff --git a/core/base/logs.cpp b/core/base/logs.cpp new file mode 100644 index 00000000..f84d9dc1 --- /dev/null +++ b/core/base/logs.cpp @@ -0,0 +1,155 @@ +// Copyright (c) 2016-2018 Easy2D - Nomango +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in +// all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. + +#pragma once +#include "logs.h" +#include +#include + +namespace easy2d +{ + namespace logs + { + namespace + { + bool enabled = true; + + void Out(std::ostream& stream, const char* output) + { + stream << output; + ::OutputDebugStringA(output); + } + + void OutPrefix(std::stringstream& ss) + { + std::time_t unix = ::time(NULL); + struct tm tmbuf; + localtime_s(&tmbuf, &unix); + ss << std::put_time(&tmbuf, "[easy2d] %H:%M:%S "); + } + + void Output(std::ostream& stream, const char* prompt, const char* format, va_list args) + { + if (!enabled) + return; + + size_t len = ::_vscprintf(format, args) + 1; + char* buffer = new char[len]; + ::_vsnprintf_s(buffer, len, len, format, args); + + std::stringstream ss; + OutPrefix(ss); + ss << prompt << buffer; + Out(stream, ss.str().c_str()); + + delete[] buffer; + } + + void OutputLine(std::ostream& stream, const char* prompt, const char* format, va_list args) + { + if (!enabled) + return; + + Output(stream, prompt, format, args); + Out(stream, "\r\n"); + } + } + + void easy2d::logs::Enable() + { + enabled = true; + } + + void easy2d::logs::Disable() + { + enabled = false; + } + + void Print(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + Output(std::cout, "", format, args); + + va_end(args); + } + + void Println(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + OutputLine(std::cout, "", format, args); + + va_end(args); + } + + void Warning(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + Output(std::cerr, "Warning: ", format, args); + + va_end(args); + } + + void Warningln(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + OutputLine(std::cerr, "Warning: ", format, args); + + va_end(args); + } + + void Error(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + Output(std::cerr, "Error: ", format, args); + + va_end(args); + } + + void Errorln(const char* format, ...) + { + va_list args = nullptr; + va_start(args, format); + + OutputLine(std::cerr, "Error: ", format, args); + + va_end(args); + } + + void Errorln(HRESULT hr) + { + Errorln("failure with HRESULT of %08X", hr); + } + + void Errorln(HRESULT hr, const char* output) + { + Errorln("failure with HRESULT of %08X: %s", hr, output); + } + } +} diff --git a/core/base/logs.h b/core/base/logs.h index ea82db6e..525ba414 100644 --- a/core/base/logs.h +++ b/core/base/logs.h @@ -20,9 +20,7 @@ #pragma once #include "macros.h" -#include #include -#include #include #include @@ -38,112 +36,25 @@ namespace easy2d { namespace logs { - namespace - { - inline void Out(std::ostream& stream, const char* output) - { - stream << output; - ::OutputDebugStringA(output); - } + void Enable(); - inline void OutPrefix(std::stringstream& ss) - { - std::time_t unix = ::time(NULL); - struct tm tmbuf; - localtime_s(&tmbuf, &unix); - ss << std::put_time(&tmbuf, "[easy2d] %H:%M:%S "); - } + void Disable(); - inline void Output(std::ostream& stream, const char* prompt, const char* format, va_list args) - { - size_t len = ::_vscprintf(format, args) + 1; - char* buffer = new char[len]; - ::_vsnprintf_s(buffer, len, len, format, args); + void Print(const char* format, ...); - std::stringstream ss; - OutPrefix(ss); - ss << prompt << buffer; - Out(stream, ss.str().c_str()); + void Println(const char* format, ...); - delete[] buffer; - } + void Warning(const char* format, ...); - inline void OutputLine(std::ostream& stream, const char* prompt, const char* format, va_list args) - { - Output(stream, prompt, format, args); - Out(stream, "\r\n"); - } - } + void Warningln(const char* format, ...); - inline void Print(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); + void Error(const char* format, ...); - Output(std::cout, "", format, args); + void Errorln(const char* format, ...); - va_end(args); - } + void Errorln(HRESULT hr); - inline void Println(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); - - OutputLine(std::cout, "", format, args); - - va_end(args); - } - - inline void Warning(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); - - Output(std::cerr, "Warning: ", format, args); - - va_end(args); - } - - inline void Warningln(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); - - OutputLine(std::cerr, "Warning: ", format, args); - - va_end(args); - } - - inline void Error(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); - - Output(std::cerr, "Error: ", format, args); - - va_end(args); - } - - inline void Errorln(const char* format, ...) - { - va_list args = nullptr; - va_start(args, format); - - OutputLine(std::cerr, "Error: ", format, args); - - va_end(args); - } - - inline void Errorln(HRESULT hr) - { - Errorln("failure with HRESULT of %08X", hr); - } - - inline void Errorln(HRESULT hr, const char* output) - { - Errorln("failure with HRESULT of %08X: %s", hr, output); - } + void Errorln(HRESULT hr, const char* output); } inline void ThrowIfFailed(HRESULT hr) diff --git a/project/vs2013/Easy2D.vcxproj b/project/vs2013/Easy2D.vcxproj index 36052129..499ec2c7 100644 --- a/project/vs2013/Easy2D.vcxproj +++ b/project/vs2013/Easy2D.vcxproj @@ -88,6 +88,7 @@ + diff --git a/project/vs2013/Easy2D.vcxproj.filters b/project/vs2013/Easy2D.vcxproj.filters index d9f2d008..a67d5849 100644 --- a/project/vs2013/Easy2D.vcxproj.filters +++ b/project/vs2013/Easy2D.vcxproj.filters @@ -288,5 +288,8 @@ base + + base + \ No newline at end of file diff --git a/project/vs2015/Easy2D.vcxproj b/project/vs2015/Easy2D.vcxproj index 43a9b87c..30953b10 100644 --- a/project/vs2015/Easy2D.vcxproj +++ b/project/vs2015/Easy2D.vcxproj @@ -88,6 +88,7 @@ + diff --git a/project/vs2015/Easy2D.vcxproj.filters b/project/vs2015/Easy2D.vcxproj.filters index d9f2d008..a67d5849 100644 --- a/project/vs2015/Easy2D.vcxproj.filters +++ b/project/vs2015/Easy2D.vcxproj.filters @@ -288,5 +288,8 @@ base + + base + \ No newline at end of file diff --git a/project/vs2017/Easy2D.vcxproj b/project/vs2017/Easy2D.vcxproj index e1f9ad5c..1ea1824c 100644 --- a/project/vs2017/Easy2D.vcxproj +++ b/project/vs2017/Easy2D.vcxproj @@ -88,6 +88,7 @@ + diff --git a/project/vs2017/Easy2D.vcxproj.filters b/project/vs2017/Easy2D.vcxproj.filters index d9f2d008..a67d5849 100644 --- a/project/vs2017/Easy2D.vcxproj.filters +++ b/project/vs2017/Easy2D.vcxproj.filters @@ -288,5 +288,8 @@ base + + base + \ No newline at end of file