Permalink
Browse files

Merge branch 'master' of github.com:uliwitness/UliKit

  • Loading branch information...
2 parents 20f6e31 + f6bbafd commit df3f6b8b0eddb19a1c69d8c4d3b16cd2b7a8a8ec @uliwitness committed Mar 8, 2010
Showing with 132 additions and 2 deletions.
  1. +41 −0 UKFadedDrawing.h
  2. +76 −0 UKFadedDrawing.m
  3. +2 −0 UKViewListView.h
  4. +13 −2 UKViewListView.m
View
@@ -0,0 +1,41 @@
+//
+// UKFadedDrawing.h
+// UKFadedDrawing
+//
+// Created by Uli Kusterer on 08.05.08.
+// Copyright 2008 Uli Kusterer.
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+// distribution.
+//
+
+#import <Cocoa/Cocoa.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void UKSetUpOpposingFades( NSRect box, float startFadeDistance, float endFadeDistance,
+ BOOL horzNotVert );
+void UKTearDownFades( void );
+
+#ifdef __cplusplus
+}
+#endif
View
@@ -0,0 +1,76 @@
+//
+// UKFadedDrawing.m
+// UKFadedDrawing
+//
+// Created by Uli Kusterer on 08.05.08.
+// Copyright 2008 Uli Kusterer.
+//
+// This software is provided 'as-is', without any express or implied
+// warranty. In no event will the authors be held liable for any damages
+// arising from the use of this software.
+//
+// Permission is granted to anyone to use this software for any purpose,
+// including commercial applications, and to alter it and redistribute it
+// freely, subject to the following restrictions:
+//
+// 1. The origin of this software must not be misrepresented; you must not
+// claim that you wrote the original software. If you use this software
+// in a product, an acknowledgment in the product documentation would be
+// appreciated but is not required.
+//
+// 2. Altered source versions must be plainly marked as such, and must not be
+// misrepresented as being the original software.
+//
+// 3. This notice may not be removed or altered from any source
+// distribution.
+//
+
+#import "UKFadedDrawing.h"
+
+
+
+void UKSetUpOpposingFades( NSRect box, float startFadeDistance, float endFadeDistance, BOOL horzNotVert )
+{
+ float distanceToGo = horzNotVert ? box.size.width : box.size.height;
+ NSMutableData* maskData = [NSMutableData dataWithLength: distanceToGo * sizeof(float)];
+ float* currPixel = (float*) [maskData mutableBytes];
+ if( distanceToGo < (startFadeDistance + endFadeDistance) )
+ startFadeDistance = endFadeDistance = distanceToGo / 2;
+
+ int x = 0;
+ for( ; x < startFadeDistance; x++ )
+ currPixel[x] = ((float)x) / startFadeDistance;
+
+ int startOfEndFade = distanceToGo -endFadeDistance;
+ for( ; (x < startOfEndFade) && (x < distanceToGo); x++ )
+ currPixel[x] = 1.0;
+
+ for( ; x < distanceToGo; x++ )
+ currPixel[x] = ((float) endFadeDistance -(x -startOfEndFade)) / endFadeDistance;
+
+ CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort];
+ CGContextSaveGState( ctx );
+ CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceGray();
+ CGDataProviderRef dataProvider = CGDataProviderCreateWithCFData( (CFDataRef) maskData );
+
+ float width = horzNotVert ? distanceToGo : 1,
+ height = horzNotVert ? 1 : distanceToGo;
+
+ CGImageRef maskImage = CGImageCreate( width, height, sizeof(float) * 8, sizeof(float) * 8,
+ width * sizeof(float), colorSpace,
+ kCGBitmapFloatComponents | kCGBitmapByteOrder32Host, dataProvider, NULL, true,
+ kCGRenderingIntentDefault );
+ CGContextClipToMask( ctx, *((CGRect*)&box), maskImage );
+
+ CGDataProviderRelease( dataProvider );
+ CGColorSpaceRelease( colorSpace );
+ CGImageRelease( maskImage );
+}
+
+
+void UKTearDownFades()
+{
+ CGContextRef ctx = [[NSGraphicsContext currentContext] graphicsPort];
+ CGContextRestoreGState( ctx );
+}
+
View
@@ -56,6 +56,7 @@
BOOL isInReLayout; // To avoid recursion when layouting views.
BOOL doAnimateResizing; // To have an animation when resizing the window.
BOOL isFlipped; // Use flipped-Y-axis coordinates to avoid problems with NSAnimation during combined fading and resizing.
+ BOOL resizeWindowAndView; // Goes with forceToContentHeight if your view is not the content view of a window.
}
-(void) setForceToContentHeight: (BOOL)doForce;
@@ -77,6 +78,7 @@
- (void)setInterViewSpacing:(float)value;
-(void) setAnimateResizing: (BOOL)animateResizing;
+-(void) setResizeWindowAndView: (BOOL)resizeBoth;
-(NSSize) bestSize;
View
@@ -88,14 +88,23 @@ -(void) viewDidMoveToWindow
}
+-(void) setResizeWindowAndView: (BOOL)resizeBoth
+{
+ resizeWindowAndView = resizeBoth;
+}
+
+
-(void) reLayoutViewListViewsAndAdjustFrame: (BOOL)adjustFrame
{
if( !isInReLayout )
{
isInReLayout = YES;
+ [self setHidden: YES];
+
if( forceToContentHeight && adjustFrame )
{
- if( [[self window] contentView] == self )
+ BOOL isContentView = [[self window] contentView] == self;
+ if( isContentView || resizeWindowAndView )
{
NSWindow* wd = [self window];
NSRect newBox = [wd contentRectForFrameRect: [wd frame]];
@@ -106,7 +115,8 @@ -(void) reLayoutViewListViewsAndAdjustFrame: (BOOL)adjustFrame
newBox = [wd frameRectForContentRect: newBox];
[wd setFrame: newBox display: YES animate: doAnimateResizing];
}
- else
+
+ if( !isContentView || resizeWindowAndView )
[self setFrameSizePinnedToTopLeft: [self bestSize]];
}
@@ -134,6 +144,7 @@ -(void) reLayoutViewListViewsAndAdjustFrame: (BOOL)adjustFrame
}
[self setNeedsDisplay: YES];
+ [self setHidden: NO];
isInReLayout = NO;
}
}

0 comments on commit df3f6b8

Please sign in to comment.