I was in the process of making a custom button ui.View with event hooks for button press as well as button release. I wanted to make a button that would trigger repeated actions when held down. That's all well and good and the eventing works fine, but I also tried to emulate, to the best of my ability, all the features that ui.Button has, like allowing text and or an icon that makes use of tint_color etc. This required overriding the draw method and inserting the set_needs_display() calls in the appropriate places.
Apparently, however, setting tint_color on a ui.View does not trigger the set_needs_display() to redraw the view. I assumed that tint_color was just a property on ui.View that, under the covers, did all the fancy things to make the view update itself by default, and that I would be able to override it in a reasonable manner to call super().tint_color.fset() or something like that followed by a set_needs_display() to redraw my view. After looking into it a little further, ui.View.tint_color is just a plain old attribute. So in order for me to properly handle the redrawing of the View I had to make new property getters and setters named tint that sets tint_color and calls set_needs_display().
I really dislike this solution because now the API for my custom button is nonstandard and it makes me feel... dirty... lol
Am I misunderstanding how tint_color works/should work?