project_files/HedgewarsMobile/Classes/MGSplitViewController/MGSplitDividerView.m
changeset 8441 a00b0fa0dbd7
parent 6659 a6030b32b222
child 11115 3729ac42189b
equal deleted inserted replaced
8440:ea4d6a7a2937 8441:a00b0fa0dbd7
    17 #pragma mark Setup and teardown
    17 #pragma mark Setup and teardown
    18 
    18 
    19 
    19 
    20 - (id)initWithFrame:(CGRect)frame
    20 - (id)initWithFrame:(CGRect)frame
    21 {
    21 {
    22 	if ((self = [super initWithFrame:frame])) {
    22     if ((self = [super initWithFrame:frame])) {
    23 		self.userInteractionEnabled = NO;
    23         self.userInteractionEnabled = NO;
    24 		self.allowsDragging = NO;
    24         self.allowsDragging = NO;
    25 		self.contentMode = UIViewContentModeRedraw;
    25         self.contentMode = UIViewContentModeRedraw;
    26 	}
    26     }
    27 	return self;
    27     return self;
    28 }
    28 }
    29 
    29 
    30 
    30 
    31 - (void)dealloc
    31 - (void)dealloc
    32 {
    32 {
    33 	self.splitViewController = nil;
    33     self.splitViewController = nil;
    34 	[super dealloc];
    34     [super dealloc];
    35 }
    35 }
    36 
    36 
    37 
    37 
    38 #pragma mark -
    38 #pragma mark -
    39 #pragma mark Drawing
    39 #pragma mark Drawing
    40 
    40 
    41 
    41 
    42 - (void)drawRect:(CGRect)rect
    42 - (void)drawRect:(CGRect)rect
    43 {
    43 {
    44 	if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) {
    44     if (splitViewController.dividerStyle == MGSplitViewDividerStyleThin) {
    45 		[super drawRect:rect];
    45         [super drawRect:rect];
    46 		
    46 
    47 	} else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) {
    47     } else if (splitViewController.dividerStyle == MGSplitViewDividerStylePaneSplitter) {
    48 		// Draw gradient background.
    48         // Draw gradient background.
    49 		CGRect bounds = self.bounds;
    49         CGRect bounds = self.bounds;
    50 		CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
    50         CGColorSpaceRef rgb = CGColorSpaceCreateDeviceRGB();
    51 		CGFloat locations[2] = {0, 1};
    51         CGFloat locations[2] = {0, 1};
    52 		CGFloat components[8] = {	0.988, 0.988, 0.988, 1.0,  // light
    52         CGFloat components[8] = {   0.988, 0.988, 0.988, 1.0,  // light
    53 									0.875, 0.875, 0.875, 1.0 };// dark
    53                                     0.875, 0.875, 0.875, 1.0 };// dark
    54 		CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2);
    54         CGGradientRef gradient = CGGradientCreateWithColorComponents (rgb, components, locations, 2);
    55 		CGContextRef context = UIGraphicsGetCurrentContext();
    55         CGContextRef context = UIGraphicsGetCurrentContext();
    56 		CGPoint start, end;
    56         CGPoint start, end;
    57 		if (splitViewController.vertical) {
    57         if (splitViewController.vertical) {
    58 			// Light left to dark right.
    58             // Light left to dark right.
    59 			start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds));
    59             start = CGPointMake(CGRectGetMinX(bounds), CGRectGetMidY(bounds));
    60 			end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds));
    60             end = CGPointMake(CGRectGetMaxX(bounds), CGRectGetMidY(bounds));
    61 		} else {
    61         } else {
    62 			// Light top to dark bottom.
    62             // Light top to dark bottom.
    63 			start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds));
    63             start = CGPointMake(CGRectGetMidX(bounds), CGRectGetMinY(bounds));
    64 			end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds));
    64             end = CGPointMake(CGRectGetMidX(bounds), CGRectGetMaxY(bounds));
    65 		}
    65         }
    66 		CGContextDrawLinearGradient(context, gradient, start, end, 0);
    66         CGContextDrawLinearGradient(context, gradient, start, end, 0);
    67 		CGColorSpaceRelease(rgb);
    67         CGColorSpaceRelease(rgb);
    68 		CGGradientRelease(gradient);
    68         CGGradientRelease(gradient);
    69 		
    69 
    70 		// Draw borders.
    70         // Draw borders.
    71 		float borderThickness = 1.0;
    71         float borderThickness = 1.0;
    72 		[[UIColor colorWithWhite:0.7 alpha:1.0] set];
    72         [[UIColor colorWithWhite:0.7 alpha:1.0] set];
    73 		CGRect borderRect = bounds;
    73         CGRect borderRect = bounds;
    74 		if (splitViewController.vertical) {
    74         if (splitViewController.vertical) {
    75 			borderRect.size.width = borderThickness;
    75             borderRect.size.width = borderThickness;
    76 			UIRectFill(borderRect);
    76             UIRectFill(borderRect);
    77 			borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness;
    77             borderRect.origin.x = CGRectGetMaxX(bounds) - borderThickness;
    78 			UIRectFill(borderRect);
    78             UIRectFill(borderRect);
    79 			
    79 
    80 		} else {
    80         } else {
    81 			borderRect.size.height = borderThickness;
    81             borderRect.size.height = borderThickness;
    82 			UIRectFill(borderRect);
    82             UIRectFill(borderRect);
    83 			borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness;
    83             borderRect.origin.y = CGRectGetMaxY(bounds) - borderThickness;
    84 			UIRectFill(borderRect);
    84             UIRectFill(borderRect);
    85 		}
    85         }
    86 		
    86 
    87 		// Draw grip.
    87         // Draw grip.
    88 		[self drawGripThumbInRect:bounds];
    88         [self drawGripThumbInRect:bounds];
    89 	}
    89     }
    90 }
    90 }
    91 
    91 
    92 
    92 
    93 - (void)drawGripThumbInRect:(CGRect)rect
    93 - (void)drawGripThumbInRect:(CGRect)rect
    94 {
    94 {
    95 	float width = 9.0;
    95     float width = 9.0;
    96 	float height;
    96     float height;
    97 	if (splitViewController.vertical) {
    97     if (splitViewController.vertical) {
    98 		height = 30.0;
    98         height = 30.0;
    99 	} else {
    99     } else {
   100 		height = width;
   100         height = width;
   101 		width = 30.0;
   101         width = 30.0;
   102 	}
   102     }
   103 	
   103 
   104 	// Draw grip in centred in rect.
   104     // Draw grip in centred in rect.
   105 	CGRect gripRect = CGRectMake(0, 0, width, height);
   105     CGRect gripRect = CGRectMake(0, 0, width, height);
   106 	gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.0);
   106     gripRect.origin.x = ((rect.size.width - gripRect.size.width) / 2.0);
   107 	gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.0);
   107     gripRect.origin.y = ((rect.size.height - gripRect.size.height) / 2.0);
   108 	
   108 
   109 	float stripThickness = 1.0;
   109     float stripThickness = 1.0;
   110 	UIColor *stripColor = [UIColor colorWithWhite:0.35 alpha:1.0];
   110     UIColor *stripColor = [UIColor colorWithWhite:0.35 alpha:1.0];
   111 	UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0];
   111     UIColor *lightColor = [UIColor colorWithWhite:1.0 alpha:1.0];
   112 	float space = 3.0;
   112     float space = 3.0;
   113 	if (splitViewController.vertical) {
   113     if (splitViewController.vertical) {
   114 		gripRect.size.width = stripThickness;
   114         gripRect.size.width = stripThickness;
   115 		[stripColor set];
   115         [stripColor set];
   116 		UIRectFill(gripRect);
   116         UIRectFill(gripRect);
   117 		
   117 
   118 		gripRect.origin.x += stripThickness;
   118         gripRect.origin.x += stripThickness;
   119 		gripRect.origin.y += 1;
   119         gripRect.origin.y += 1;
   120 		[lightColor set];
   120         [lightColor set];
   121 		UIRectFill(gripRect);
   121         UIRectFill(gripRect);
   122 		gripRect.origin.x -= stripThickness;
   122         gripRect.origin.x -= stripThickness;
   123 		gripRect.origin.y -= 1;
   123         gripRect.origin.y -= 1;
   124 		
   124 
   125 		gripRect.origin.x += space + stripThickness;
   125         gripRect.origin.x += space + stripThickness;
   126 		[stripColor set];
   126         [stripColor set];
   127 		UIRectFill(gripRect);
   127         UIRectFill(gripRect);
   128 		
   128 
   129 		gripRect.origin.x += stripThickness;
   129         gripRect.origin.x += stripThickness;
   130 		gripRect.origin.y += 1;
   130         gripRect.origin.y += 1;
   131 		[lightColor set];
   131         [lightColor set];
   132 		UIRectFill(gripRect);
   132         UIRectFill(gripRect);
   133 		gripRect.origin.x -= stripThickness;
   133         gripRect.origin.x -= stripThickness;
   134 		gripRect.origin.y -= 1;
   134         gripRect.origin.y -= 1;
   135 		
   135 
   136 		gripRect.origin.x += space + stripThickness;
   136         gripRect.origin.x += space + stripThickness;
   137 		[stripColor set];
   137         [stripColor set];
   138 		UIRectFill(gripRect);
   138         UIRectFill(gripRect);
   139 		
   139 
   140 		gripRect.origin.x += stripThickness;
   140         gripRect.origin.x += stripThickness;
   141 		gripRect.origin.y += 1;
   141         gripRect.origin.y += 1;
   142 		[lightColor set];
   142         [lightColor set];
   143 		UIRectFill(gripRect);
   143         UIRectFill(gripRect);
   144 		
   144 
   145 	} else {
   145     } else {
   146 		gripRect.size.height = stripThickness;
   146         gripRect.size.height = stripThickness;
   147 		[stripColor set];
   147         [stripColor set];
   148 		UIRectFill(gripRect);
   148         UIRectFill(gripRect);
   149 		
   149 
   150 		gripRect.origin.y += stripThickness;
   150         gripRect.origin.y += stripThickness;
   151 		gripRect.origin.x -= 1;
   151         gripRect.origin.x -= 1;
   152 		[lightColor set];
   152         [lightColor set];
   153 		UIRectFill(gripRect);
   153         UIRectFill(gripRect);
   154 		gripRect.origin.y -= stripThickness;
   154         gripRect.origin.y -= stripThickness;
   155 		gripRect.origin.x += 1;
   155         gripRect.origin.x += 1;
   156 		
   156 
   157 		gripRect.origin.y += space + stripThickness;
   157         gripRect.origin.y += space + stripThickness;
   158 		[stripColor set];
   158         [stripColor set];
   159 		UIRectFill(gripRect);
   159         UIRectFill(gripRect);
   160 		
   160 
   161 		gripRect.origin.y += stripThickness;
   161         gripRect.origin.y += stripThickness;
   162 		gripRect.origin.x -= 1;
   162         gripRect.origin.x -= 1;
   163 		[lightColor set];
   163         [lightColor set];
   164 		UIRectFill(gripRect);
   164         UIRectFill(gripRect);
   165 		gripRect.origin.y -= stripThickness;
   165         gripRect.origin.y -= stripThickness;
   166 		gripRect.origin.x += 1;
   166         gripRect.origin.x += 1;
   167 		
   167 
   168 		gripRect.origin.y += space + stripThickness;
   168         gripRect.origin.y += space + stripThickness;
   169 		[stripColor set];
   169         [stripColor set];
   170 		UIRectFill(gripRect);
   170         UIRectFill(gripRect);
   171 		
   171 
   172 		gripRect.origin.y += stripThickness;
   172         gripRect.origin.y += stripThickness;
   173 		gripRect.origin.x -= 1;
   173         gripRect.origin.x -= 1;
   174 		[lightColor set];
   174         [lightColor set];
   175 		UIRectFill(gripRect);
   175         UIRectFill(gripRect);
   176 	}
   176     }
   177 }
   177 }
   178 
   178 
   179 
   179 
   180 #pragma mark -
   180 #pragma mark -
   181 #pragma mark Interaction
   181 #pragma mark Interaction
   182 
   182 
   183 
   183 
   184 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
   184 - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
   185 {
   185 {
   186 	UITouch *touch = [touches anyObject];
   186     UITouch *touch = [touches anyObject];
   187 	if (touch) {
   187     if (touch) {
   188 		CGPoint lastPt = [touch previousLocationInView:self];
   188         CGPoint lastPt = [touch previousLocationInView:self];
   189 		CGPoint pt = [touch locationInView:self];
   189         CGPoint pt = [touch locationInView:self];
   190 		float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y;
   190         float offset = (splitViewController.vertical) ? pt.x - lastPt.x : pt.y - lastPt.y;
   191 		if (!splitViewController.masterBeforeDetail) {
   191         if (!splitViewController.masterBeforeDetail) {
   192 			offset = -offset;
   192             offset = -offset;
   193 		}
   193         }
   194 		splitViewController.splitPosition = splitViewController.splitPosition + offset;
   194         splitViewController.splitPosition = splitViewController.splitPosition + offset;
   195 	}
   195     }
   196 }
   196 }
   197 
   197 
   198 
   198 
   199 #pragma mark -
   199 #pragma mark -
   200 #pragma mark Accessors and properties
   200 #pragma mark Accessors and properties
   201 
   201 
   202 
   202 
   203 - (void)setAllowsDragging:(BOOL)flag
   203 - (void)setAllowsDragging:(BOOL)flag
   204 {
   204 {
   205 	if (flag != allowsDragging) {
   205     if (flag != allowsDragging) {
   206 		allowsDragging = flag;
   206         allowsDragging = flag;
   207 		self.userInteractionEnabled = allowsDragging;
   207         self.userInteractionEnabled = allowsDragging;
   208 	}
   208     }
   209 }
   209 }
   210 
   210 
   211 
   211 
   212 @synthesize splitViewController;
   212 @synthesize splitViewController;
   213 @synthesize allowsDragging;
   213 @synthesize allowsDragging;