gui element framework + some stuff to support that