X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Futil.hpp;h=2f17845d604d75f09e1ce7594a207f059c2ee475;hb=8a791cb2ab7c159aac440cd97fbf2ae75d79b31f;hp=f4e6e5ff23b66e63be37462b778d17e5241f904e;hpb=c392fff74872af6d4f165ff3f854d19f390ec0ee;p=apps%2Fagl-service-windowmanager-2017.git diff --git a/src/util.hpp b/src/util.hpp index f4e6e5f..2f17845 100644 --- a/src/util.hpp +++ b/src/util.hpp @@ -24,7 +24,8 @@ #include #ifndef DO_NOT_USE_AFB -extern "C" { +extern "C" +{ #include }; #endif @@ -34,7 +35,7 @@ extern "C" { #ifdef __GNUC__ #define ATTR_FORMAT(stringindex, firsttocheck) \ - __attribute__((format(printf, stringindex, firsttocheck))) + __attribute__((format(printf, stringindex, firsttocheck))) #define ATTR_NORETURN __attribute__((noreturn)) #else #define ATTR_FORMAT(stringindex, firsttocheck) @@ -44,18 +45,20 @@ extern "C" { #ifdef AFB_BINDING_VERSION #define lognotice(...) AFB_NOTICE(__VA_ARGS__) #define logerror(...) AFB_ERROR(__VA_ARGS__) -#define fatal(...) \ - do { \ - AFB_ERROR(__VA_ARGS__); \ - abort(); \ - } while (0) +#define fatal(...) \ + do \ + { \ + AFB_ERROR(__VA_ARGS__); \ + abort(); \ + } while (0) #else #define lognotice(...) #define logerror(...) -#define fatal(...) \ - do { \ - abort(); \ - } while (0) +#define fatal(...) \ + do \ + { \ + abort(); \ + } while (0) #endif #ifdef DEBUG_OUTPUT @@ -77,30 +80,87 @@ extern "C" { #define STN(N) \ ScopeTrace __attribute__((unused)) CONCAT(named_trace_scope_, __LINE__)(#N) -struct ScopeTrace { - thread_local static int indent; - char const *f{}; - explicit ScopeTrace(char const *func); - ~ScopeTrace(); +struct ScopeTrace +{ + thread_local static int indent; + char const *f{}; + explicit ScopeTrace(char const *func); + ~ScopeTrace(); }; #endif /** * @struct unique_fd */ -struct unique_fd { - int fd{-1}; - unique_fd() = default; - explicit unique_fd(int f) : fd{f} {} - operator int() const { return fd; } - ~unique_fd(); - unique_fd(unique_fd const &) = delete; - unique_fd &operator=(unique_fd const &) = delete; - unique_fd(unique_fd &&o) : fd(o.fd) { o.fd = -1; } - unique_fd &operator=(unique_fd &&o) { - std::swap(this->fd, o.fd); - return *this; - } +struct unique_fd +{ + int fd{-1}; + unique_fd() = default; + explicit unique_fd(int f) : fd{f} {} + operator int() const { return fd; } + ~unique_fd(); + unique_fd(unique_fd const &) = delete; + unique_fd &operator=(unique_fd const &) = delete; + unique_fd(unique_fd &&o) : fd(o.fd) { o.fd = -1; } + unique_fd &operator=(unique_fd &&o) + { + std::swap(this->fd, o.fd); + return *this; + } }; -#endif // !WM_UTIL_HPP +class rectangle +{ + public: + explicit rectangle(long wd, long ht) : _right(wd - 1), _bottom(ht - 1) {}; + + void set_left(long l) { + _left = l; + } + long left() const { return _left; }; + + void set_right(long r) { + _right = r; + } + long right() const { return _right; }; + + void set_top(long t) { + _top = t; + } + long top() const { return _top; }; + + void set_bottom(long b) { + _bottom = b; + } + long bottom() const { return _bottom; } + + long width() const { + if (is_valid()) + return 0; + else + return _right - _left + 1; + } + + long height() const { + if (is_valid()) + return 0; + else + return _bottom - _top + 1; + } + + void set_aspect(double ratio); + void fit(unsigned long to_width, unsigned long to_height); + void center(unsigned long outer_w, unsigned long outer_h); + + private: + bool is_valid() const { + return (_top > _bottom || _left > _right); + } + + long _left = 0; + long _top = 0; + long _right; + long _bottom; +}; + +#endif // !WM_UTIL_HPP