in iOS/MyStudies/ResearchKit/Common/ORKSkin.m [94:332]
ORKSignatureColorKey: ORKRGB(0x000000),
ORKBackgroundColorKey: [UIColor colorWithRed:239.0 / 255.0 green:239.0 / 255.0 blue:244.0 / 255.0 alpha:1.0],
ORKConsentBackgroundColorKey: ORKRGB(0xffffff),
ORKToolBarTintColorKey: ORKRGB(0xffffff),
ORKLightTintColorKey: ORKRGB(0xeeeeee),
ORKDarkTintColorKey: ORKRGB(0x888888),
ORKCaptionTextColorKey: ORKRGB(0xcccccc),
ORKBlueHighlightColorKey: [UIColor colorWithRed:0.0 green:122.0 / 255.0 blue:1.0 alpha:1.0],
ORKChartDefaultTextColorKey: [UIColor lightGrayColor],
ORKGraphAxisColorKey: [UIColor colorWithRed:217.0 / 255.0 green:217.0 / 255.0 blue:217.0 / 255.0 alpha:1.0],
ORKGraphAxisTitleColorKey: [UIColor colorWithRed:142.0 / 255.0 green:142.0 / 255.0 blue:147.0 / 255.0 alpha:1.0],
ORKGraphReferenceLineColorKey: [UIColor colorWithRed:225.0 / 255.0 green:225.0 / 255.0 blue:229.0 / 255.0 alpha:1.0],
ORKGraphScrubberLineColorKey: [UIColor grayColor],
ORKGraphScrubberThumbColorKey: [UIColor colorWithWhite:1.0 alpha:1.0],
ORKAuxiliaryImageTintColorKey: [UIColor colorWithRed:228.0 / 255.0 green:233.0 / 255.0 blue:235.0 / 255.0 alpha:1.0],
ORKNavigationContainerColorKey: [UIColor colorWithRed:249.0 / 255.0 green:249.0 / 255.0 blue:251.0 / 255.0 alpha:0.0],
ORKNavigationContainerShadowColorKey: [UIColor blackColor],
ORKProgressLabelColorKey: [UIColor colorWithRed:142.0/255.0 green:142.0/255.0 blue:142.0/255.0 alpha:1.0],
ORKiPadBackgroundViewColorKey: [UIColor colorWithRed:249.0 / 255.0 green:249.0 / 255.0 blue:251.0 / 255.0 alpha:1.0],
} mutableCopy];
});
return colors;
}
UIColor *ORKColor(NSString *colorKey) {
return colors()[colorKey];
}
void ORKColorSetColorForKey(NSString *key, UIColor *color) {
NSMutableDictionary *d = colors();
d[key] = color;
}
const CGSize ORKiPhone4ScreenSize = (CGSize){320, 480};
const CGSize ORKiPhone5ScreenSize = (CGSize){320, 568};
const CGSize ORKiPhone6ScreenSize = (CGSize){375, 667};
const CGSize ORKiPhone6PlusScreenSize = (CGSize){414, 736};
const CGSize ORKiPhoneXScreenSize = (CGSize){375, 812};
const CGSize ORKiPhoneXSMaxScreenSize = (CGSize){414, 896};
const CGSize ORKiPadScreenSize = (CGSize){768, 1024};
const CGSize ORKiPad10_5ScreenSize = (CGSize){834, 1112};
const CGSize ORKiPad12_9ScreenSize = (CGSize){1024, 1366};
static ORKScreenType ORKGetVerticalScreenTypeForBounds(CGRect bounds) {
ORKScreenType screenType = ORKScreenTypeiPhone6;
CGFloat maximumDimension = MAX(bounds.size.width, bounds.size.height);
if (maximumDimension < ORKiPhone4ScreenSize.height + 1) {
screenType = ORKScreenTypeiPhone4;
} else if (maximumDimension < ORKiPhone5ScreenSize.height + 1) {
screenType = ORKScreenTypeiPhone5;
} else if (maximumDimension < ORKiPhone6ScreenSize.height + 1) {
screenType = ORKScreenTypeiPhone6;
} else if (maximumDimension < ORKiPhone6PlusScreenSize.height + 1) {
screenType = ORKScreenTypeiPhone6Plus;
} else if (maximumDimension < ORKiPhoneXScreenSize.height + 1) {
screenType = ORKScreenTypeiPhoneX;
} else if (maximumDimension < ORKiPhoneXSMaxScreenSize.height + 1) {
screenType = ORKScreenTypeiPhoneXSMax;
} else if (maximumDimension < ORKiPadScreenSize.height + 1) {
screenType = ORKScreenTypeiPad;
} else if (maximumDimension < ORKiPad10_5ScreenSize.height + 1) {
screenType = ORKScreenTypeiPad10_5;
} else {
screenType = ORKScreenTypeiPad12_9;
}
return screenType;
}
static ORKScreenType ORKGetHorizontalScreenTypeForBounds(CGRect bounds) {
ORKScreenType screenType = ORKScreenTypeiPhone6;
CGFloat minimumDimension = MIN(bounds.size.width, bounds.size.height);
if (minimumDimension < ORKiPhone4ScreenSize.width + 1) {
screenType = ORKScreenTypeiPhone4;
} else if (minimumDimension < ORKiPhone5ScreenSize.width + 1) {
screenType = ORKScreenTypeiPhone5;
} else if (minimumDimension < ORKiPhone6ScreenSize.width + 1) {
screenType = ORKScreenTypeiPhone6;
} else if (minimumDimension < ORKiPhoneXScreenSize.width + 1) {
screenType = ORKScreenTypeiPhoneX;
} else if (minimumDimension < ORKiPhoneXSMaxScreenSize.width + 1) {
screenType = ORKScreenTypeiPhoneXSMax;
} else if (minimumDimension < ORKiPhone6PlusScreenSize.width + 1) {
screenType = ORKScreenTypeiPhone6Plus;
} else if (minimumDimension < ORKiPadScreenSize.width + 1) {
screenType = ORKScreenTypeiPad;
} else if (minimumDimension < ORKiPad10_5ScreenSize.width + 1) {
screenType = ORKScreenTypeiPad10_5;
} else {
screenType = ORKScreenTypeiPad12_9;
}
return screenType;
}
static UIWindow *ORKDefaultWindowIfWindowIsNil(UIWindow *window) {
if (!window) {
// Use this method instead of UIApplication's keyWindow or UIApplication's delegate's window
// because we may need the window before the keyWindow is set (e.g., if a view controller
// loads programmatically on the app delegate to be assigned as the root view controller)
window = [UIApplication sharedApplication].windows.firstObject;
}
return window;
}
ORKScreenType ORKGetVerticalScreenTypeForWindow(UIWindow *window) {
window = ORKDefaultWindowIfWindowIsNil(window);
return ORKGetVerticalScreenTypeForBounds(window.bounds);
}
ORKScreenType ORKGetHorizontalScreenTypeForWindow(UIWindow *window) {
window = ORKDefaultWindowIfWindowIsNil(window);
return ORKGetHorizontalScreenTypeForBounds(window.bounds);
}
ORKScreenType ORKGetScreenTypeForScreen(UIScreen *screen) {
ORKScreenType screenType = ORKScreenTypeiPhone6;
if (screen == [UIScreen mainScreen]) {
screenType = ORKGetVerticalScreenTypeForBounds(screen.bounds);
}
return screenType;
}
const CGFloat ORKScreenMetricMaxDimension = 10000.0;
static CGFloat ORKGetMetricForScreenType(ORKScreenMetric metric, ORKScreenType screenType) {
static const CGFloat metrics[ORKScreenMetric_COUNT][ORKScreenType_COUNT] = {
// iPhoneX, iPhone 6+, iPhone 6, iPhone 5, iPhone 4, iPad iPad 10.5, iPad 12.9
{ 128, 128, 128, 100, 100, 218, 218, 218}, // ORKScreenMetricTopToCaptionBaseline
{ 35, 35, 35, 32, 24, 35, 35, 35}, // ORKScreenMetricFontSizeHeadline
{ 38, 38, 38, 32, 28, 38, 38, 38}, // ORKScreenMetricMaxFontSizeHeadline
{ 30, 30, 30, 30, 24, 30, 30, 30}, // ORKScreenMetricFontSizeSurveyHeadline
{ 32, 32, 32, 32, 28, 32, 32, 32}, // ORKScreenMetricMaxFontSizeSurveyHeadline
{ 17, 17, 17, 17, 16, 17, 17, 17}, // ORKScreenMetricFontSizeSubheadline
{ 12, 12, 12, 12, 11, 12, 12, 12}, // ORKScreenMetricFontSizeFootnote
{ 62, 62, 62, 51, 51, 62, 62, 62}, // ORKScreenMetricCaptionBaselineToFitnessTimerTop
{ 62, 62, 62, 43, 43, 62, 62, 62}, // ORKScreenMetricCaptionBaselineToTappingLabelTop
{ 36, 36, 36, 32, 32, 36, 36, 36}, // ORKScreenMetricCaptionBaselineToInstructionBaseline
{ 30, 30, 30, 28, 24, 30, 30, 30}, // ORKScreenMetricInstructionBaselineToLearnMoreBaseline
{ 44, 44, 44, 20, 14, 44, 44, 44}, // ORKScreenMetricLearnMoreBaselineToStepViewTop
{ 40, 40, 40, 30, 14, 40, 40, 40}, // ORKScreenMetricLearnMoreBaselineToStepViewTopWithNoLearnMore
{ 36, 36, 36, 20, 12, 36, 36, 36}, // ORKScreenMetricContinueButtonTopMargin
{ 40, 40, 40, 20, 12, 40, 40, 40}, // ORKScreenMetricContinueButtonTopMarginForIntroStep
{ 0, 0, 0, 0, 0, 80, 170, 170}, // ORKScreenMetricTopToIllustration
{ 44, 44, 44, 40, 40, 44, 44, 44}, // ORKScreenMetricIllustrationToCaptionBaseline
{ 198, 198, 198, 194, 152, 297, 297, 297}, // ORKScreenMetricIllustrationHeight
{ 300, 300, 300, 176, 152, 300, 300, 300}, // ORKScreenMetricInstructionImageHeight
{ 55, 55, 50, 44, 44, 44, 44, 44}, // ORKScreenMetricContinueButtonHeightRegular
{ 32, 44, 32, 32, 32, 44, 44, 44}, // ORKScreenMetricContinueButtonHeightCompact
{ 150, 150, 150, 146, 146, 150, 150, 150}, // ORKScreenMetricContinueButtonWidth
{ 162, 162, 162, 120, 116, 240, 240, 240}, // ORKScreenMetricMinimumStepHeaderHeightForMemoryGame
{ 200, 250, 200, 180, 150, 250, 250, 250}, // ORKScreenMetricMinimumGameViewHeightForMemoryGame
{ 162, 162, 162, 120, 116, 240, 240, 240}, // ORKScreenMetricMinimumStepHeaderHeightForTowerOfHanoiPuzzle
{ 60, 60, 60, 60, 44, 60, 60, 60}, // ORKScreenMetricTableCellDefaultHeight
{ 55, 55, 55, 55, 44, 55, 55, 55}, // ORKScreenMetricTextFieldCellHeight
{ 36, 36, 36, 36, 26, 36, 36, 36}, // ORKScreenMetricChoiceCellFirstBaselineOffsetFromTop,
{ 24, 24, 24, 24, 18, 24, 24, 24}, // ORKScreenMetricChoiceCellLastBaselineToBottom,
{ 24, 24, 24, 24, 24, 24, 24, 24}, // ORKScreenMetricChoiceCellLabelLastBaselineToLabelFirstBaseline,
{ 30, 30, 30, 20, 20, 30, 30, 30}, // ORKScreenMetricLearnMoreButtonSideMargin
{ 10, 10, 10, 0, 0, 10, 10, 10}, // ORKScreenMetricHeadlineSideMargin
{ 44, 44, 44, 44, 44, 44, 44, 44}, // ORKScreenMetricToolbarHeight
{ 350, 322, 274, 217, 217, 446, 446, 446}, // ORKScreenMetricVerticalScaleHeight
{ 208, 208, 208, 208, 198, 256, 256, 256}, // ORKScreenMetricSignatureViewHeight
{ 324, 384, 324, 304, 304, 384, 384, 384}, // ORKScreenMetricPSATKeyboardViewWidth
{ 197, 197, 167, 157, 157, 197, 197, 197}, // ORKScreenMetricPSATKeyboardViewHeight
{ 238, 238, 238, 150, 90, 238, 238, 238}, // ORKScreenMetricLocationQuestionMapHeight
{ 40, 40, 40, 20, 14, 40, 40, 40}, // ORKScreenMetricTopToIconImageViewTop
{ 44, 44, 44, 40, 40, 80, 80, 80}, // ORKScreenMetricIconImageViewToCaptionBaseline
{ 30, 30, 30, 26, 22, 30, 30, 30}, // ORKScreenMetricVerificationTextBaselineToResendButtonBaseline
};
return metrics[metric][screenType];
}
CGFloat ORKGetMetricForWindow(ORKScreenMetric metric, UIWindow *window) {
CGFloat metricValue = 0;
switch (metric) {
case ORKScreenMetricContinueButtonWidth:
case ORKScreenMetricHeadlineSideMargin:
case ORKScreenMetricLearnMoreButtonSideMargin:
metricValue = ORKGetMetricForScreenType(metric, ORKGetHorizontalScreenTypeForWindow(window));
break;
default:
metricValue = ORKGetMetricForScreenType(metric, ORKGetVerticalScreenTypeForWindow(window));
break;
}
return metricValue;
}
const CGFloat ORKLayoutMarginWidthRegularBezel = 15.0;
const CGFloat ORKLayoutMarginWidthThinBezelRegular = 20.0;
const CGFloat ORKLayoutMarginWidthiPad = 0.0;
static CGFloat ORKStandardLeftTableViewCellMarginForWindow(UIWindow *window) {
CGFloat margin = 0;
switch (ORKGetHorizontalScreenTypeForWindow(window)) {
case ORKScreenTypeiPhone4:
case ORKScreenTypeiPhone5:
case ORKScreenTypeiPhone6:
margin = ORKLayoutMarginWidthRegularBezel;
break;
case ORKScreenTypeiPhone6Plus:
case ORKScreenTypeiPad:
case ORKScreenTypeiPad10_5:
case ORKScreenTypeiPad12_9:
default:
margin = ORKLayoutMarginWidthThinBezelRegular;
break;
}
return margin;
}
CGFloat ORKStandardLeftMarginForTableViewCell(UITableViewCell *cell) {
return ORKStandardLeftTableViewCellMarginForWindow(cell.window);
}
static CGFloat ORKStandardHorizontalAdaptiveSizeMarginForiPadWidth(CGFloat screenSizeWidth, UIWindow *window) {
// Use adaptive side margin, if window is wider than iPhone6 Plus.
// Min Marign = ORKLayoutMarginWidthThinBezelRegular, Max Marign = ORKLayoutMarginWidthiPad or iPad12_9
CGFloat ratio = (window.bounds.size.width - ORKiPhone6PlusScreenSize.width) / (screenSizeWidth - ORKiPhone6PlusScreenSize.width);
ratio = MIN(1.0, ratio);
ratio = MAX(0.0, ratio);
return ORKLayoutMarginWidthThinBezelRegular + (ORKLayoutMarginWidthiPad - ORKLayoutMarginWidthThinBezelRegular)*ratio;
}
static CGFloat ORKStandardHorizontalMarginForWindow(UIWindow *window) {
window = ORKDefaultWindowIfWindowIsNil(window); // need a proper window to use bounds
CGFloat margin = 0;
switch (ORKGetHorizontalScreenTypeForWindow(window)) {
case ORKScreenTypeiPhone4:
case ORKScreenTypeiPhone5:
case ORKScreenTypeiPhone6:
case ORKScreenTypeiPhoneX:
case ORKScreenTypeiPhoneXSMax:
case ORKScreenTypeiPhone6Plus:
default:
margin = ORKStandardLeftTableViewCellMarginForWindow(window);
break;
case ORKScreenTypeiPad:{