widget.cpp 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. #if defined(Hiro_Widget)
  2. namespace hiro {
  3. auto pWidget::construct() -> void {
  4. @autoreleasepool {
  5. if(!cocoaView) {
  6. abstract = true;
  7. cocoaView = [[NSView alloc] initWithFrame:NSMakeRect(0, 0, 0, 0)];
  8. [cocoaView setHidden:true];
  9. }
  10. if(auto window = self().parentWindow(true)) {
  11. if(auto p = window->self()) p->_append(self());
  12. setDroppable(self().droppable());
  13. setEnabled(self().enabled(true));
  14. setFocusable(self().focusable());
  15. setFont(self().font(true));
  16. setMouseCursor(self().mouseCursor());
  17. setToolTip(self().toolTip());
  18. setVisible(self().visible(true));
  19. }
  20. }
  21. }
  22. auto pWidget::destruct() -> void {
  23. @autoreleasepool {
  24. [cocoaView removeFromSuperview];
  25. [cocoaView release];
  26. }
  27. }
  28. auto pWidget::focused() const -> bool {
  29. @autoreleasepool {
  30. return cocoaView == [[cocoaView window] firstResponder];
  31. }
  32. }
  33. auto pWidget::setDroppable(bool droppable) -> void {
  34. //virtual
  35. }
  36. auto pWidget::setEnabled(bool enabled) -> void {
  37. if(abstract) enabled = false;
  38. @autoreleasepool {
  39. if([cocoaView respondsToSelector:@selector(setEnabled:)]) {
  40. [cocoaView setEnabled:enabled];
  41. }
  42. }
  43. }
  44. auto pWidget::setFocusable(bool focusable) -> void {
  45. //virtual
  46. }
  47. auto pWidget::setFocused() -> void {
  48. @autoreleasepool {
  49. [[cocoaView window] makeFirstResponder:cocoaView];
  50. }
  51. }
  52. auto pWidget::setFont(const Font& font) -> void {
  53. @autoreleasepool {
  54. if([cocoaView respondsToSelector:@selector(setFont:)]) {
  55. [cocoaView setFont:pFont::create(font)];
  56. }
  57. }
  58. }
  59. auto pWidget::setGeometry(Geometry geometry) -> void {
  60. @autoreleasepool {
  61. CGFloat windowHeight = [[cocoaView superview] frame].size.height;
  62. //round coordinates
  63. uint x = geometry.x();
  64. uint y = windowHeight - geometry.y() - geometry.height();
  65. uint width = geometry.width();
  66. uint height = geometry.height();
  67. [cocoaView setFrame:NSMakeRect(x, y, width, height)];
  68. [[cocoaView superview] setNeedsDisplay:YES];
  69. }
  70. pSizable::setGeometry(geometry);
  71. }
  72. auto pWidget::setMouseCursor(const MouseCursor& mouseCursor) -> void {
  73. //TODO
  74. }
  75. auto pWidget::setToolTip(const string& toolTip) -> void {
  76. //TODO
  77. }
  78. auto pWidget::setVisible(bool visible) -> void {
  79. if(abstract) visible = false;
  80. @autoreleasepool {
  81. [cocoaView setHidden:!visible];
  82. }
  83. }
  84. }
  85. #endif