TODOs: Remove PicoPNG.h and put wrapped function in Graphics.h Make it clean C++11 and C++ APIs Make the cross-platform support more seperated Add non-C++11 support Add Doxygen commenting Clean up build system Add cross-platform font / text support API Design ---------- style guide / guide lines Perhaps base on something like this: - https://google.github.io/styleguide/cppguide.html some formalized rules and conventions for the design of APIs will have some of the following benefits - following the rules will make it easier to create a new API - it will help to ensure the correctness of the API - it will help with the use of the API examples: - naming conventions - if on an adhoc basis, names of functions were decided, then one function to get the foo variable might be named getFoo(). And if there are no rules, the name of the function to get the bar variable might be called bar(). On the other-hand, if following a rule, when creating the function, if the rule is get + variable name in camel case then the functions become getFoo and getBar. a user doesn't need to look up the API, it will be as they expect. naming: camel case class name start with upper case member functions start with lower case abbreviations are to be avoided on APIs (abbreviations can be used within an implementation, but not on the interface) const correctness: - pointers and references: - A star ('*') style pointer implies it is nullable - An ampersand ('&') style reference means it can not be null - Prefer to use references where possible - Avoid pointers and nulls. - Avoid raw pointers and prefer smart pointers where references can't be used - make ownership clear - owning pointers, borrowed pointers - perhaps need classes calling conventions: return by value pass by reference and const reference where applicable - includes: put in the cpp file instead of the h file use #pragma once instead ifdef guards forward declare classes to avoid includes don't forward declare functions prefer to include files in the cpp files rather than the h files - exception to this is templated classes where you should include rational - dramatically can speed up compile times - if have correct dependancies, what gets recompiled will be dramatically less - of what is recompiled, it will be recompiled faster also - promotes passing objects by reference Wonder if it is possible to automate? avoid threads if use threads, use carefully and try to synchronize them with another thread try to use a thread pool with a task queue for concurrency try to be more functional, with referential integrity or what ever it is called scopes use the namespace feature, but avoid using 'using' move callback virtual functions to be protected. they are for reimplementation. make the API clear that a function is for calling by a client or is for reimpl to extend functionality. try to loosely couple components together, such as with connect so they don't become dependent on each other