Giter Site home page Giter Site logo

uicore's Introduction

UICore SDK

UICore is a C++ toolkit library focusing on user interfaces and graphics:

  • Features a Model/View/Controller (MVC) design for building cross platform UI applications
  • Uses modern CSS principles for layout such as flex-box and CSS properties for styling
  • No javascript. No UI worker processes, as needed when using WebKit 2 or Chromium. No binding code. No HTML legacy.
  • Hi-DPI support built in. Rendering and layout are done using device independent pixels
  • Fast hardware accelerated 2D canvas
  • Low-level cross platform OpenGL/Direct3D abstraction for custom 3D or specialized 2D operations
  • Direct3D 11 and OpenGL 4 support
  • Designed for modern C++ (C++11, C++14)
  • Many useful matrix, vector and other graphics related math classes
  • Various commonly useful utility classes such as network, XML, JSON, file and zip (deflate) classes
  • Supports Windows, Linux, BSD and macOS

Building and Installing UICore

UICore uses a configure application which generates project templates for the various platforms supported. Basically same principle as CMake, except the solutions/workspaces generated for Visual Studio and Xcode are less terrible (from our point of view!).

The build instructions for each platform are as follows:

  • Windows: Run configure.exe, select the configuration types you're interested in and enter the correct header/lib search and install paths. If you're not fully comfortable with opening configure.exe, you can build it yourself by opening Setup.sln first in Setup/Win32.
  • Linux: Run ./configure. Make sure you have GCC installed first. This will generate a CMakeLists.txt file and a KDevelop project. You can either then use CMake from the command line to build and install, or you can use the KDevelop project it generated.
  • macOS: Run ./configure. Make sure you have Xcode and the command line tools installed first. This will generate a Xcode project that you can use to build from the command line or from within Xcode. It will output the include and library files into the Build directory after a successful build.

Only the Linux build has external dependencies at the moment. CMake should detect those and complain if they aren't installed. If you find any bugs in our build scripts, please help out by sending a pull request.

Documentation

The latest build of the documentation can be found at https://dpjudas.github.io/UICore

You can also build it manually by running doxygen from the Documentation folder.

uicore's People

Contributors

dpjudas avatar rombust avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

uicore's Issues

Optimisation of StyleCascade

I have been experimenting in optimisation StyleCascade.

In my opinion, this is not required at the moment, unless like me, you have over 200 views which is unusual.

Simplified explanation:
I changed the StyleCascade property names to contain a hash value.
This has a nice side effect when obtaining properties that have index values: we can incorporate the index directly into the hash without requiring using the "integer to string" function overhead.

In my application, FPS increased from 138 to 192.

In addition, if I force the background renderer to use canvas.fill_rectangle() instead of using path draw when an exact rectangle is drawn, then FPS increases to 273

Message Dispatching Keyboard Accelerators

I am trying to implement a custom view that has a keyboard accelerator. So when 'A' is pressed, this event is procesed even though the view does not have focus.

There appears to be 3 options:

  1. I could hook directly into the display window slot to do this, however the view may be hidden or disabled (i.e. not part of the view tree).

  2. Fire off the event on the root view in the ViewTree to cascade. However View::dispatch_event() dispatches messages at the target (and parent), not the child

  3. Add a keyboard event slot on the ViewTree. The problem with this is when should the custom view connect the slot or disconnect the slot. i.e. If the View is unlinked from the ViewTree, the slot shouldn't be called. Then again, does all events have this same problem?

Any thoughts?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.