mirror of
https://github.com/cappuccino/cappuccino.git
synced 2026-09-21 01:40:41 +00:00
Radically simplified the whole theming mechanism. Theming can now be done declaratively with less typing, better readability, easier maintenance.
Also fixed some oversights in the existing themes: text was not dimmed in disabled state for segmented controls, text was not dimmed for default buttons in disabled state in HUD (IIRC).
This commit is contained in:
+1004
-930
File diff suppressed because it is too large
Load Diff
@@ -219,3 +219,132 @@ function BKLabelFromIdentifier(anIdentifier)
|
|||||||
return label;
|
return label;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
PatternIsVertical = YES,
|
||||||
|
PatternIsHorizontal = NO;
|
||||||
|
|
||||||
|
/*
|
||||||
|
To create a simple color with a pattern image:
|
||||||
|
PatternColor(name, width, height)
|
||||||
|
|
||||||
|
To create a color with a three part pattern image:
|
||||||
|
PatternColor(slices, orientation)
|
||||||
|
|
||||||
|
where slices is an array of three [name, width, height] arrays,
|
||||||
|
and orientation is PatternIsVertical or PatternIsHorizontal.
|
||||||
|
|
||||||
|
To create a color with a nine part pattern image:
|
||||||
|
PatternColor(slices);
|
||||||
|
|
||||||
|
where slices is an array of nine [name, width, height] arrays.
|
||||||
|
*/
|
||||||
|
function PatternColor()
|
||||||
|
{
|
||||||
|
if (arguments.length < 3)
|
||||||
|
{
|
||||||
|
var slices = arguments[0],
|
||||||
|
imageSlices = [];
|
||||||
|
|
||||||
|
for (var i = 0; i < slices.length; ++i)
|
||||||
|
{
|
||||||
|
var slice = slices[i];
|
||||||
|
|
||||||
|
imageSlices.push(slice ? [_CPCibCustomResource imageResourceWithName:slice[0] size:CGSizeMake(slice[1], slice[2])] : nil);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (arguments.length == 2)
|
||||||
|
return [CPColor colorWithPatternImage:[[CPThreePartImage alloc] initWithImageSlices:imageSlices isVertical:arguments[1]]];
|
||||||
|
else
|
||||||
|
return [CPColor colorWithPatternImage:[[CPNinePartImage alloc] initWithImageSlices:imageSlices]];
|
||||||
|
}
|
||||||
|
else if (arguments.length == 3)
|
||||||
|
{
|
||||||
|
return [CPColor colorWithPatternImage:[_CPCibCustomResource imageResourceWithName:arguments[0] size:CGSizeMake(arguments[1], arguments[2])]];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return nil;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetThemeValues(object, values)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < values.length; ++i)
|
||||||
|
{
|
||||||
|
var attributeValueState = values[i],
|
||||||
|
attribute = attributeValueState[0],
|
||||||
|
value = attributeValueState[1],
|
||||||
|
state = attributeValueState[2];
|
||||||
|
|
||||||
|
if (state)
|
||||||
|
[object setValue:value forThemeAttribute:attribute inState:state];
|
||||||
|
else
|
||||||
|
[object setValue:value forThemeAttribute:attribute];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function SetHUDThemeValues(object, values, overrides)
|
||||||
|
{
|
||||||
|
for (var i = 0; i < values.length; ++i)
|
||||||
|
{
|
||||||
|
var attributeValueState = values[i],
|
||||||
|
attribute = attributeValueState[0],
|
||||||
|
value = attributeValueState[1],
|
||||||
|
state = attributeValueState[2];
|
||||||
|
|
||||||
|
if (attribute == "text-color" || attribute == "text-shadow-color")
|
||||||
|
{
|
||||||
|
var whiteValue = attribute == "text-color" ? 1.0 : 0.0,
|
||||||
|
alpha = (state && (state & CPThemeStateDisabled)) ? 0.6 : 1.0;
|
||||||
|
|
||||||
|
value = [CPColor colorWithCalibratedWhite:whiteValue alpha:alpha];
|
||||||
|
}
|
||||||
|
else if (typeof(value) === "object" && value.hasOwnProperty("isa") && [value isKindOfClass:CPColor])
|
||||||
|
{
|
||||||
|
var pattern = [value patternImage];
|
||||||
|
|
||||||
|
if (pattern)
|
||||||
|
{
|
||||||
|
if ([pattern isThreePartImage] || [pattern isNinePartImage])
|
||||||
|
{
|
||||||
|
var slices = [pattern imageSlices],
|
||||||
|
newSlices = [];
|
||||||
|
|
||||||
|
for (var sliceIndex = 0; sliceIndex < slices.length; ++sliceIndex)
|
||||||
|
{
|
||||||
|
var slice = slices[sliceIndex],
|
||||||
|
filename = "HUD/" + [[slice filename] lastPathComponent],
|
||||||
|
size = [slice size];
|
||||||
|
|
||||||
|
newSlices.push([filename, size.width, size.height]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ([pattern isThreePartImage])
|
||||||
|
value = PatternColor(newSlices, [pattern isVertical]);
|
||||||
|
else
|
||||||
|
value = PatternColor(newSlices);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
var filename = "HUD/" + [[pattern filename] lastPathComponent],
|
||||||
|
size = [pattern size];
|
||||||
|
|
||||||
|
value = PatternColor(filename, size.width, size.height);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (attribute == "text-shadow-offset")
|
||||||
|
{
|
||||||
|
value = CGSizeMake(-1.0, -1.0);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (state)
|
||||||
|
[object setValue:value forThemeAttribute:attribute inState:state];
|
||||||
|
else
|
||||||
|
[object setValue:value forThemeAttribute:attribute];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (overrides)
|
||||||
|
SetThemeValues(object, overrides);
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user