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