Native Mac OS X OtaClock replica
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

MainWindow.m 3.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. //
  2. // MainWindow.m
  3. // OtaClock
  4. //
  5. // Created by Thomas Buck on 16.08.15.
  6. // Copyright (c) 2015 xythobuz. All rights reserved.
  7. //
  8. #import "MainWindow.h"
  9. @interface MainWindow ()
  10. @property (assign) NSSize defaultSize;
  11. @end
  12. @implementation MainWindow
  13. @synthesize dragStart;
  14. @synthesize keepPosition;
  15. @synthesize defaultSize;
  16. - (id)initWithContentRect:(NSRect)contentRect
  17. styleMask:(NSUInteger)aStyle
  18. backing:(NSBackingStoreType)bufferingType
  19. defer:(BOOL)flag {
  20. self = [super initWithContentRect:contentRect styleMask:NSBorderlessWindowMask backing:NSBackingStoreBuffered defer:NO];
  21. if (self != nil) {
  22. [self setAlphaValue:1.0];
  23. [self setOpaque:NO];
  24. // load and see if window should be kept on top
  25. // also set proper button state
  26. //[self setLevel:NSFloatingWindowLevel];
  27. // load and see if window pos should be fixed
  28. // also set proper button state
  29. self.keepPosition = NO;
  30. }
  31. return self;
  32. }
  33. - (void)setDefaultBackgroundSize:(NSSize)size {
  34. defaultSize = size;
  35. NSRect frame = [self frame];
  36. frame.size = defaultSize;
  37. [self setFrame:frame display:YES];
  38. }
  39. - (IBAction)changeSize:(NSMenuItem *)sender {
  40. NSRect frame = [self frame];
  41. if ([[sender title] isEqualToString:@"1x"]) {
  42. frame.size = defaultSize;
  43. } else if ([[sender title] isEqualToString:@"2x"]) {
  44. NSSize newSize = defaultSize;
  45. newSize.height *= 2;
  46. newSize.width *= 2;
  47. frame.size = newSize;
  48. } else {
  49. NSLog(@"Unknown changeSize sender: %@", sender);
  50. return;
  51. }
  52. [self setFrame:frame display:YES];
  53. }
  54. - (IBAction)lockPosition:(NSMenuItem *)sender {
  55. BOOL state = [sender state];
  56. if (state == NSOffState) {
  57. // Lock position
  58. state = NSOnState;
  59. [sender setState:state];
  60. self.keepPosition = YES;
  61. // store...
  62. } else {
  63. // Unlock position
  64. state = NSOffState;
  65. [sender setState:state];
  66. self.keepPosition = NO;
  67. // store...
  68. }
  69. }
  70. - (IBAction)keepOnTop:(NSMenuItem *)sender {
  71. BOOL state = [sender state];
  72. if (state == NSOffState) {
  73. // Keep window on top
  74. state = NSOnState;
  75. [sender setState:state];
  76. [self setLevel:NSFloatingWindowLevel];
  77. // store...
  78. } else {
  79. // Don't keep window on top
  80. state = NSOffState;
  81. [sender setState:state];
  82. [self setLevel:NSNormalWindowLevel];
  83. // store...
  84. }
  85. }
  86. - (BOOL)canBecomeKeyWindow {
  87. return YES;
  88. }
  89. - (void)mouseDown:(NSEvent *)theEvent {
  90. self.dragStart = [theEvent locationInWindow];
  91. NSLog(@"Mouse at %f %f", self.dragStart.x, self.dragStart.y);
  92. }
  93. - (void)mouseDragged:(NSEvent *)theEvent {
  94. NSRect screenVisibleFrame = [[NSScreen mainScreen] visibleFrame];
  95. NSRect windowFrame = [self frame];
  96. NSPoint newOrigin = windowFrame.origin;
  97. if (self.keepPosition == NO) {
  98. NSPoint currentLocation = [theEvent locationInWindow];
  99. newOrigin.x += (currentLocation.x - dragStart.x);
  100. newOrigin.y += (currentLocation.y - dragStart.y);
  101. if ((newOrigin.y + windowFrame.size.height) > (screenVisibleFrame.origin.y + screenVisibleFrame.size.height)) {
  102. newOrigin.y = screenVisibleFrame.origin.y + (screenVisibleFrame.size.height - windowFrame.size.height);
  103. }
  104. [self setFrameOrigin:newOrigin];
  105. }
  106. }
  107. @end