From 1a57d032b99b6fd6c71f836110931fd98483cca3 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 3 Oct 2011 21:07:46 +0200 Subject: [PATCH 01/22] make CPScrollView acting like Mac OS X Lion ones --- AppKit/CPScrollView.j | 34 ++--- AppKit/CPScroller.j | 65 +++++++++- .../HUD/scroller-horizontal-track.png | Bin 161 -> 0 bytes .../scroller-horizontal-knob-center.png | Bin 146 -> 997 bytes .../scroller-horizontal-knob-left.png | Bin 444 -> 1028 bytes .../scroller-horizontal-knob-right.png | Bin 460 -> 1028 bytes .../Resources/scroller-horizontal-track.png | Bin 147 -> 0 bytes .../scroller-vertical-knob-bottom.png | Bin 423 -> 1024 bytes .../scroller-vertical-knob-center.png | Bin 136 -> 994 bytes .../Resources/scroller-vertical-knob-top.png | Bin 433 -> 1023 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 119 +++++++++--------- 11 files changed, 143 insertions(+), 75 deletions(-) delete mode 100644 AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track.png diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index fc4768a8f..1a5dd0e84 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -66,6 +66,8 @@ var TIMER_INTERVAL = 0.2, float _horizontalPageScroll; CPBorderType _borderType; + + CPTimer _timerScrollersHide; } + (CPString)defaultThemeClass @@ -283,11 +285,6 @@ var TIMER_INTERVAL = 0.2, [_verticalScroller setHidden:YES]; [_horizontalScroller setHidden:YES]; } - else - { -// [_verticalScroller setEnabled:NO]; -// [_horizontalScroller setEnabled:NO]; - } [_contentView setFrame:[self _insetBounds]]; [_headerClipView setFrame:_CGRectMakeZero()]; @@ -335,13 +332,6 @@ var TIMER_INTERVAL = 0.2, [_horizontalScroller setHidden:!shouldShowHorizontalScroller]; [_horizontalScroller setEnabled:hasHorizontalScroll]; - // We can thus appropriately account for them changing the content size. - if (shouldShowVerticalScroller) - contentFrame.size.width -= verticalScrollerWidth; - - if (shouldShowHorizontalScroller) - contentFrame.size.height -= horizontalScrollerHeight; - var scrollPoint = [_contentView bounds].origin, wasShowingVerticalScroller = ![_verticalScroller isHidden], wasShowingHorizontalScroller = ![_horizontalScroller isHidden]; @@ -355,7 +345,7 @@ var TIMER_INTERVAL = 0.2, [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height]; [_verticalScroller setKnobProportion:_CGRectGetHeight(contentFrame) / _CGRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame), verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; + [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame) - [CPScroller scrollerOffset], verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) { @@ -367,7 +357,7 @@ var TIMER_INTERVAL = 0.2, { [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width]; [_horizontalScroller setKnobProportion:_CGRectGetWidth(contentFrame) / _CGRectGetWidth(documentFrame)]; - [_horizontalScroller setFrame:_CGRectMake(_CGRectGetMinX(contentFrame), _CGRectGetMaxY(contentFrame), _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; + [_horizontalScroller setFrame:_CGRectMake(_CGRectGetMinX(contentFrame), _CGRectGetMaxY(contentFrame) - [CPScroller scrollerOffset], _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; } else if (wasShowingHorizontalScroller) { @@ -983,9 +973,25 @@ var TIMER_INTERVAL = 0.2, */ - (void)scrollWheel:(CPEvent)anEvent { + if (_timerScrollersHide) + [_timerScrollersHide invalidate]; + if (![_verticalScroller isHidden]) + [_verticalScroller fadeIn]; + if (![_horizontalScroller isHidden]) + [_horizontalScroller fadeIn]; + if (![_horizontalScroller isHidden] || ![_verticalScroller isHidden]) + _timerScrollersHide = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_hideScrollers:) userInfo:nil repeats:NO]; + [self _respondToScrollWheelEventWithDeltaX:[anEvent deltaX] deltaY:[anEvent deltaY]]; } +- (void)_hideScrollers:(CPTimer)theTimer +{ + [_verticalScroller fadeOut]; + [_horizontalScroller fadeOut]; + _timerScrollersHide = nil; +} + - (void)_respondToScrollWheelEventWithDeltaX:(float)deltaX deltaY:(float)deltaY { var documentFrame = [[self documentView] frame], diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index c07f0afc4..6c27e5d6a 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -5,6 +5,9 @@ * Created by Francisco Tolmasky. * Copyright 2008, 280 North, Inc. * + * Modified to match Lion style by Antoine Mercadal 2011 + * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -21,7 +24,7 @@ */ @import "CPControl.j" - +@import "CPViewAnimation.j" // CPScroller Constants CPScrollerNoPart = 0; @@ -68,6 +71,8 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; CPScrollerPart _trackingPart; float _trackingFloatValue; CGPoint _trackingStartPoint; + + CPViewAnimation _animationScroller; } + (CPString)defaultThemeClass @@ -78,8 +83,8 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; + (id)themeAttributes { return [CPDictionary dictionaryWithJSObject:{ - @"scroller-width": 15.0, - @"knob-slot-color": [CPColor lightGrayColor], + @"scroller-width": 7.0, + @"knob-slot-color": [CPNull null], @"decrement-line-color": [CPNull null], @"increment-line-color": [CPNull null], @"knob-color": [CPColor grayColor], @@ -87,7 +92,8 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; @"increment-line-size":_CGSizeMakeZero(), @"track-inset":_CGInsetMakeZero(), @"knob-inset": _CGInsetMakeZero(), - @"minimum-knob-length":21.0 + @"minimum-knob-length":21.0, + @"track-border-offset": 9.0, }] } @@ -108,6 +114,13 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; _hitPart = CPScrollerNoPart; + _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] + forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; + + _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; + [_animationScroller setViewAnimations:[_paramAnimFadeOut]]; + [_animationScroller setDelegate:self]; + [self setAlphaValue:0.0]; [self _calculateIsVertical]; } @@ -123,6 +136,14 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"scroller-width"]; } +/*! + Returns the CPScroller's offset. +*/ ++ (float)scrollerOffset +{ + return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"track-border-offset"]; +} + /*! Returns the width of a CPScroller for the specified CPControlSize. @param aControlSize the size of a controller to return the width for @@ -457,7 +478,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; } [CPApp setTarget:self selector:@selector(trackKnob:) forNextEventMatchingMask:CPLeftMouseDraggedMask | CPLeftMouseUpMask untilDate:nil inMode:nil dequeue:YES]; - + if (type === CPLeftMouseDragged) [self sendAction:[self action] to:[self target]]; } @@ -583,6 +604,33 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; } } +- (void)mouseEntered:(CPEvent)anEvent +{ + [self fadeIn]; + [self setThemeState:CPThemeStateSelected]; +} + +- (void)mouseExited:(CPEvent)anEvent +{ + [self fadeOut]; +} + +- (void)fadeIn +{ + [self setAlphaValue:1.0]; +} + +- (void)fadeOut +{ + [_animationScroller startAnimation]; +} + +- (void)animationDidEnd:(CPAnimation)animation +{ + [self unsetThemeState:CPThemeStateSelected]; + [self setHidden:NO]; +} + @end var CPScrollerControlSizeKey = "CPScrollerControlSize", @@ -606,6 +654,13 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", _hitPart = CPScrollerNoPart; + _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] + forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; + _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; + [_animationScroller setViewAnimations:[_paramAnimFadeOut]]; + [_animationScroller setDelegate:self]; + [self setAlphaValue:0.0]; + [self _calculateIsVertical]; // Adjust the size of the scroller if the size from cib diff --git a/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track.png b/AppKit/Themes/Aristo/Resources/HUD/scroller-horizontal-track.png deleted file mode 100644 index eec906cccbadc0c460516b81b1ebfe723186b259..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 161 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!3HE%<(K{hQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jikv-N978H@iJU&jdq9E5Iq=8Rr%d;=o`?;4S#*NYao0F7htboFyt I=akR{0B#vH!2kdN diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png index efb115efde1fd49c8cf2cb5092f991c4078ca0cc..025c57615d32e9752eeff53c8dfa0f3c4611e0ff 100644 GIT binary patch literal 997 zcmbVL%Wl&^6g5=hQPBlREU1Juau;lfJ>w*HZPipxY&VhW5~Y!dSY={Q8Y{8Kj3>nH z3bBJV-@y;CV4Yv!C*Ttpr*QzO>HPMgI2e9*&w`{g=QolzXC^vB?uD2 zF({IGnp=e}uX!!8FRxV@tWEgLmam-}20hTGjDV&BYa!Gj(2;`b4Z|>A0u3UlLQO?l z4H;HlvmgYUM;2-wT-4J1 zpki=I90A|Wa7y0$F-C{Y|)5FJ8o_&teyMia2kuNB{* z4;%l+-O^3dX==XSf@a6hFqJ(dZYs`{dE#!w=GqwA+#1qSazr4qn$gbHBDmAAbYvnD(g;a_k$pgLw&E?$5D0|3z{C%-rh|GoeK002ovPDHLkV1im3 BC)of1 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png index 29324f7e90edde07372afb84664a23d6e88f3f21..858ac4d4266b6f80a38ece936e65d972ccc10561 100644 GIT binary patch literal 1028 zcmbVLO>5LZ7*1QUrBDyO>1jyu)=g%z*`x_gYj(4-3#OLsqU+6UGP@hvWYWphO?wa# z5xk2C{s9H?t{yz}qM(1ktKe075^qkno2pQHFp$hgp67YLpKNVjUzoo#F9^ayYr|>t zb%wvQa~Jvd%iEu?_;Q&wyKI~E*~q6@utUSmKZOA4Cv^mUz47K`(9KVYG2b@%G_nCpg>*j8I%( z1FN~o1!By6kjJ}8X6BYS);0OQxRymQhOiw=JaMY)ZGi@%7}O+K37`gnh9p!~bzNTu z3Pezbij0&B(#@)3LI@_0$gR<^Z?+wGVvC>y!&UP-d0Qo+GlK%T6G`fdF zmy#Ha^J_+D*oW%Bao07&uxpB|)uB=45s4FS_&+(5xifOn9Dg-SdBr=h*q*jNKb#H^ zPWZ%7J{lhzPXQk*wdL5I{A(|KAY28v!l^}i?e)T&ilrhfO~Z^iLD5&!@I delta 416 zcmV;R0bl-v2)qL!iBL{Q4GJ0x0000DNk~Le0000B0000F2nGNE05Ux_Fp(iAe*s=e zL_t(|+G1ot1&lz<1jH=!7cUQIV`cMYWMb0&|Np-_OcGfkOKV5Bs;sQ+Q~^OD2LS;A z25xR{1}-ixumTojg>{WB>eA9Ohb5(?1%yRJ8Gir%&G6&rZ-y`5-k~T4Sx9YEf6{n)`K*{(SQ);2`O1I|us}^^V`gRvWnf}r`0?W> z11W%*+RY;jQ!a>o*Co zDU6Wh12h1hkQkxv2RWD*i23YYJY(26IX(aXXHWrRkQf6%fB^u_J&1ur4e2!i0000< KMNUMnLSTZ(iNz@Z diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png index 66fb7a4007d8d324e2fb5e14f4c6421a5ec42abb..6c5361615b55661ff7dee485125e8c8280cea451 100644 GIT binary patch literal 1028 zcmbVLJ#W)M7`FImQKcdzBve>9xoczJIgVXhF^v=3Gy<0@jUXF!>`P;{_8I%qxE(uz z;1BQv7+8=Pfq|I;egGp2BNYrR2so#40jcVMCHp@7KF{-hK3ZS9IX`!8j^nub_Nvuk z>sj{BUYKFu_piP`XUkP;_vi*0(6N_d&J0K&gLdR?;STnKy$A1boq+~nw?}*KZQUo4 z;1xDP9wiLTarKov@%(K}K_730vB7_N^Ogr;VDR^9E_9O?9)_#?Dc;y$>-ziKz83H+ zH$Xkt89{`p2l8kq&h*^iC%ih_7uO;WCMI;-;E$Z@x$B@sQVePWtoTrYKtTek%Brd^ z0SO`~LPKKW?08optvTEOu~4Myb#0F<30YEO)016^6_k{Z1OPqIf$N@kbGkY1=Y*_D2Z9 zK!<1xVO*Sx@*G8L;WXUE zfs>L5O!BLTC+I`@-?*EKrkOR#QJPSzsh{aWR)|d(C>$+&uUVYZ5#g delta 433 zcmV;i0Z#se2+RW^iBL{Q4GJ0x0000DNk~Le0000B0000F2nGNE05Ux_Fp(iAe*tbu zL_t(|+I*7DO2a@9$0uP^s|Lh_R6SG_4?TGG?i=_3f`VRs06{Ez7d-d|g&zFCf*0{3 z;>98!Ev=@dheDcGleEo;=G)nrlp>@9!|v?-c6Rqa%M>qe0s!#Qs}T4V%eG3p+gl}! z-DsWWLu0B!Ge85=G(%Ta75Y8(f3eXJ_D=Fgt!PuYf$e@N@F}ZcIWA13Cn1|%g87BT zjg{rq*TejA4jDp=QkXc76CM$d)Y4PaFqg^9+OBtr;d*o(kF{+Z{=2Rlz>*a3JfAx~ zJKsT&qtyvbCYkH|z@@lNoEGTe#Ilm%AYi~Sf7YVPEJ3LfVbAwqplLJFejk_6pur+!^5P_3OrSQJHQx7+pLv~0000<2SrXqu0mjfpvlD@ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track.png deleted file mode 100644 index 43c938474331017a8ddadfe1f7a2f156f966eebf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!2~2%)f%k>Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JicCFS978H@*&Msgd4PfAfJ4vvzwE_If!@C_9&lWtrSxd> u%>T0`-}SBfq^5L7cK7Ks7w+~mFf*`3^S%FKmTU?%fWgz%&t;ucLK6TbIWgG) diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png index 1724145f364d52cfab80d0ae9c1fe0579652814e..c2b5d135edff6096026aa56a91e3c24ec10a0462 100644 GIT binary patch literal 1024 zcmbVLJ#W)M7`9Z=LQ&ZmU_d8#CH9?@*tJ!+b>f&t!lg=s2orVeOJlY68T(4yPKb$a zj0`ZcAz)_!2^f&rU_$%{KukysyiVf+Qq=)V_I>z$p6C5MSYNv`H+ykb5QMq*s@;Kg z2HvUD)9}6Z=KMQYF7Q^5Z?FL$c_|gFfb}VAN8T3gP%qfK{hlrYU=VhDyyspud=^Pw zVI$>H0%$>4T+S2E-=-Y(=~ft<;@6k2L=*<5c%$xOH)+ygxVoRxjs3N*zrXG4fw;Vc z7IOm#BFa6KM>}z5ggeV>Ee0P)mb>(XpM07Mx6R$a!MO@@O=YMpcQWTQbpgz2H!k3RqOK zy_kD>CC=tc2AgJn8YVnsF)A3nKHKG{2%a8>5GAgAL>y<6L_x~r+)HF4VL6J5xW?8Q z@6bPP9BZ9*_Yx|1XvTI^AL=ofFTs$zlZ6UH@W!~7hENo5$7cR+L}T8zO%eV`K^PdA zEMP*k8rBr7E)b#BRa+@Jj>Bp#$HuC<&{8oVTi9w<>$X#C5DQzHrPNDo zJI=Tl`?S;zL3e`HPQ)6`lzN<{UB-6G4p<*D&axp(P;;Y>T+a{V;#`#HFj||Y;T;+{ zDT~lJzeaeBKCb;6cSF^6tFAa|1M5}rN}OPW|H+vQ&d5b`{M9Vw6?9;+J!*Y891RbR zVPaAkjVGUeK83NuZQJVRpZme)=8KvB()87D2WM8l1h3Dah*H=EAdi!YQ*QNW< eh3{wY3RA+z2Q!bSZ$A7{%w)T@W+fe*sBJ zL_t(|+KiFCPQx$|$1jc(7#Vl~B-DkWqJ0(Cihu3Ay`}^!W>GZtAo6QD%%s(MbQ%I8Jhd4%(80U)Q_e`Mm zw1RNX?JUbck|bER34Z{|Bd8hpf4&b2rAv#0Ai!Y!m85CbHcb;$Rasgr{NpgZmYFdb z)VCWul+tyoDERLT@;qP2csz#bJL}zbuMUXza39TQ)7C`SEzfm;5VA0$VHm&|bKYKt z`)E2c4*a%zGuy1yE>_gldcpGzk&rCQfn$%N2rSD2UDsjCm^SP`?ma*CVMnO*suYV^ zWK2CgI^LD3(h9<8%XZu~@5{48KNz{L-MKtFX`_!Xa)u;->m%0U%}R-i$mL#vdMy7^a$7Q|+aRhZ+wPdUat27ARz~VRyi8B5kwX#P!x$nC+4-48qiR@jB(^;)KsLk zkmcx_10h&FvQR7Hi8H{#N=uwvdCGb2sOo$^SLV9Hic=NYwq0{*T1!~8%8QJXs+E;H z4FjfSR3tf1SO#iFGG^!8m4&BQA*6X2UK3~KDp4Y3YDIDtDNs$*I@;AJyW53oL*b2cSR|q-WQJLEp3;o>u`7!|N}R+FM7t0ns|_s; zn!56=g>edzhRfrEAzdC;>w&1kUwtmGt%Xrr45 z-4)ij73=g0N;oTqjLn)3IGQrf$|=i1@7Mq#iIS{7*X6m27SkemL*t-eDOl#$Np8@G z?SJF$nzrp3T3~jety{h+udwm|ee4aZALIDs#6Je2l!+6ERLtr1^oEk%I|H_U%i~ov5hpz@X*n;uunKD=B7I z(cFm>AFeikU-$ptUv8ede}7n83>XA|vre(Cd&J_dMy7$&J{nv?ldnCiLpU3@lJ+v0)dmB&9anjc($hvM{?#S{Q_Bm-b*9 z4<@~N^jCQG;K74>@DF(KN7SnaV;r_i)uib`5||I(=Xu`G^WB|?iwk!bIF4KNw(JgD z=h!|d9ORg@BGSjeOM)Tp;2=7A{snI^z##7SXwTm^LXrqU zWh0bH#?TzMu~}w8cz`MB<6)ed{P*`Cco0V>|3vYjpSAHQ-a5_k-sw&^JUs~Yh~Inw zHcEpLB$x)EOb*k+C{2FCYp{KFE%IPuLJv&-(y5-m3)&>dKoMXggen9o5|G@~H0?f+ zAc7*4L?ktkX2_BOA(%cqQ_G`)(XrjB7CV{zh|hA<2CIia0H%iDD@e%ODex0L3J!;+j|& zw1fY+ajkXHJ;|`x!38+fe*sfT zL_t(|+G1qD1dKq;1jUR{{2z+{LGgc>LUc_mK+FonY(UJ6r1>up{{rIQK>P<}2qTh4 zkS4aC{z;K6tZbg&zJ1sJ^6jhg=PzIHfBE$J#+NUj_N`vFXgyHPHz@uEa~4Z+S%reS zy4GxNULO0u|Nb-l`SXu~nT46*fBpOSVEppsD~30(UY)#p>1^rstC#Nr^?U|7i)F&( zsRj!2iigA`Bs6$<`5Bm*Ss0j@m>K^5`wOI*7}(j_8Tk1Hfc$?l%xoM%j12$wzj^)Y z6SKL6C6}YK>kcUy85vG4ZiZjKelz_2`xh(b;^G3)98Aot8h379+rix0Ytfq_EG!%& zDk{bR^e0Y@$Oe4<_Dxz)MD#rqD=SMFP&3#@VgX1!J13_%)Bpbr+T7gS48Q;UAzCxY z_W%DGm6#YA83kBaSb&`WL~CYcWd*6{2M90#B0r&_$6tmU00000NkvXXu0mjf9xuLN diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 34b52cfbb..ad9557478 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -633,54 +633,59 @@ var themedButtonValues = nil, + (CPScroller)themedVerticalScroller { var scroller = [self makeVerticalScroller], - trackColor = PatternColor("scroller-vertical-track.png", 15.0, 1.0), - disabledTrackColor = PatternColor("scroller-vertical-track-disabled.png", 15.0, 1.0), + trackColor = PatternColor( + [ + ["scroller-vertical-track-top.png", 7.0, 3.0], + ["scroller-vertical-track-center.png", 7.0, 1.0], + ["scroller-vertical-track-bottom.png", 7.0, 3.0] + ], + PatternIsVertical), - upArrowColor = PatternColor("scroller-up-arrow.png", 15.0, 24.0), - highlightedUpArrowColor = PatternColor("scroller-up-arrow-highlighted.png", 15.0, 24.0), - disabledUpArrowColor = PatternColor("scroller-up-arrow-disabled.png", 15.0, 24.0), - - downArrowColor = PatternColor("scroller-down-arrow.png", 15.0, 24.0), - highlightedDownArrowColor = PatternColor("scroller-down-arrow-highlighted.png", 15.0, 24.0), - disabledDownArrowColor = PatternColor("scroller-down-arrow-disabled.png", 15.0, 24.0), + disabledTrackColor = PatternColor( + [ + ["scroller-vertical-track-top.png", 7.0, 3.0], + ["scroller-vertical-track-center.png", 7.0, 1.0], + ["scroller-vertical-track-bottom.png", 7.0, 3.0] + ], + PatternIsVertical), knobColor = PatternColor( [ - ["scroller-vertical-knob-top.png", 15.0, 10.0], - ["scroller-vertical-knob-center.png", 15.0, 1.0], - ["scroller-vertical-knob-bottom.png", 15.0, 10.0] + ["scroller-vertical-knob-top.png", 7.0, 3.0], + ["scroller-vertical-knob-center.png", 7.0, 1.0], + ["scroller-vertical-knob-bottom.png", 7.0, 3.0] ], PatternIsVertical), disabledKnobColor = PatternColor( [ - ["scroller-vertical-knob-disabled-top.png", 15.0, 10.0], - ["scroller-vertical-knob-disabled-center.png", 15.0, 1.0], - ["scroller-vertical-knob-disabled-bottom.png", 15.0, 10.0] + ["scroller-vertical-knob-disabled-top.png", 7.0, 3.0], + ["scroller-vertical-knob-disabled-center.png", 7.0, 1.0], + ["scroller-vertical-knob-disabled-bottom.png", 7.0, 3.0] ], PatternIsVertical); themedVerticalScrollerValues = [ - [@"minimum-knob-length", 21.0, CPThemeStateVertical], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical], - [@"track-inset", CGInsetMake(-10.0, 0.0, -10.0, 0.0), CPThemeStateVertical], + [@"minimum-knob-length", 21.0, CPThemeStateVertical], + [@"knob-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateVertical], + [@"track-inset", CGInsetMake(2.0, 0.0, 11.0, 0.0), CPThemeStateVertical], + [@"track-border-offset", 9.0, CPThemeStateVertical], [@"knob-color", knobColor, CPThemeStateVertical], [@"knob-color", disabledKnobColor, CPThemeStateVertical | CPThemeStateDisabled], - [@"knob-slot-color", trackColor, CPThemeStateVertical], - [@"knob-slot-color", disabledTrackColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"knob-slot-color", [CPNull null], CPThemeStateVertical], + [@"knob-slot-color", [CPNull null], CPThemeStateVertical | CPThemeStateDisabled], - [@"decrement-line-size", CGSizeMake(15.0, 24.0), CPThemeStateVertical], - [@"decrement-line-color", upArrowColor, CPThemeStateVertical], - [@"decrement-line-color", highlightedUpArrowColor, CPThemeStateVertical | CPThemeStateHighlighted], - [@"decrement-line-color", disabledUpArrowColor, CPThemeStateVertical | CPThemeStateDisabled], + [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], + [@"knob-slot-color", disabledTrackColor, CPThemeStateVertical | CPThemeStateDisabled | CPThemeStateSelected], - [@"increment-line-size", CGSizeMake(15.0, 24.0), CPThemeStateVertical], - [@"increment-line-color", downArrowColor, CPThemeStateVertical], - [@"increment-line-color", highlightedDownArrowColor, CPThemeStateVertical | CPThemeStateHighlighted], - [@"increment-line-color", disabledDownArrowColor, CPThemeStateVertical | CPThemeStateDisabled] + [@"decrement-line-size", CPSizeMakeZero(), CPThemeStateVertical], + [@"decrement-line-color", [CPNull null], CPThemeStateVertical], + + [@"increment-line-size", CPSizeMakeZero(), CPThemeStateVertical], + [@"increment-line-color", [CPNull null], CPThemeStateVertical] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -701,54 +706,56 @@ var themedButtonValues = nil, + (CPScroller)themedHorizontalScroller { var scroller = [self makeHorizontalScroller], - trackColor = PatternColor("scroller-horizontal-track.png", 1.0, 15.0), - disabledTrackColor = PatternColor("scroller-horizontal-track-disabled.png", 1.0, 15.0), + trackColor = PatternColor( + [ + ["scroller-horizontal-track-left.png", 3.0, 7.0], + ["scroller-horizontal-track-center.png", 1.0, 7.0], + ["scroller-horizontal-track-right.png", 3.0, 7.0] + ], + PatternIsHorizontal), - leftArrowColor = PatternColor("scroller-left-arrow.png", 24.0, 15.0), - highlightedLeftArrowColor = PatternColor("scroller-left-arrow-highlighted.png", 24.0, 15.0), - disabledLeftArrowColor = PatternColor("scroller-left-arrow-disabled.png", 24.0, 15.0), - - rightArrowColor = PatternColor("scroller-right-arrow.png", 24.0, 15.0), - highlightedRightArrowColor = PatternColor("scroller-right-arrow-highlighted.png", 24.0, 15.0), - disabledRightArrowColor = PatternColor("scroller-right-arrow-disabled.png", 24.0, 15.0), + disabledTrackColor = PatternColor( + [ + ["scroller-horizontal-track-left.png", 3.0, 7.0], + ["scroller-horizontal-track-center.png", 1.0, 7.0], + ["scroller-horizontal-track-right.png", 3.0, 7.0] + ], + PatternIsHorizontal), knobColor = PatternColor( [ - ["scroller-horizontal-knob-left.png", 10.0, 15.0], - ["scroller-horizontal-knob-center.png", 1.0, 15.0], - ["scroller-horizontal-knob-right.png", 10.0, 15.0] + ["scroller-horizontal-knob-left.png", 3.0, 7.0], + ["scroller-horizontal-knob-center.png", 1.0, 7.0], + ["scroller-horizontal-knob-right.png", 3.0, 7.0] ], PatternIsHorizontal), disabledKnobColor = PatternColor( [ - ["scroller-horizontal-knob-disabled-left.png", 10.0, 15.0], - ["scroller-horizontal-knob-disabled-center.png", 1.0, 15.0], - ["scroller-horizontal-knob-disabled-right.png", 10.0, 15.0] + ["scroller-horizontal-knob-disabled-left.png", 3.0, 7.0], + ["scroller-horizontal-knob-disabled-center.png", 1.0, 7.0], + ["scroller-horizontal-knob-disabled-right.png", 3.0, 7.0] ], PatternIsHorizontal); themedHorizontalScrollerValues = [ [@"minimum-knob-length", 21.0], - [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0)], - [@"track-inset", CGInsetMake(0.0, -10.0, 0.0, -11.0)], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 2.0)], + [@"track-inset", CGInsetMake(0.0, 11.0, 0.0, 2.0)], + [@"track-border-offset", 9.0], [@"knob-color", knobColor], - [@"knob-color", disabledKnobColor, CPThemeStateDisabled], + [@"knob-color", disabledKnobColor, CPThemeStateDisabled], - [@"knob-slot-color", trackColor], - [@"knob-slot-color", disabledTrackColor, CPThemeStateDisabled], + [@"knob-slot-color", [CPNull null]], + [@"knob-slot-color", [CPNull null], CPThemeStateDisabled], - [@"decrement-line-size", CGSizeMake(24.0, 15.0)], - [@"decrement-line-color", leftArrowColor], - [@"decrement-line-color", highlightedLeftArrowColor, CPThemeStateHighlighted], - [@"decrement-line-color", disabledLeftArrowColor, CPThemeStateDisabled], + [@"knob-slot-color", trackColor, CPThemeStateSelected], + [@"knob-slot-color", disabledTrackColor, CPThemeStateDisabled | CPThemeStateSelected], - [@"increment-line-size", CGSizeMake(24.0, 15.0)], - [@"increment-line-color", rightArrowColor], - [@"increment-line-color", highlightedRightArrowColor, CPThemeStateHighlighted], - [@"increment-line-color", disabledRightArrowColor, CPThemeStateDisabled] + [@"decrement-line-size", CPSizeMakeZero()], + [@"increment-line-size", CPSizeMakeZero()] ]; [self registerThemeValues:themedHorizontalScrollerValues forView:scroller]; From 7b7ad0715baade13264b03a4cb2f66ca7886a84d Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 3 Oct 2011 21:08:06 +0200 Subject: [PATCH 02/22] add artwork --- .../scroller-horizontal-track-center.png | Bin 0 -> 148 bytes .../Resources/scroller-horizontal-track-left.png | Bin 0 -> 176 bytes .../Resources/scroller-horizontal-track-right.png | Bin 0 -> 175 bytes .../Resources/scroller-vertical-track-bottom.png | Bin 0 -> 173 bytes .../Resources/scroller-vertical-track-center.png | Bin 0 -> 144 bytes .../Resources/scroller-vertical-track-top.png | Bin 0 -> 177 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png new file mode 100644 index 0000000000000000000000000000000000000000..3c645b28ede57cb8052170d1e5b16ac21e9fb9ce GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrJ!3HEx`lwFWnj?%&A=ddVW&WQAW*H8r;B4q#jT`- lgoJ=}5P858D9Z5vKQjaCItG(HjHmoSd{0+Dmvv4FO#r?;BnJQh literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png new file mode 100644 index 0000000000000000000000000000000000000000..c8b6c441e61bd90e1cd11d0c9ace4e334a0c2dde GIT binary patch literal 176 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INO2Z;L>4nJa0`PlBg3pY5mdKI;Vst03We5{{R30 literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png new file mode 100644 index 0000000000000000000000000000000000000000..1a2fce89bfbc4b56032cb775b465a5251c58ff83 GIT binary patch literal 175 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INO2Z;L>4nJa0`PlBg3pY5_E)S!3HGb4~rfJQk(@Ik;M!Q+`=Ht$S`Y;1W-^R z*(1o8fgyJW14D5i1H<=L28Nb@3=H*W7#Mz>Wnj?%&A=ddVW&WQAW*Hbr;B4q#jTvf zj$90a3=9VxKk@#rzqKvTYfj9a8M7L?9+@fE{{^)8|9@tN3sc!IF`Vx^ Q0o2am>FVdQ&MBb@0F+WOi~s-t literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-center.png new file mode 100644 index 0000000000000000000000000000000000000000..dd5bf39c4450c4613ef24bbf819b70b25464be38 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)O!3HFSxVM}GQk(@Ik;M!Q+`=Ht$S`Y;1W-^R z*(1o8fgyJW14D5i1H<=L28Nb@3=H*W7#Mz>Wnj?%&A=ddVW&WQAW*HCr;B4q#jT{2 kgoJ?f1B^fshX4PW8CW_E)S!3HGb4~rfJQk(@Ik;M!Q+`=Ht$S`Y;1W-^R z*(1o8fgyJW14D5i1H<=L28Nb@3=H*W7#Mz>Wnj?%&A=ddVW&WQAW*Hjr;B4q#jTu^ zid+X27#I#r?&R5W^UMGE&AMD}%@mdKI;Vst0O(LPivR!s literal 0 HcmV?d00001 From 7fe990e9f66adcfe7c144877e1b597b1abc29670 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Mon, 3 Oct 2011 21:15:21 +0200 Subject: [PATCH 03/22] keep scroller visible if mouse is over, even if timer fire --- AppKit/CPScrollView.j | 6 ++++-- AppKit/CPScroller.j | 7 ++++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 1a5dd0e84..042a4c895 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -987,8 +987,10 @@ var TIMER_INTERVAL = 0.2, - (void)_hideScrollers:(CPTimer)theTimer { - [_verticalScroller fadeOut]; - [_horizontalScroller fadeOut]; + if ([_verticalScroller allowFadingOut]) + [_verticalScroller fadeOut]; + if ([_horizontalScroller allowFadingOut]) + [_horizontalScroller fadeOut]; _timerScrollersHide = nil; } diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 6c27e5d6a..3d3ab5e81 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -73,6 +73,8 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; CGPoint _trackingStartPoint; CPViewAnimation _animationScroller; + + BOOL _allowFadingOut @accessors(getter=allowFadingOut); } + (CPString)defaultThemeClass @@ -113,7 +115,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; [self setKnobProportion:1.0]; _hitPart = CPScrollerNoPart; - + _allowFadingOut = YES; _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; @@ -606,12 +608,14 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; - (void)mouseEntered:(CPEvent)anEvent { + _allowFadingOut = NO; [self fadeIn]; [self setThemeState:CPThemeStateSelected]; } - (void)mouseExited:(CPEvent)anEvent { + _allowFadingOut = YES; [self fadeOut]; } @@ -654,6 +658,7 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", _hitPart = CPScrollerNoPart; + _allowFadingOut = YES; _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; From 53a6d2de835dd2836d4239401fd35af513d25621 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 4 Oct 2011 14:05:02 +0200 Subject: [PATCH 04/22] support for changing scroller styles --- AppKit/CPScrollView.j | 100 ++++++++++++++-- AppKit/CPScroller.j | 87 ++++++++++---- ...roller-horizontal-knob-disabled-center.png | Bin 154 -> 0 bytes ...scroller-horizontal-knob-disabled-left.png | Bin 436 -> 0 bytes ...croller-horizontal-knob-disabled-right.png | Bin 452 -> 0 bytes .../scroller-horizontal-track-disabled.png | Bin 145 -> 0 bytes ...scroller-legacy-horizontal-knob-center.png | Bin 0 -> 1297 bytes .../scroller-legacy-horizontal-knob-left.png | Bin 0 -> 1347 bytes .../scroller-legacy-horizontal-knob-right.png | Bin 0 -> 1332 bytes ...croller-legacy-horizontal-track-center.png | Bin 0 -> 1323 bytes .../scroller-legacy-horizontal-track-left.png | Bin 0 -> 1530 bytes ...scroller-legacy-horizontal-track-right.png | Bin 0 -> 1531 bytes .../scroller-legacy-vertical-knob-bottom.png | Bin 0 -> 1338 bytes .../scroller-legacy-vertical-knob-center.png | Bin 0 -> 1296 bytes .../scroller-legacy-vertical-knob-top.png | Bin 0 -> 1336 bytes .../scroller-legacy-vertical-track-bottom.png | Bin 0 -> 1552 bytes .../scroller-legacy-vertical-track-center.png | Bin 0 -> 1320 bytes .../scroller-legacy-vertical-track-top.png | Bin 0 -> 1536 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 109 ++++++++++-------- 19 files changed, 214 insertions(+), 82 deletions(-) delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-center.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-left.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-right.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-disabled.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-top.png diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 042a4c895..424b43f06 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -40,6 +40,7 @@ var TIMER_INTERVAL = 0.2, CPScrollViewDelegate_scrollViewDidScroll_ = 1 << 1; + @implementation CPScrollView : CPView { CPClipView _contentView; @@ -68,6 +69,8 @@ var TIMER_INTERVAL = 0.2, CPBorderType _borderType; CPTimer _timerScrollersHide; + + int _scrollerStyle @accessors(getter=scrollerStyle); } + (CPString)defaultThemeClass @@ -108,6 +111,7 @@ var TIMER_INTERVAL = 0.2, [self setHasVerticalScroller:YES]; [self setHasHorizontalScroller:YES]; + [self setScrollerStyle:CPScrollerStyleOverlay]; _delegate = nil; _scrollTimer = nil; @@ -139,6 +143,38 @@ var TIMER_INTERVAL = 0.2, if ([_delegate respondsToSelector:@selector(scrollViewDidScroll:)]) _implementedDelegateMethods |= CPScrollViewDelegate_scrollViewDidScroll_; } + +/*! + Set the scroller styles + - CPScrollerStyleLegacy: Standard scroller like prior 10.7 + - CPScrollerStyleOverlay: scrollers like 10.7+ +*/ +- (void)setScrollerStyle:(int)aStyle +{ + if (_scrollerStyle == aStyle) + return; + + _scrollerStyle = aStyle; + + [self _updateScrollerStyle]; +} + +- (void)_updateScrollerStyle +{ + if (_hasHorizontalScroller) + { + [_horizontalScroller setStyle:_scrollerStyle]; + [_horizontalScroller unsetThemeState:CPThemeStateSelected]; + } + if (_hasVerticalScroller) + { + [_verticalScroller setStyle:_scrollerStyle]; + [_verticalScroller unsetThemeState:CPThemeStateSelected]; + } + + [self reflectScrolledClipView:_contentView]; +} + // Calculating Layout + (CGSize)contentSizeForFrameSize:(CGSize)frameSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(CPBorderType)borderType @@ -184,7 +220,6 @@ var TIMER_INTERVAL = 0.2, bounds = _CGRectInset(bounds, 2.0, 2.0); ++bounds.origin.y; --bounds.size.height; - return bounds; case CPNoBorder: @@ -332,6 +367,21 @@ var TIMER_INTERVAL = 0.2, [_horizontalScroller setHidden:!shouldShowHorizontalScroller]; [_horizontalScroller setEnabled:hasHorizontalScroll]; + var overlay = 0; + if (_scrollerStyle === CPScrollerStyleLegacy) + { + // We can thus appropriately account for them changing the content size. + if (shouldShowVerticalScroller) + contentFrame.size.width -= verticalScrollerWidth; + + if (shouldShowHorizontalScroller) + contentFrame.size.height -= horizontalScrollerHeight; + } + else + { + overlay = [CPScroller scrollerOffset]; + } + var scrollPoint = [_contentView bounds].origin, wasShowingVerticalScroller = ![_verticalScroller isHidden], wasShowingHorizontalScroller = ![_horizontalScroller isHidden]; @@ -345,7 +395,7 @@ var TIMER_INTERVAL = 0.2, [_verticalScroller setFloatValue:(difference.height <= 0.0) ? 0.0 : scrollPoint.y / difference.height]; [_verticalScroller setKnobProportion:_CGRectGetHeight(contentFrame) / _CGRectGetHeight(documentFrame)]; - [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame) - [CPScroller scrollerOffset], verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; + [_verticalScroller setFrame:_CGRectMake(_CGRectGetMaxX(contentFrame) - overlay, verticalScrollerY, verticalScrollerWidth, verticalScrollerHeight)]; } else if (wasShowingVerticalScroller) { @@ -357,7 +407,7 @@ var TIMER_INTERVAL = 0.2, { [_horizontalScroller setFloatValue:(difference.width <= 0.0) ? 0.0 : scrollPoint.x / difference.width]; [_horizontalScroller setKnobProportion:_CGRectGetWidth(contentFrame) / _CGRectGetWidth(documentFrame)]; - [_horizontalScroller setFrame:_CGRectMake(_CGRectGetMinX(contentFrame), _CGRectGetMaxY(contentFrame) - [CPScroller scrollerOffset], _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; + [_horizontalScroller setFrame:_CGRectMake(_CGRectGetMinX(contentFrame), _CGRectGetMaxY(contentFrame) - overlay, _CGRectGetWidth(contentFrame), horizontalScrollerHeight)]; } else if (wasShowingHorizontalScroller) { @@ -365,6 +415,8 @@ var TIMER_INTERVAL = 0.2, [_horizontalScroller setKnobProportion:1.0]; } + console.log(contentFrame) + debugger; [_contentView setFrame:contentFrame]; [_headerClipView setFrame:headerClipViewFrame]; [[_headerClipView documentView] setNeedsDisplay:YES]; @@ -376,6 +428,24 @@ var TIMER_INTERVAL = 0.2, --_recursionCount; } +/*! + Momentary display the scrollers +*/ +- (void)flashScrollers +{ + if (_scrollerStyle == CPScrollerStyleLegacy) + return; + + if (_hasHorizontalScroller) + [_horizontalScroller fadeIn]; + if (_hasVerticalScroller) + [_verticalScroller fadeIn]; + + if (_timerScrollersHide) + [_timerScrollersHide invalidate] + _timerScrollersHide = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_hideScrollers:) userInfo:nil repeats:NO]; +} + // Managing Graphics Attributes /*! @@ -427,7 +497,7 @@ var TIMER_INTERVAL = 0.2, [self addSubview:_horizontalScroller]; - [self reflectScrolledClipView:_contentView]; + [self _updateScrollerStyle]; } /*! @@ -454,8 +524,8 @@ var TIMER_INTERVAL = 0.2, { var bounds = [self _insetBounds]; - [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, MAX(_CGRectGetWidth(bounds), [CPScroller scrollerWidth] + 1), [CPScroller scrollerWidth])]]; - [[self horizontalScroller] setFrameSize:CGSizeMake(_CGRectGetWidth(bounds), [CPScroller scrollerWidth])]; + [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, MAX(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1), [CPScroller scrollerWidthInStyle:_scrollerStyle])]]; + [[self horizontalScroller] setFrameSize:CGSizeMake(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle])]; } [self reflectScrolledClipView:_contentView]; @@ -489,7 +559,7 @@ var TIMER_INTERVAL = 0.2, [self addSubview:_verticalScroller]; - [self reflectScrolledClipView:_contentView]; + [self _updateScrollerStyle]; } /*! @@ -517,8 +587,8 @@ var TIMER_INTERVAL = 0.2, { var bounds = [self _insetBounds]; - [self setVerticalScroller:[[CPScroller alloc] initWithFrame:_CGRectMake(0.0, 0.0, [CPScroller scrollerWidth], MAX(_CGRectGetHeight(bounds), [CPScroller scrollerWidth] + 1))]]; - [[self verticalScroller] setFrameSize:CGSizeMake([CPScroller scrollerWidth], _CGRectGetHeight(bounds))]; + [self setVerticalScroller:[[CPScroller alloc] initWithFrame:_CGRectMake(0.0, 0.0, [CPScroller scrollerWidthInStyle:_scrollerStyle], MAX(_CGRectGetHeight(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1))]]; + [[self verticalScroller] setFrameSize:CGSizeMake([CPScroller scrollerWidthInStyle:_scrollerStyle], _CGRectGetHeight(bounds))]; } [self reflectScrolledClipView:_contentView]; @@ -627,8 +697,8 @@ var TIMER_INTERVAL = 0.2, bottomCornerFrame.origin.x = CGRectGetMinX(verticalFrame); bottomCornerFrame.origin.y = CGRectGetMaxY(verticalFrame); - bottomCornerFrame.size.width = [CPScroller scrollerWidth]; - bottomCornerFrame.size.height = [CPScroller scrollerWidth]; + bottomCornerFrame.size.width = [CPScroller scrollerWidthInStyle:_scrollerStyle]; + bottomCornerFrame.size.height = [CPScroller scrollerWidthInStyle:_scrollerStyle]; return bottomCornerFrame; } @@ -1122,7 +1192,8 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", CPScrollViewAutohidesScrollerKey = @"CPScrollViewAutohidesScroller", CPScrollViewCornerViewKey = @"CPScrollViewCornerViewKey", CPScrollViewBottomCornerViewKey = @"CPScrollViewBottomCornerViewKey", - CPScrollViewBorderTypeKey = @"CPScrollViewBorderTypeKey"; + CPScrollViewBorderTypeKey = @"CPScrollViewBorderTypeKey", + CPScrollViewScrollerStyleKey = @"CPScrollViewScrollerStyleKey"; @implementation CPScrollView (CPCoding) @@ -1160,8 +1231,11 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", _delegate = nil; _scrollTimer = nil; _implementedDelegateMethods = 0; + // Due to the anything goes nature of decoding, our subviews may not exist yet, so layout at the end of the run loop when we're sure everything is in a correct state. [[CPRunLoop currentRunLoop] performSelector:@selector(_updateCornerAndHeaderView) target:self argument:_contentView order:0 modes:[CPDefaultRunLoopMode]]; + + [self setScrollerStyle:[aCoder decodeIntForKey:CPScrollViewScrollerStyleKey] || CPScrollerStyleOverlay]; } return self; @@ -1190,6 +1264,8 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", [aCoder encodeObject:_bottomCornerView forKey:CPScrollViewBottomCornerViewKey]; [aCoder encodeInt:_borderType forKey:CPScrollViewBorderTypeKey]; + + [aCoder encodeInt:_scrollerStyle forKey:CPScrollViewScrollerStyleKey]; } @end diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 3d3ab5e81..eb114121b 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -24,7 +24,6 @@ */ @import "CPControl.j" -@import "CPViewAnimation.j" // CPScroller Constants CPScrollerNoPart = 0; @@ -57,6 +56,12 @@ NAMES_FOR_PARTS[CPScrollerKnobSlot] = @"knob-slot"; NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; +CPScrollerStyleLegacy = 1; +CPScrollerStyleOverlay = 2; + +CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); + + @implementation CPScroller : CPControl { CPControlSize _controlSize; @@ -75,6 +80,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; CPViewAnimation _animationScroller; BOOL _allowFadingOut @accessors(getter=allowFadingOut); + int _style; } + (CPString)defaultThemeClass @@ -95,7 +101,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; @"track-inset":_CGInsetMakeZero(), @"knob-inset": _CGInsetMakeZero(), @"minimum-knob-length":21.0, - @"track-border-offset": 9.0, + @"track-border-overlay": 9.0, }] } @@ -116,6 +122,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; _hitPart = CPScrollerNoPart; _allowFadingOut = YES; + _style = CPScrollerStyleOverlay; _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; @@ -129,13 +136,58 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; return self; } +- (void)_adjustScrollerSize +{ + var frame = [self frame], + scrollerWidth = [self currentValueForThemeAttribute:@"scroller-width"]; + + if ([self isVertical] && CGRectGetWidth(frame) !== scrollerWidth) + frame.size.width = scrollerWidth; + + if (![self isVertical] && CGRectGetHeight(frame) !== scrollerWidth) + frame.size.height = scrollerWidth; + + [self setFrame:frame]; +} + +- (void)setStyle:(id)aStyle +{ + if (_style != nil && _style === aStyle) + return; + + _style = aStyle; + + if (_style === CPScrollerStyleLegacy) + { + [self fadeIn]; + [self setThemeState:CPThemeStateScrollViewLegacy]; + } + else + { + _allowFadingOut = YES; + [self unsetThemeState:CPThemeStateScrollViewLegacy]; + } + + [self _adjustScrollerSize]; +} + // Determining CPScroller Size + ++ (float)scrollerWidth +{ + return [CPScroller scrollerWidthInStyle:CPScrollerStyleLegacy]; +} + /*! Returns the CPScroller's width for a CPRegularControlSize. */ -+ (float)scrollerWidth ++ (float)scrollerWidthInStyle:(int)aStyle { - return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"scroller-width"]; + var scroller = [[CPScroller alloc] init]; + + if (aStyle == CPScrollerStyleLegacy) + return [scroller valueForThemeAttribute:@"scroller-width" inState:CPThemeStateScrollViewLegacy]; + return [scroller currentValueForThemeAttribute:@"scroller-width"]; } /*! @@ -143,7 +195,7 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; */ + (float)scrollerOffset { - return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"track-border-offset"]; + return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"track-border-overlay"]; } /*! @@ -152,7 +204,8 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; */ + (float)scrollerWidthForControlSize:(CPControlSize)aControlSize { - return [self scrollerWidth]; + // ?? a class method using self? + return nil//[self scrollerWidth]; } /*! @@ -626,6 +679,9 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; - (void)fadeOut { + if ([self hasThemeState:CPThemeStateScrollViewLegacy]) + return; + [_animationScroller startAnimation]; } @@ -637,8 +693,9 @@ NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; @end -var CPScrollerControlSizeKey = "CPScrollerControlSize", - CPScrollerKnobProportionKey = "CPScrollerKnobProportion"; +var CPScrollerControlSizeKey = @"CPScrollerControlSize", + CPScrollerKnobProportionKey = @"CPScrollerKnobProportion", + CPScrollerStyleKey = @"CPScrollerStyleKey"; @implementation CPScroller (CPCoding) @@ -668,18 +725,7 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", [self _calculateIsVertical]; - // Adjust the size of the scroller if the size from cib - // isn't equal to the scrollerWidth - var frame = [self frame], - scrollerWidth = [CPScroller scrollerWidth]; - - if ([self isVertical] && CGRectGetWidth(frame) !== scrollerWidth) - frame.size.width = scrollerWidth; - - if (![self isVertical] && CGRectGetHeight(frame) !== scrollerWidth) - frame.size.height = scrollerWidth; - - [self setFrame:frame]; + [self setStyle:[aCoder decodeIntForKey:CPScrollerStyleKey]]; } return self; @@ -691,6 +737,7 @@ var CPScrollerControlSizeKey = "CPScrollerControlSize", [aCoder encodeInt:_controlSize forKey:CPScrollerControlSizeKey]; [aCoder encodeFloat:_knobProportion forKey:CPScrollerKnobProportionKey]; + [aCoder encodeInt:_style forKey:CPScrollerStyleKey]; } @end diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-center.png deleted file mode 100644 index 7ae79b060da3fb36b832e45d9f43f5db98bb9d1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 154 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrK!2~2%)f%k>Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiflYx978H@*__;<)EubWn~HcfgsyU*5~PFmFyZ zdm40k2KQ|qLB>fFSjzXQ$=3D$@>kq)t)GFJ;p1Yhz4zB;Xamh*@O1TaS?83{1OVSv BF{=Oo diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-disabled-left.png deleted file mode 100644 index 1417e8c3412287d4c6ad6f3466c127e69aaee2c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 436 zcmV;l0ZaagP)K@^4W{II*ifP>%) zRumc%qlFpn7;-)D@0<2bRW;TSwS zzo?hX%k5IB%ojO_FbrX=E&KgHuo-Q;?#fefsmLwc2H*E#Ry66FxxTq=WpmkGLMR9! z;6Kr%t3?PoHg%)X2YmPAH3gIW(>Cz$pP-by zB7~0=DBH1}xvMz&DV>&P(qTs84~t79=(n-l&a68`KyYSs|Km+gX?0x$SsnS^J{8 z^UtKNt{WNvLd<8abyEmlKRP_9V=d!#^FNAI+wLHvfiVU_5P<8t;CWw-Znv{_T&vmf zrf7pTavX3d1tBFYW-?GJm7rK$UN4td?l!B{3Nplq8ki`hq88JykD1A4A)hZ4q*NzZ zuEpahO9%n;>H9vU34vTLSJ~d#t0K5y)Gdka|4Pm|s4xUV(i<^s5zYl91)dui=c_Z= zv`vZ-l|65~6d%&SJQ3!T`RU9J{*SUtUE}@B)Mp}vOoRu60VQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii|y7978H@*>oCmF&J$hoaMo;+4?GK$% r5p+xo3N0}=KK!ok>aF|rtP%{FZL7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5DMr1r)978x{lYjjGZ_g~uETF(4a9;f2 e(PK#tSJ@btUD)DY@6c}pMTMuUpUXO@geCwn@*VmB literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png new file mode 100644 index 0000000000000000000000000000000000000000..047e47c967e988b0c9cd00903de7982c5575f150 GIT binary patch literal 1347 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y?!3HE>ZCjQIxlq%ts6 zFt&!=&%PWW^6ysa+zk)At_gV^0saR z`_1lrtE1%~+3kL^^W1FCub#wvOeFEgnhqtOZ%Uiz%{K8>4`$x^efRyJ?=01yKZ#rL zvoPwih(5naXt4j$Lw}Au5xM_~F;2!=`%i{%cbk}(n!5x4 zDKBTQeJ;?OJ4@2~-8Rw;;mo@nX|Dr?V>S1l9IFe^-(@ z<8A7!>5-a3sxm5jl0w!Q=VU(PX6~Hz?DE?$0h2b&H`#Au9Qpb2+kmMouMLlW{pRiV zW!K*8wET=QDJ!@s@XzZP{pt(^4X^%l9_t6!ogS%uxc{p9R2<-zm3(B?4<9i}C9fryGD|`#H(6Y>)|fo)t&Drc$#}jUabjPiH|_ZL z;PdxO8#eL-U|e*Y$LxM_lSD z|E9p}rDo421W*4{%6;Bw$~)CEp$MK`Yd*yN(8}TRZxuf@egBmc=kBc)Jl#;JW4C%< z@Y!Q;R4@5ldY!Ukf7e&1V-i0n7&=GI-KXL^r_1uwtpILyw(_Re&mP6-UuU1U`%LV^ zUpqP0>J=&X9TNZQTBG=3pYcAs`0e=}iOX;AyPWcRv0>Ef-IpisTC}lhO8;&3Z?=7_ zge5m^+_$kVj6-|NqU0>E%_aT}%&NJ5(?7FLelOUl#bQ121;(XMI5*V9>AV)b zEpIb#d&5NQ+sSKfa}#%U+l8&ZU7{B)$GDq+_0{?3S6#jP{7F4`#o|9~E0wvf9a&l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTK zVr7USFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xps5^5D;1=Z-LwyDGpMFJRfxe-h zfj-=1phg>@AFZ5=QWHz^i$e1AbL<>JfuInOkzbNuoRMFk;2dnK;G3A7nFr$A=%Xu# z+Ha!|aukvyAt3-31qOi~7f>fGIPJJpPFjFs#Lv^kF@!@l`Op9V_RKs62PG7w%-dO2 z&Yn1-!MNm#WFt#QBG-`wTP+1Pjs_k9mdy+1d^g}Tp74>oW2qxkkAgUZ?_`!uR}aWc e(BODb#>l|e$s;@U#uXb-ZCjQIxlq%ts6 zFt&!=&%PWW^6ysa+zk)At_gV^0saR z`_1lrtE1%~+3kL^^W1FCub#wvOeFEgnhqtOZ%Uiz%{K8>4`$x^efRyJ?=01yKZ#rL zvoPwih(5naXt4j$Lw}Au5xM_~F;2!=`%i{%cbk}(n!5x4 zDKBTQeJ;?OJ4@2~-8Rw;;mo@nX|Dr?V>S1l9IFe^-(@ z<8A7!>5-a3sxm5jl0w!Q=VU(PX6~Hz?DE?$0h2b&H`#Au9Qpb2+kmMouMLlW{pRiV zW!K*8wET=QDJ!@s@XzZP{pt(^4X^%l9_t6!ogS%uxc{p9R2<-zm3(B?4<9i}C9fryGD|`#H(6Y>)|fo)t&Drc$#}jUabjPiH|_ZL z;PdxO8#eL-U|e*Y$LxM_lSD z|E9p}rDo421W*4{%6;Bw$~)CEp$MK`Yd*yN(8}TRZxuf@egBmc=kBc)Jl#;JW4C%< z@Y!Q;R4@5ldY!Ukf7e&1V-i0n7&=GI-KXL^r_1uwtpILyw(_Re&mP6-UuU1U`%LV^ zUpqP0>J=&X9TNZQTBG=3pYcAs`0e=}iOX;AyPWcRv0>Ef-IpisTC}lhO8;&3Z?=7_ zge5m^+_$kVj6-|NqU0>E%_aT}%&NJ5(?7FLelOUl#bQ121;(XMI5*V9>AV)b zEpIb#d&5NQ+sSKfa}#%U+l8&ZU7{B)$GDq+_0{?3S6#jP{7F4`#o|9~E0wvf9a&l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTK zVr7USFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xps5^5D;1=Z-LwyDGpMFJRfxe-h zfj-=1phg>@AFZ5=QWHz^i$e1AbL<>JfuInOkzbNuoRMFk;2dnK;G3A7nFr$A=%Xu# z+Ha!|aukvyAt3-31qOi~7f>fGIPJJpPFjFs#NN}zF@!@l`Op9V_RKs62PG7w%-L14 z`HwtO*sG9Q*>Ps)QKl<@I6LwgeXEap%qeErt0-6@Aa?W) PD7HLZ{an^LB{Ts5dfYI5 literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png new file mode 100644 index 0000000000000000000000000000000000000000..b83295f890275922e4123fc357845773365b4278 GIT binary patch literal 1323 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrC!3HGXIhVySFfhwyIy(n=Iy)-_6y>L7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5DM$9~2978x{b-PY-G8ph2mU+M5FO6HV zJv!s7Ko!S3y^yIJb}yRQxWmSiDV^<2-iNw`v^v)#tC^>`D=m1#`LPQWNuI8LF6*2U FngBf^D--|# literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png new file mode 100644 index 0000000000000000000000000000000000000000..050e7206bd0fa9d128a0ff545c585586b9d9c8d1 GIT binary patch literal 1530 zcmeAS@N?(olHy`uVBq!ia0vp^+(697!3HFMCO(_Wz`!h*>FgZf>Flf!P?VpRnUl)E zP{G(5azFcWfXKgFsdG0x?6yi5# zEzQK#VHW2h_M=W#-a8yDW@JA2%zNWpqsS9=wUv|fx@}gw2I)Udaoxo8?Sp)A^QZU? zE2g}hz4p04Z|*Efzl$|p_v9^W3woY0Ts>$XFR|Bg$J~Mlv&V}~>zvN2tP@n*`}|!= z=8U(gv!+LC3aQGd>`4k)XPlGyjGMW0*0alRzXVL$FyCaqiE-rT$8Q6svb;7t`t_T) z+m~H?uiu_HnfhB$d3DT*@p7soZ37&01sfw6`+u6({5QcEpK&jo!55 z+k@Zp?y6qz+aua~bo=5Pfp51qzTCA*c$Rd1Y2wnwc@NEZKAkO{yPBIL@L$){jUI8S zr~I1&ua}xVn-DzxPbv3#qbcuH%Y-6$cCGmk_d_d(%fD6p(DeORPMo{9R`7H~p^n|^ zdBJCoy-~g7bLn-;j{RL2nPqzZN)!E9MUO#&jqko-!-tIH8 z4}b0CSgTj0+;>R)t80zohkeHT?BciQcO)*qz3+0$>&1pquXkUbxNFhIsww@q)xX*H ztrC{pv~l0Yx-bsyEsK(~yf&BkGcc>>`c41LI{Cd|3wKS&I^E9x)k)zK{I$9AXY#~N z=kZ+caZ_)Db^lxDZNb-KpJm1uTYlCmcq#q&@M}HuP_{V90~d?+#1|NsKH=O@6Q}c9 z^tQasyzLDWt#2ofAZ{?%9KpI>$L?(--0+!c%eu&q?)x^`$` zyb&10_2y1qB70 zqLehNAQv~Nb|BAIDWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_ zuUHvk2+SOp)Z*l#%z~24{5%Daxrs^nr6smXN+65i0P4=%0=Pwa#ZX@X{ik1%SfFpH zXP^%^8K}_)=tnE(qSVBa{GyQj{2V(+P#`D-WaO9R7iZ)bC^!e3D)=TQXXb(UHu~tw zq4wM8gB*qANJt2PMS($J#|6|03r;&Om6I007-3}fba4#P5bd3Kx~s)Nz%^fv!_HwN zd&$BF|KI;*o&K*;p=oz!Oh?muzojS7cvKm(P7?5cw|8n%YGmAx^o{FY+Z}qn%jvJP z0E@?Ekw6j0qI0@;b8lZT;oYR;94Im&sA)%k!Ts+ZlUOR}Wp_9zwlp1$t(0IhIG49z z`{xZ&aukR-8Dv@DVN&Ol9dtdg1Fy$i> zmpiU1l=_`_Q%GHIG*RcN0gqvya!ZYM+;eN|*lklX8FFtQ`W%|aDi!*6iOyQiYo)xW zWR8D)?+{|Mj8C^BQY<8t^?Iq}#*)QZaz3`*tii#bZJK2=zU+H{xKL&f!w#jo)lo{3 Qppu=z)78&qol`;+0HI5dS^xk5 literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png new file mode 100644 index 0000000000000000000000000000000000000000..bb3667ac4fc2106cb1b77c10a396893e7d1d0a20 GIT binary patch literal 1531 zcmeAS@N?(olHy`uVBq!ia0vp^+(697!3HFMCO(_Wz`!h*>FgZf>Flf!P?VpRnUl)E zP{G(5azFcWfXKgFsdG0x?6yi5# zEzQK#VHW2h_M=W#-a8yDW@JA2%zNWpqsS9=wUv|fx@}gw2I)Udaoxo8?Sp)A^QZU? zE2g}hz4p04Z|*Efzl$|p_v9^W3woY0Ts>$XFR|Bg$J~Mlv&V}~>zvN2tP@n*`}|!= z=8U(gv!+LC3aQGd>`4k)XPlGyjGMW0*0alRzXVL$FyCaqiE-rT$8Q6svb;7t`t_T) z+m~H?uiu_HnfhB$d3DT*@p7soZ37&01sfw6`+u6({5QcEpK&jo!55 z+k@Zp?y6qz+aua~bo=5Pfp51qzTCA*c$Rd1Y2wnwc@NEZKAkO{yPBIL@L$){jUI8S zr~I1&ua}xVn-DzxPbv3#qbcuH%Y-6$cCGmk_d_d(%fD6p(DeORPMo{9R`7H~p^n|^ zdBJCoy-~g7bLn-;j{RL2nPqzZN)!E9MUO#&jqko-!-tIH8 z4}b0CSgTj0+;>R)t80zohkeHT?BciQcO)*qz3+0$>&1pquXkUbxNFhIsww@q)xX*H ztrC{pv~l0Yx-bsyEsK(~yf&BkGcc>>`c41LI{Cd|3wKS&I^E9x)k)zK{I$9AXY#~N z=kZ+caZ_)Db^lxDZNb-KpJm1uTYlCmcq#q&@M}HuP_{V90~d?+#1|NsKH=O@6Q}c9 z^tQasyzLDWt#2ofAZ{?%9KpI>$L?(--0+!c%eu&q?)x^`$` zyb&10_2y1qB70 zqLehNAQv~Nb|BAIDWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_ zuUHvk2+SOp)Z*l#%z~24{5%Daxrs^nr6smXN+65i0P4=%0=Pwa#ZX@X{ik1%SfFpH zXP^%^8K}_)=tnE(qSVBa{GyQj{2V(+P#`D-WaO9R7iZ)bC^!e3D)=TQXXb(UHu~tw zq4wM8gB*qANJt2PMS($J#|6|03r;&Om6I007-3}dba4#P5bd3Cx~s)Nz%^ga%&ddE zT(4x|1O6Q!kN=e|RNf)sc=Y&>GZB25%RKef0zy{IsV)|t_I&3dd-2!5%t(fgP(0o;(1xb^HnvQ*i8RynLlIM%YB}+1E;gRIJ4_A z<5O{`3*WY?@S1LUdz)AHG}Gx#KIv8p<-e?iCN=!KT^f72GB%v~-7daDnffxd@VEC& zcx8?^zW=>`O_lQV_ma;){?2{kvGJ0LX^f}B^Gr5Z$>SgELZ+o|$c>)8_p7{w%%ORw Sqtxbt5}l{3pUXO@geCxUzLB5+ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..1715d2dcfcf887b1b7744748ec72fd1615098aff GIT binary patch literal 1338 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_1!3HE3U$f%}vgI~=rdd2Tl6S5M+SCX)DLO^1@tH>J(p+85Sh}{3g7$@Vb{U^h>yG_hX&E0|j@}|o7n?Li(9m^?smw$it zzvQd4rt%1WkWtt-#q@~M!^j1hF;_~2A6)BvKiAOo&{?12h~+Gt^63`&$&C+tdX=Z8 znV34v;ylED)XBfJqzXo9s6+j{N-iZNOBP*M>*Ge)D$w zvTN`4+Y=|VKQ^^nu6eEA;osixUyHh)R!;ixdW&4|)i2SLtio>JesXr1^5G-pf%eQE zPECC>DH;zZI`JgVNr;JWIW%FII*wMn|6GA z@O$1})$4tGL|cz;Uwk9*?bgPZyEX~WlCCdJT)H^#q500Iv!!!ab8`g#>w3D;BQEun ze^cP~QnP0hf~Wr}UJbNAK?o^B}Av0FVa z`0TMas+W8&y-wM&zw4{hF^QiO44tFq?o;ud(`EVTRsgp;TY1y#XOCj^ud~nFeJ1wd zubmug^@^1H4vBwttx^22&v>6*{Pz5g#O1g5T~2wu*f8q#?#mN*E!tQ$rT@12H`~5d z!jhXd?%P-w#-Y7sQF4~o<`RDfX4PE3>7Q9AzZY!buIX5(+u6T5DSU#zHdp>kp1A2e zp6fks>TR&@f6Kfr_*(3<%=lu<&sqg9rT-p&t!Ey}7AJY&VzHk10^`yroEvK5bY6?z zmbaO=yv0i>ry1t>MrKP@sk-m|UE>MMTab;dfVufyA zu`tKo-FP)SbBnaEtPap}qq8Pro9uK;KZ$ zKp$>0P@@gdk5zopr07kno5C8xG literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png new file mode 100644 index 0000000000000000000000000000000000000000..5bf0395692c6fa457154bc9797b85139f875b7cc GIT binary patch literal 1296 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^|!3HGX$<1eBU|^QZbaoE#baqwWn zs9z&x-*5iRCwDBT>i?CDjW zmS$q=FpKjL`%xz=?;Q>nGcq51=Dl&QQRIob+R90K-8QRTgY=)KxNhS4_Cdb5`BVIc z6;oc$Ui)02H+Pn#-^H4)d-9gG1wGFgt{$|Hm)PsLV{So&+2h5gbxvnh)(NWZeg3W_ zbH>}$S<@pmg;Zr!_9TU@GtS9;#?9P0>)GYEUjim=m~XP*#5nTvLNaZn@^QdWU~|zke<2dRjT@!|N?_y;r|PPqGTTef!DTWy*(-ln2@~ zdpI@q$)spJnCQflI4k+csvkaLl1g4nE@hU4RBp1kX00)K+FKd-ij(ntJL1H?MsM2j z?ZNMPcU7TKmrub(}N(Z9|fdbp zRtZaP+PH6HT^NVoo;9U>ZI@q{@PsmGkM~s z^LVcJxT&|ny8kWnw%}{A&obkSEkA1&yp;ZX__dySC|jK5fs4g@;tPyRpKxxdiPL#4 zdRyLR-u8xx*0+<_+U6$i>b478eY-?2T8?oy|LUvr&#$_A_xY20?ux~K*j6fYT|2Ze z-UygsI14-?iy0WWg+Z8+Vb&Z8U{)&342dX-@b$4u&d=3LOvz75)vL%Y0IFtSu&J;D zGILW)5)~?PbMlI0ooeue djalZ0e=uC{W&6KVr_TZu6P~VqF6*2UngG?QAlU!_ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png new file mode 100644 index 0000000000000000000000000000000000000000..f7947c66ebb96fbefab4e73da24cda3761aa6dda GIT binary patch literal 1336 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_1!3HE3U$f%}vgI~=rdd2Tl6S5M+SCX)DLO^1@tH>J(p+85Sh}{3g7$@Vb{U^h>yG_hX&E0|j@}|o7n?Li(9m^?smw$it zzvQd4rt%1WkWtt-#q@~M!^j1hF;_~2A6)BvKiAOo&{?12h~+Gt^63`&$&C+tdX=Z8 znV34v;ylED)XBfJqzXo9s6+j{N-iZNOBP*M>*Ge)D$w zvTN`4+Y=|VKQ^^nu6eEA;osixUyHh)R!;ixdW&4|)i2SLtio>JesXr1^5G-pf%eQE zPECC>DH;zZI`JgVNr;JWIW%FII*wMn|6GA z@O$1})$4tGL|cz;Uwk9*?bgPZyEX~WlCCdJT)H^#q500Iv!!!ab8`g#>w3D;BQEun ze^cP~QnP0hf~Wr}UJbNAK?o^B}Av0FVa z`0TMas+W8&y-wM&zw4{hF^QiO44tFq?o;ud(`EVTRsgp;TY1y#XOCj^ud~nFeJ1wd zubmug^@^1H4vBwttx^22&v>6*{Pz5g#O1g5T~2wu*f8q#?#mN*E!tQ$rT@12H`~5d z!jhXd?%P-w#-Y7sQF4~o<`RDfX4PE3>7Q9AzZY!buIX5(+u6T5DSU#zHdp>kp1A2e zp6fks>TR&@f6Kfr_*(3<%=lu<&sqg9rT-p&t!Ey}7AJY&VzHk10^`yroEvK5bY6?z zmbaO=yv0i>ry1t>MrKP@sk-m|UE>MMTab;dfVufyA zu`tKo-FP)SbBnaEtPap}qq8Pro9uK;KZ$ zKp$>0P@@gdk5u9b|2 z_5$@RkD?t)*Eg8R7%a+W$r55eHS1ugf<$^l*8Iaed<@ux);1n-OKXZ@U}xAXC+Pbu S@U}Q8#ynm9T-G@yGywnvHY`;D literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..61d1eb3e4216380c89f8206ea3b68c5a7a91d74e GIT binary patch literal 1552 zcmZ8g3pCVO82?LNGb4#Y#27?j#ybWRhEN_OLH#4O`KX8tmEl_HKu$Rji!iIz&< zEh1y{s&-dG9yME7uVZID3KOl>j#6jO-gCZtzwbN0@Ap0Ky(t72dr8p!u_V)fX<-iM>h#u|3i6#Bdv8h*t^V580BvvZVF< z$tWj2skOA71s##-8DFr~4|@ zy1Jv?jte{3#AhgxwI;G`5F~bR_q}ze0}7~si2_7UF?5 zzlIk6#NQ=vG)6NX?N97!E+2DS`04U|Yl941F)oVqV|m2nv4=B-inJ=YxZ76hOuYk< z@{4P{+h~-@>^1lN%_w-kLGGf)`F-Aq*89uE^`qf1*F?F_{EnATpTDh^{`FF%4z8-i zy|4E#jX|eD9=W9>be?p%~=_Wm^it|=NF&zt?jA2TXe()Qcg$&U}k ztI-U#j83^VyI9p_jv)sZ&PDE zjJWoLvf%GdHbSm|um;T~e?=r`N%{&rHn~POC9^8X>zb=J47`CL<|7b+TpaH;wg%zkY3PeJ(XyFk|EXxx08G#k(+inaB z`56L*S)#n12}nH1pdgLVMrb`04u(V`Eg0l;*weNrcESagB`Oqx=vWLUIyxF1ZHNXL zAsBr#Gc$~y0mi^USAfuE#za6QmTm-7?F-3Q9$N}Cm_emOR4@X$%}WXbqaaHZYCF-l zwNodJ{w+}ibEhjoe;5{tj?qW!VZJd70xbkRV(|HO$#NV4C3{GN}3Nyq9NBV4{m}Ef1@e+NljwwQ^~y;StMC`Wn zs9z&x-*5iRCwDBT>i?CDjW zmS$q=FpKjL`%xz=?;Q>nGcq51=Dl&QQRIob+R90K-8QRTgY=)KxNhS4_Cdb5`BVIc z6;oc$Ui)02H+Pn#-^H4)d-9gG1wGFgt{$|Hm)PsLV{So&+2h5gbxvnh)(NWZeg3W_ zbH>}$S<@pmg;Zr!_9TU@GtS9;#?9P0>)GYEUjim=m~XP*#5nTvLNaZn@^QdWU~|zke<2dRjT@!|N?_y;r|PPqGTTef!DTWy*(-ln2@~ zdpI@q$)spJnCQflI4k+csvkaLl1g4nE@hU4RBp1kX00)K+FKd-ij(ntJL1H?MsM2j z?ZNMPcU7TKmrub(}N(Z9|fdbp zRtZaP+PH6HT^NVoo;9U>ZI@q{@PsmGkM~s z^LVcJxT&|ny8kWnw%}{A&obkSEkA1&yp;ZX__dySC|jK5fs4g@;tPyRpKxxdiPL#4 zdRyLR-u8xx*0+<_+U6$i>b478eY-?2T8?oy|LUvr&#$_A_xY20?ux~K*j6fYT|2Ze z-UygsI14-?iy0WWg+Z8+Vb&Z8U{)&342dX-@b$4u&d=3LOvz75)vL%Y0IFtSu&J;D zGILW)5)~?PbMlI0oKG(BLdS>UUs(bw$JFL&}sC=BL7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5LMi{w0T^vI+ME6eInb+dL(^mh^+WQ7~ zCtJp*^@o^0b4@WRnG&Lq8h$H@v%HCYqtogT&7_yp-IMFT-8g)-@Qd&A*KQ{9Wty*RJA9jeJzMKUspUV-d$;gAMj?Hdf!Zy*xkR_O=t7cziD( z*rdba$PhX0V4=*b^-|k!^Iku%ZF9a^f#Y=1t6grBRMs56X?wVC`@&UPBCd_=UR%iZ z?Wl=Kn5Fi~#{GI}g6w6J)@7LmGVGHy3{Q5Qu~~iY^Mmx(L=MkM0U}44zSZ_$etG2C zLIz>c8Rw%X{5$`>)<&+Mb;-k(N}ba-Ugf$Jrs22Y^)7A??+2}{QQQI>oStk?yKPp- Yz*L{HF`4Jp3{cARboFyt=akR{0HHROQ~&?~ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index ad9557478..677d01454 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -641,13 +641,9 @@ var themedButtonValues = nil, ], PatternIsVertical), - disabledTrackColor = PatternColor( - [ - ["scroller-vertical-track-top.png", 7.0, 3.0], - ["scroller-vertical-track-center.png", 7.0, 1.0], - ["scroller-vertical-track-bottom.png", 7.0, 3.0] - ], - PatternIsVertical), + trackColorLegacy = PatternColor("scroller-legacy-vertical-track-center.png", 14.0, 1.0), + incrementColorLegacy = PatternColor("scroller-legacy-vertical-track-bottom.png", 14.0, 11.0), + decrementColorLegacy = PatternColor("scroller-legacy-vertical-track-top.png", 14.0, 11.0), knobColor = PatternColor( [ @@ -657,35 +653,45 @@ var themedButtonValues = nil, ], PatternIsVertical), - disabledKnobColor = PatternColor( + knobColorLegacy = PatternColor( [ - ["scroller-vertical-knob-disabled-top.png", 7.0, 3.0], - ["scroller-vertical-knob-disabled-center.png", 7.0, 1.0], - ["scroller-vertical-knob-disabled-bottom.png", 7.0, 3.0] + ["scroller-legacy-vertical-knob-top.png", 14.0, 3.0], + ["scroller-legacy-vertical-knob-center.png", 14.0, 1.0], + ["scroller-legacy-vertical-knob-bottom.png", 14.0, 3.0] ], - PatternIsVertical); + PatternIsVertical), + themedVerticalScrollerValues = [ + // Common [@"minimum-knob-length", 21.0, CPThemeStateVertical], + + // Overlay + [@"scroller-width", 7.0, CPThemeStateVertical], [@"knob-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateVertical], [@"track-inset", CGInsetMake(2.0, 0.0, 11.0, 0.0), CPThemeStateVertical], - [@"track-border-offset", 9.0, CPThemeStateVertical], + [@"track-border-overlay", 9.0, CPThemeStateVertical], + [@"knob-slot-color", [CPNull null], CPThemeStateVertical], + [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], + [@"knob-color", knobColor, CPThemeStateVertical], + [@"increment-line-color", [CPNull null], CPThemeStateVertical], + [@"decrement-line-color", [CPNull null], CPThemeStateVertical], + [@"decrement-line-size", CPSizeMakeZero(), CPThemeStateVertical], + [@"increment-line-size", CPSizeMakeZero(), CPThemeStateVertical], - [@"knob-color", knobColor, CPThemeStateVertical], - [@"knob-color", disabledKnobColor, CPThemeStateVertical | CPThemeStateDisabled], - - [@"knob-slot-color", [CPNull null], CPThemeStateVertical], - [@"knob-slot-color", [CPNull null], CPThemeStateVertical | CPThemeStateDisabled], - - [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], - [@"knob-slot-color", disabledTrackColor, CPThemeStateVertical | CPThemeStateDisabled | CPThemeStateSelected], - - [@"decrement-line-size", CPSizeMakeZero(), CPThemeStateVertical], - [@"decrement-line-color", [CPNull null], CPThemeStateVertical], - - [@"increment-line-size", CPSizeMakeZero(), CPThemeStateVertical], - [@"increment-line-color", [CPNull null], CPThemeStateVertical] + // Legacy + [@"scroller-width", 14.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"track-border-overlay", 0.0, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"knob-slot-color", trackColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy | CPThemeStateSelected], + [@"knob-color", knobColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"increment-line-color", incrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"decrement-line-color", decrementColorLegacy, CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"decrement-line-size", CPSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy], + [@"increment-line-size", CPSizeMake(14.0, 11.0), CPThemeStateVertical | CPThemeStateScrollViewLegacy] ]; [self registerThemeValues:themedVerticalScrollerValues forView:scroller]; @@ -713,14 +719,9 @@ var themedButtonValues = nil, ["scroller-horizontal-track-right.png", 3.0, 7.0] ], PatternIsHorizontal), - - disabledTrackColor = PatternColor( - [ - ["scroller-horizontal-track-left.png", 3.0, 7.0], - ["scroller-horizontal-track-center.png", 1.0, 7.0], - ["scroller-horizontal-track-right.png", 3.0, 7.0] - ], - PatternIsHorizontal), + trackColorLegacy = PatternColor("scroller-legacy-horizontal-track-center.png", 1.0, 14.0), + incrementColorLegacy = PatternColor("scroller-legacy-horizontal-track-right.png", 11.0, 14.0), + decrementColorLegacy = PatternColor("scroller-legacy-horizontal-track-left.png", 11.0, 14.0), knobColor = PatternColor( [ @@ -730,32 +731,40 @@ var themedButtonValues = nil, ], PatternIsHorizontal), - disabledKnobColor = PatternColor( + knobColorLegacy = PatternColor( [ - ["scroller-horizontal-knob-disabled-left.png", 3.0, 7.0], - ["scroller-horizontal-knob-disabled-center.png", 1.0, 7.0], - ["scroller-horizontal-knob-disabled-right.png", 3.0, 7.0] + ["scroller-legacy-horizontal-knob-left.png", 3.0, 14.0], + ["scroller-legacy-horizontal-knob-center.png", 1.0, 14.0], + ["scroller-legacy-horizontal-knob-right.png", 3.0, 14.0] ], PatternIsHorizontal); themedHorizontalScrollerValues = [ + // Common [@"minimum-knob-length", 21.0], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 2.0)], [@"track-inset", CGInsetMake(0.0, 11.0, 0.0, 2.0)], - [@"track-border-offset", 9.0], - - [@"knob-color", knobColor], - [@"knob-color", disabledKnobColor, CPThemeStateDisabled], - + [@"track-border-overlay", 9.0], [@"knob-slot-color", [CPNull null]], - [@"knob-slot-color", [CPNull null], CPThemeStateDisabled], - - [@"knob-slot-color", trackColor, CPThemeStateSelected], - [@"knob-slot-color", disabledTrackColor, CPThemeStateDisabled | CPThemeStateSelected], - + [@"knob-slot-color", trackColor, CPThemeStateSelected], + [@"knob-color", knobColor], [@"decrement-line-size", CPSizeMakeZero()], - [@"increment-line-size", CPSizeMakeZero()] + [@"increment-line-size", CPSizeMakeZero()], + + // Legacy + [@"scroller-width", 14.0, CPThemeStateScrollViewLegacy], + [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], + [@"track-inset", CGInsetMake(0.0, 0.0, 0.0, 0.0), CPThemeStateScrollViewLegacy], + [@"track-border-overlay", 0.0, CPThemeStateScrollViewLegacy], + [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy], + [@"knob-slot-color", trackColorLegacy, CPThemeStateScrollViewLegacy | CPThemeStateSelected], + [@"knob-color", knobColorLegacy, CPThemeStateScrollViewLegacy], + [@"increment-line-color", incrementColorLegacy, CPThemeStateScrollViewLegacy], + [@"decrement-line-color", decrementColorLegacy, CPThemeStateScrollViewLegacy], + [@"decrement-line-size", CPSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy], + [@"increment-line-size", CPSizeMake(11.0, 14.0), CPThemeStateScrollViewLegacy] ]; [self registerThemeValues:themedHorizontalScrollerValues forView:scroller]; From d6412eec582bfac945ef96cf9bda566eaff7cb34 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 4 Oct 2011 14:36:08 +0200 Subject: [PATCH 05/22] tidy up the CPScrollView class file --- AppKit/CPScrollView.j | 1294 +++++++++++++++++++++-------------------- 1 file changed, 665 insertions(+), 629 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 424b43f06..06d45eca3 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -5,6 +5,10 @@ * Created by Francisco Tolmasky. * Copyright 2008, 280 North, Inc. * + * Modified to match Lion style by Antoine Mercadal 2011 + * + * + * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either @@ -70,9 +74,13 @@ var TIMER_INTERVAL = 0.2, CPTimer _timerScrollersHide; - int _scrollerStyle @accessors(getter=scrollerStyle); + int _scrollerStyle; } + +#pragma mark - +#pragma mark Class methods + + (CPString)defaultThemeClass { return @"scrollview" @@ -86,97 +94,6 @@ var TIMER_INTERVAL = 0.2, }]; } -- (id)initWithFrame:(CGRect)aFrame -{ - self = [super initWithFrame:aFrame]; - - if (self) - { - _verticalLineScroll = 10.0; - _verticalPageScroll = 10.0; - - _horizontalLineScroll = 10.0; - _horizontalPageScroll = 10.0; - - _borderType = CPNoBorder; - - _contentView = [[CPClipView alloc] initWithFrame:[self _insetBounds]]; - [self addSubview:_contentView]; - - _headerClipView = [[CPClipView alloc] init]; - [self addSubview:_headerClipView]; - - _bottomCornerView = [[CPView alloc] init]; - [self addSubview:_bottomCornerView]; - - [self setHasVerticalScroller:YES]; - [self setHasHorizontalScroller:YES]; - [self setScrollerStyle:CPScrollerStyleOverlay]; - - _delegate = nil; - _scrollTimer = nil; - _implementedDelegateMethods = 0; - } - - return self; -} - -- (id)delegate -{ - return _delegate; -} - -- (void)setDelegate:(id)aDelegate -{ - if (aDelegate === _delegate) - return; - - _delegate = aDelegate; - _implementedDelegateMethods = 0; - - if (_delegate === nil) - return; - - if ([_delegate respondsToSelector:@selector(scrollViewWillScroll:)]) - _implementedDelegateMethods |= CPScrollViewDelegate_scrollViewWillScroll_; - - if ([_delegate respondsToSelector:@selector(scrollViewDidScroll:)]) - _implementedDelegateMethods |= CPScrollViewDelegate_scrollViewDidScroll_; -} - -/*! - Set the scroller styles - - CPScrollerStyleLegacy: Standard scroller like prior 10.7 - - CPScrollerStyleOverlay: scrollers like 10.7+ -*/ -- (void)setScrollerStyle:(int)aStyle -{ - if (_scrollerStyle == aStyle) - return; - - _scrollerStyle = aStyle; - - [self _updateScrollerStyle]; -} - -- (void)_updateScrollerStyle -{ - if (_hasHorizontalScroller) - { - [_horizontalScroller setStyle:_scrollerStyle]; - [_horizontalScroller unsetThemeState:CPThemeStateSelected]; - } - if (_hasVerticalScroller) - { - [_verticalScroller setStyle:_scrollerStyle]; - [_verticalScroller unsetThemeState:CPThemeStateSelected]; - } - - [self reflectScrolledClipView:_contentView]; -} - -// Calculating Layout - + (CGSize)contentSizeForFrameSize:(CGSize)frameSize hasHorizontalScroller:(BOOL)hFlag hasVerticalScroller:(BOOL)vFlag borderType:(CPBorderType)borderType { var bounds = [self _insetBounds:_CGRectMake(0.0, 0.0, frameSize.width, frameSize.height) borderType:borderType], @@ -228,26 +145,104 @@ var TIMER_INTERVAL = 0.2, } } -- (CGRect)_insetBounds + +#pragma mark - +#pragma mark Initialization + +- (id)initWithFrame:(CGRect)aFrame { - return [[self class] _insetBounds:[self bounds] borderType:_borderType]; + self = [super initWithFrame:aFrame]; + + if (self) + { + _verticalLineScroll = 10.0; + _verticalPageScroll = 10.0; + + _horizontalLineScroll = 10.0; + _horizontalPageScroll = 10.0; + + _borderType = CPNoBorder; + + _contentView = [[CPClipView alloc] initWithFrame:[self _insetBounds]]; + [self addSubview:_contentView]; + + _headerClipView = [[CPClipView alloc] init]; + [self addSubview:_headerClipView]; + + _bottomCornerView = [[CPView alloc] init]; + [self addSubview:_bottomCornerView]; + + [self setHasVerticalScroller:YES]; + [self setHasHorizontalScroller:YES]; + [self setScrollerStyle:CPScrollerStyleOverlay]; + + _delegate = nil; + _scrollTimer = nil; + _implementedDelegateMethods = 0; + } + + return self; } -// Determining component sizes + +#pragma mark - +#pragma mark Getters / Setters + /*! - Returns the size of the scroll view's content view. + The delegate of the scrol view */ -- (CGSize)contentSize +- (id)delegate { - return [_contentView frame].size; + return _delegate; } /*! - Returns the view that is scrolled for the user. + Set the delegate of the scroll view */ -- (id)documentView +- (void)setDelegate:(id)aDelegate { - return [_contentView documentView]; + if (aDelegate === _delegate) + return; + + _delegate = aDelegate; + _implementedDelegateMethods = 0; + + if (_delegate === nil) + return; + + if ([_delegate respondsToSelector:@selector(scrollViewWillScroll:)]) + _implementedDelegateMethods |= CPScrollViewDelegate_scrollViewWillScroll_; + + if ([_delegate respondsToSelector:@selector(scrollViewDidScroll:)]) + _implementedDelegateMethods |= CPScrollViewDelegate_scrollViewDidScroll_; +} + +- (int)scrollerStyle +{ + return _scrollerStyle; +} + +/*! + Set the scroller styles + - CPScrollerStyleLegacy: Standard scroller like prior 10.7 + - CPScrollerStyleOverlay: scrollers like 10.7+ +*/ +- (void)setScrollerStyle:(int)aStyle +{ + if (_scrollerStyle == aStyle) + return; + + _scrollerStyle = aStyle; + + [self _updateScrollerStyle]; +} + +/*! + Returns the content view that clips the document. +*/ +- (CPClipView)contentView +{ + return _contentView; } /*! @@ -276,12 +271,21 @@ var TIMER_INTERVAL = 0.2, [self reflectScrolledClipView:_contentView]; } + /*! - Returns the content view that clips the document. + Returns the size of the scroll view's content view. */ -- (CPClipView)contentView +- (CGSize)contentSize { - return _contentView; + return [_contentView frame].size; +} + +/*! + Returns the view that is scrolled for the user. +*/ +- (id)documentView +{ + return [_contentView documentView]; } /*! @@ -297,6 +301,560 @@ var TIMER_INTERVAL = 0.2, [self reflectScrolledClipView:_contentView]; } +/*! + Returns the border type drawn around the view. +*/ +- (CPBorderType)borderType +{ + return _borderType; +} + +/*! + Sets the type of border to be drawn around the view. + Valid types are: +
+    CPNoBorder
+    CPLineBorder
+    CPBezelBorder
+    CPGrooveBorder
+*/ +- (void)setBorderType:(CPBorderType)borderType +{ + if (_borderType == borderType) + return; + + _borderType = borderType; + + [self reflectScrolledClipView:_contentView]; + [self setNeedsDisplay:YES]; +} + + +/*! + Returns the scroll view's horizontal scroller +*/ +- (CPScroller)horizontalScroller +{ + return _horizontalScroller; +} + +/*! + Sets the scroll view's horizontal scroller. + @param aScroller the horizontal scroller for the scroll view +*/ +- (void)setHorizontalScroller:(CPScroller)aScroller +{ + if (_horizontalScroller === aScroller) + return; + + [_horizontalScroller removeFromSuperview]; + [_horizontalScroller setTarget:nil]; + [_horizontalScroller setAction:nil]; + + _horizontalScroller = aScroller; + + [_horizontalScroller setTarget:self]; + [_horizontalScroller setAction:@selector(_horizontalScrollerDidScroll:)]; + + [self addSubview:_horizontalScroller]; + + [self _updateScrollerStyle]; +} + +/*! + Returns \c YES if the scroll view can have a horizontal scroller. +*/ +- (BOOL)hasHorizontalScroller +{ + return _hasHorizontalScroller; +} + +/*! + Specifies whether the scroll view can have a horizontal scroller. + @param hasHorizontalScroller \c YES lets the scroll view + allocate a horizontal scroller if necessary. +*/ +- (void)setHasHorizontalScroller:(BOOL)shouldHaveHorizontalScroller +{ + if (_hasHorizontalScroller === shouldHaveHorizontalScroller) + return; + + _hasHorizontalScroller = shouldHaveHorizontalScroller; + + if (_hasHorizontalScroller && !_horizontalScroller) + { + var bounds = [self _insetBounds]; + + [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, MAX(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1), [CPScroller scrollerWidthInStyle:_scrollerStyle])]]; + [[self horizontalScroller] setFrameSize:CGSizeMake(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle])]; + } + + [self reflectScrolledClipView:_contentView]; +} + +/*! + Return's the scroll view's vertical scroller +*/ +- (CPScroller)verticalScroller +{ + return _verticalScroller; +} + +/*! + Sets the scroll view's vertical scroller. + @param aScroller the vertical scroller +*/ +- (void)setVerticalScroller:(CPScroller)aScroller +{ + if (_verticalScroller === aScroller) + return; + + [_verticalScroller removeFromSuperview]; + [_verticalScroller setTarget:nil]; + [_verticalScroller setAction:nil]; + + _verticalScroller = aScroller; + + [_verticalScroller setTarget:self]; + [_verticalScroller setAction:@selector(_verticalScrollerDidScroll:)]; + + [self addSubview:_verticalScroller]; + + [self _updateScrollerStyle]; +} + +/*! + Returns \c YES if the scroll view can have a vertical scroller. +*/ +- (BOOL)hasVerticalScroller +{ + return _hasVerticalScroller; +} + +/*! + Specifies whether the scroll view has can have + a vertical scroller. It allocates it if necessary. + @param hasVerticalScroller \c YES allows + the scroll view to display a vertical scroller +*/ +- (void)setHasVerticalScroller:(BOOL)shouldHaveVerticalScroller +{ + if (_hasVerticalScroller === shouldHaveVerticalScroller) + return; + + _hasVerticalScroller = shouldHaveVerticalScroller; + + if (_hasVerticalScroller && !_verticalScroller) + { + var bounds = [self _insetBounds]; + + [self setVerticalScroller:[[CPScroller alloc] initWithFrame:_CGRectMake(0.0, 0.0, [CPScroller scrollerWidthInStyle:_scrollerStyle], MAX(_CGRectGetHeight(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1))]]; + [[self verticalScroller] setFrameSize:CGSizeMake([CPScroller scrollerWidthInStyle:_scrollerStyle], _CGRectGetHeight(bounds))]; + } + + [self reflectScrolledClipView:_contentView]; +} + +/*! + Returns \c YES if the scroll view hides its scroll + bars when not necessary. +*/ +- (BOOL)autohidesScrollers +{ + return _autohidesScrollers; +} + +/*! + Sets whether the scroll view hides its scroll bars when not needed. + @param autohidesScrollers \c YES causes the scroll bars + to be hidden when not needed. +*/ +- (void)setAutohidesScrollers:(BOOL)autohidesScrollers +{ + if (_autohidesScrollers == autohidesScrollers) + return; + + _autohidesScrollers = autohidesScrollers; + + [self reflectScrolledClipView:_contentView]; +} + +- (CPView)bottomCornerView +{ + return _bottomCornerView; +} + +- (void)setBottomCornerView:(CPView)aBottomCornerView +{ + if (_bottomCornerView === aBottomCornerView) + return; + + [_bottomCornerView removeFromSuperview]; + + [aBottomCornerView setFrame:[self _bottomCornerViewFrame]]; + [self addSubview:aBottomCornerView]; + + _bottomCornerView = aBottomCornerView; + + [self _updateCornerAndHeaderView]; +} + +/*! + Returns how much the document moves when scrolled +*/ +- (float)lineScroll +{ + return [self horizontalLineScroll]; +} + +/*! + Sets how much the document moves when scrolled. Sets the vertical and horizontal scroll. + @param aLineScroll the amount to move the document when scrolled +*/ +- (void)setLineScroll:(float)aLineScroll +{ + [self setHorizontalLineScroll:aLineScroll]; + [self setVerticalLineScroll:aLineScroll]; +} + +/*! + Returns how much the document moves horizontally when scrolled. +*/ +- (float)horizontalLineScroll +{ + return _horizontalLineScroll; +} + +/*! + Sets how much the document moves when scrolled horizontally. + @param aLineScroll the amount to move horizontally when scrolled. +*/ +- (void)setHorizontalLineScroll:(float)aLineScroll +{ + _horizontalLineScroll = aLineScroll; +} + +/*! + Returns how much the document moves vertically when scrolled. +*/ +- (float)verticalLineScroll +{ + return _verticalLineScroll; +} + +/*! + Sets how much the document moves when scrolled vertically. + @param aLineScroll the new amount to move vertically when scrolled. +*/ +- (void)setVerticalLineScroll:(float)aLineScroll +{ + _verticalLineScroll = aLineScroll; +} + +/*! + Returns the vertical and horizontal page scroll amount. +*/ +- (float)pageScroll +{ + return [self horizontalPageScroll]; +} + +/*! + Sets the horizontal and vertical page scroll amount. + @param aPageScroll the new horizontal and vertical page scroll amount +*/ +- (void)setPageScroll:(float)aPageScroll +{ + [self setHorizontalPageScroll:aPageScroll]; + [self setVerticalPageScroll:aPageScroll]; +} + +/*! + Returns the horizontal page scroll amount. +*/ +- (float)horizontalPageScroll +{ + return _horizontalPageScroll; +} + +/*! + Sets the horizontal page scroll amount. + @param aPageScroll the new horizontal page scroll amount +*/ +- (void)setHorizontalPageScroll:(float)aPageScroll +{ + _horizontalPageScroll = aPageScroll; +} + +/*! + Returns the vertical page scroll amount. +*/ +- (float)verticalPageScroll +{ + return _verticalPageScroll; +} + +/*! + Sets the vertical page scroll amount. + @param aPageScroll the new vertical page scroll amount +*/ +- (void)setVerticalPageScroll:(float)aPageScroll +{ + _verticalPageScroll = aPageScroll; +} + + +#pragma mark - +#pragma mark Utilities + +/* @ignore */ +- (void)_updateScrollerStyle +{ + if (_hasHorizontalScroller) + { + [_horizontalScroller setStyle:_scrollerStyle]; + [_horizontalScroller unsetThemeState:CPThemeStateSelected]; + } + if (_hasVerticalScroller) + { + [_verticalScroller setStyle:_scrollerStyle]; + [_verticalScroller unsetThemeState:CPThemeStateSelected]; + } + + [self reflectScrolledClipView:_contentView]; +} + +/* @ignore */ +- (CGRect)_insetBounds +{ + return [[self class] _insetBounds:[self bounds] borderType:_borderType]; +} + +/* @ignore */ +- (void)_updateCornerAndHeaderView +{ + var documentView = [self documentView], + currentHeaderView = [self _headerView], + documentHeaderView = [documentView respondsToSelector:@selector(headerView)] ? [documentView headerView] : nil; + + if (currentHeaderView !== documentHeaderView) + { + [currentHeaderView removeFromSuperview]; + [_headerClipView setDocumentView:documentHeaderView]; + } + + var documentCornerView = [documentView respondsToSelector:@selector(cornerView)] ? [documentView cornerView] : nil; + + if (_cornerView !== documentCornerView) + { + [_cornerView removeFromSuperview]; + + _cornerView = documentCornerView; + + if (_cornerView) + [self addSubview:_cornerView]; + } + + [self reflectScrolledClipView:_contentView]; +} + +/* @ignore */ +- (CPView)_headerView +{ + return [_headerClipView documentView]; +} + +/* @ignore */ +- (CGRect)_cornerViewFrame +{ + if (!_cornerView) + return _CGRectMakeZero(); + + var bounds = [self _insetBounds], + frame = [_cornerView frame]; + + frame.origin.x = _CGRectGetMaxX(bounds) - _CGRectGetWidth(frame); + frame.origin.y = _CGRectGetMinY(bounds); + + return frame; +} + +/* @ignore */ +- (CGRect)_headerClipViewFrame +{ + var headerView = [self _headerView]; + + if (!headerView) + return _CGRectMakeZero(); + + var frame = [self _insetBounds]; + + frame.size.height = _CGRectGetHeight([headerView frame]); + frame.size.width -= _CGRectGetWidth([self _cornerViewFrame]); + + return frame; +} + +/* @ignore */ +- (CGRect)_bottomCornerViewFrame +{ + if ([[self horizontalScroller] isHidden] || [[self verticalScroller] isHidden]) + return CGRectMakeZero(); + + var verticalFrame = [[self verticalScroller] frame], + bottomCornerFrame = CGRectMakeZero(); + + bottomCornerFrame.origin.x = CGRectGetMinX(verticalFrame); + bottomCornerFrame.origin.y = CGRectGetMaxY(verticalFrame); + bottomCornerFrame.size.width = [CPScroller scrollerWidthInStyle:_scrollerStyle]; + bottomCornerFrame.size.height = [CPScroller scrollerWidthInStyle:_scrollerStyle]; + + return bottomCornerFrame; +} + +/* @ignore */ +- (void)_verticalScrollerDidScroll:(CPScroller)aScroller +{ + var value = [aScroller floatValue], + documentFrame = [[_contentView documentView] frame], + contentBounds = [_contentView bounds]; + + switch ([_verticalScroller hitPart]) + { + case CPScrollerDecrementLine: contentBounds.origin.y -= _verticalLineScroll; + break; + + case CPScrollerIncrementLine: contentBounds.origin.y += _verticalLineScroll; + break; + + case CPScrollerDecrementPage: contentBounds.origin.y -= _CGRectGetHeight(contentBounds) - _verticalPageScroll; + break; + + case CPScrollerIncrementPage: contentBounds.origin.y += _CGRectGetHeight(contentBounds) - _verticalPageScroll; + break; + + case CPScrollerKnobSlot: + case CPScrollerKnob: + // We want integral bounds! + default: contentBounds.origin.y = ROUND(value * (_CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentBounds))); + } + + [self _sendDelegateMessages]; + + [_contentView scrollToPoint:contentBounds.origin]; +} + +/* @ignore */ +- (void)_horizontalScrollerDidScroll:(CPScroller)aScroller +{ + var value = [aScroller floatValue], + documentFrame = [[self documentView] frame], + contentBounds = [_contentView bounds]; + + switch ([_horizontalScroller hitPart]) + { + case CPScrollerDecrementLine: contentBounds.origin.x -= _horizontalLineScroll; + break; + + case CPScrollerIncrementLine: contentBounds.origin.x += _horizontalLineScroll; + break; + + case CPScrollerDecrementPage: contentBounds.origin.x -= _CGRectGetWidth(contentBounds) - _horizontalPageScroll; + break; + + case CPScrollerIncrementPage: contentBounds.origin.x += _CGRectGetWidth(contentBounds) - _horizontalPageScroll; + break; + + case CPScrollerKnobSlot: + case CPScrollerKnob: + // We want integral bounds! + default: contentBounds.origin.x = ROUND(value * (_CGRectGetWidth(documentFrame) - _CGRectGetWidth(contentBounds))); + } + + [self _sendDelegateMessages]; + + [_contentView scrollToPoint:contentBounds.origin]; + [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin.x, 0.0)]; +} + +/* @ignore */ +- (void)_sendDelegateMessages +{ + if (_implementedDelegateMethods == 0) + return; + + if (!_scrollTimer) + { + [self _scrollViewWillScroll]; + _scrollTimer = [CPTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(_scrollViewDidScroll) userInfo:nil repeats:YES]; + } + else + [_scrollTimer setFireDate:[CPDate dateWithTimeIntervalSinceNow:TIMER_INTERVAL]]; +} + +/* @ignore */ +- (void)_hideScrollers:(CPTimer)theTimer +{ + if ([_verticalScroller allowFadingOut]) + [_verticalScroller fadeOut]; + if ([_horizontalScroller allowFadingOut]) + [_horizontalScroller fadeOut]; + _timerScrollersHide = nil; +} + +/* @ignore */ +- (void)_respondToScrollWheelEventWithDeltaX:(float)deltaX deltaY:(float)deltaY +{ + var documentFrame = [[self documentView] frame], + contentBounds = [_contentView bounds], + contentFrame = [_contentView frame], + enclosingScrollView = [self enclosingScrollView]; + + // We want integral bounds! + contentBounds.origin.x = ROUND(contentBounds.origin.x + deltaX); + contentBounds.origin.y = ROUND(contentBounds.origin.y + deltaY); + + var constrainedOrigin = [_contentView constrainScrollPoint:CGPointCreateCopy(contentBounds.origin)], + extraX = contentBounds.origin.x - constrainedOrigin.x, + extraY = contentBounds.origin.y - constrainedOrigin.y; + + [self _sendDelegateMessages]; + + [_contentView scrollToPoint:constrainedOrigin]; + [_headerClipView scrollToPoint:CGPointMake(constrainedOrigin.x, 0.0)]; + + if (extraX || extraY) + [enclosingScrollView _respondToScrollWheelEventWithDeltaX:extraX deltaY:extraY]; +} + +/* @ignore */ +- (void)_scrollViewWillScroll +{ + if (_implementedDelegateMethods & CPScrollViewDelegate_scrollViewWillScroll_) + [_delegate scrollViewWillScroll:self]; +} + +/* @ignore */ +- (void)_scrollViewDidScroll +{ + [_scrollTimer invalidate]; + _scrollTimer = nil; + + if (_implementedDelegateMethods & CPScrollViewDelegate_scrollViewDidScroll_) + [_delegate scrollViewDidScroll:self]; +} + +/*! + Lays out the scroll view's components. +*/ +- (void)tile +{ + // yuck. + // RESIZE: tile->setHidden AND refl + // Outside Change: refl->tile->setHidden AND refl + // scroll: refl. +} + /*! Resizes the scroll view to contain the specified clip view. @param aClipView the clip view to resize to @@ -415,8 +973,6 @@ var TIMER_INTERVAL = 0.2, [_horizontalScroller setKnobProportion:1.0]; } - console.log(contentFrame) - debugger; [_contentView setFrame:contentFrame]; [_headerClipView setFrame:headerClipViewFrame]; [[_headerClipView documentView] setNeedsDisplay:YES]; @@ -446,359 +1002,6 @@ var TIMER_INTERVAL = 0.2, _timerScrollersHide = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_hideScrollers:) userInfo:nil repeats:NO]; } -// Managing Graphics Attributes - -/*! - Sets the type of border to be drawn around the view. - Valid types are: -
-    CPNoBorder
-    CPLineBorder
-    CPBezelBorder
-    CPGrooveBorder
-*/ -- (void)setBorderType:(CPBorderType)borderType -{ - if (_borderType == borderType) - return; - - _borderType = borderType; - - [self reflectScrolledClipView:_contentView]; - [self setNeedsDisplay:YES]; -} - -/*! - Returns the border type drawn around the view. -*/ -- (CPBorderType)borderType -{ - return _borderType; -} - -// Managing Scrollers -/*! - Sets the scroll view's horizontal scroller. - @param aScroller the horizontal scroller for the scroll view -*/ -- (void)setHorizontalScroller:(CPScroller)aScroller -{ - if (_horizontalScroller === aScroller) - return; - - [_horizontalScroller removeFromSuperview]; - [_horizontalScroller setTarget:nil]; - [_horizontalScroller setAction:nil]; - - _horizontalScroller = aScroller; - - [_horizontalScroller setTarget:self]; - [_horizontalScroller setAction:@selector(_horizontalScrollerDidScroll:)]; - - [self addSubview:_horizontalScroller]; - - [self _updateScrollerStyle]; -} - -/*! - Returns the scroll view's horizontal scroller -*/ -- (CPScroller)horizontalScroller -{ - return _horizontalScroller; -} - -/*! - Specifies whether the scroll view can have a horizontal scroller. - @param hasHorizontalScroller \c YES lets the scroll view - allocate a horizontal scroller if necessary. -*/ -- (void)setHasHorizontalScroller:(BOOL)shouldHaveHorizontalScroller -{ - if (_hasHorizontalScroller === shouldHaveHorizontalScroller) - return; - - _hasHorizontalScroller = shouldHaveHorizontalScroller; - - if (_hasHorizontalScroller && !_horizontalScroller) - { - var bounds = [self _insetBounds]; - - [self setHorizontalScroller:[[CPScroller alloc] initWithFrame:CGRectMake(0.0, 0.0, MAX(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1), [CPScroller scrollerWidthInStyle:_scrollerStyle])]]; - [[self horizontalScroller] setFrameSize:CGSizeMake(_CGRectGetWidth(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle])]; - } - - [self reflectScrolledClipView:_contentView]; -} - -/*! - Returns \c YES if the scroll view can have a horizontal scroller. -*/ -- (BOOL)hasHorizontalScroller -{ - return _hasHorizontalScroller; -} - -/*! - Sets the scroll view's vertical scroller. - @param aScroller the vertical scroller -*/ -- (void)setVerticalScroller:(CPScroller)aScroller -{ - if (_verticalScroller === aScroller) - return; - - [_verticalScroller removeFromSuperview]; - [_verticalScroller setTarget:nil]; - [_verticalScroller setAction:nil]; - - _verticalScroller = aScroller; - - [_verticalScroller setTarget:self]; - [_verticalScroller setAction:@selector(_verticalScrollerDidScroll:)]; - - [self addSubview:_verticalScroller]; - - [self _updateScrollerStyle]; -} - -/*! - Return's the scroll view's vertical scroller -*/ -- (CPScroller)verticalScroller -{ - return _verticalScroller; -} - -/*! - Specifies whether the scroll view has can have - a vertical scroller. It allocates it if necessary. - @param hasVerticalScroller \c YES allows - the scroll view to display a vertical scroller -*/ -- (void)setHasVerticalScroller:(BOOL)shouldHaveVerticalScroller -{ - if (_hasVerticalScroller === shouldHaveVerticalScroller) - return; - - _hasVerticalScroller = shouldHaveVerticalScroller; - - if (_hasVerticalScroller && !_verticalScroller) - { - var bounds = [self _insetBounds]; - - [self setVerticalScroller:[[CPScroller alloc] initWithFrame:_CGRectMake(0.0, 0.0, [CPScroller scrollerWidthInStyle:_scrollerStyle], MAX(_CGRectGetHeight(bounds), [CPScroller scrollerWidthInStyle:_scrollerStyle] + 1))]]; - [[self verticalScroller] setFrameSize:CGSizeMake([CPScroller scrollerWidthInStyle:_scrollerStyle], _CGRectGetHeight(bounds))]; - } - - [self reflectScrolledClipView:_contentView]; -} - -/*! - Returns \c YES if the scroll view can have a vertical scroller. -*/ -- (BOOL)hasVerticalScroller -{ - return _hasVerticalScroller; -} - -/*! - Sets whether the scroll view hides its scroll bars when not needed. - @param autohidesScrollers \c YES causes the scroll bars - to be hidden when not needed. -*/ -- (void)setAutohidesScrollers:(BOOL)autohidesScrollers -{ - if (_autohidesScrollers == autohidesScrollers) - return; - - _autohidesScrollers = autohidesScrollers; - - [self reflectScrolledClipView:_contentView]; -} - -/*! - Returns \c YES if the scroll view hides its scroll - bars when not necessary. -*/ -- (BOOL)autohidesScrollers -{ - return _autohidesScrollers; -} - -- (void)_updateCornerAndHeaderView -{ - var documentView = [self documentView], - currentHeaderView = [self _headerView], - documentHeaderView = [documentView respondsToSelector:@selector(headerView)] ? [documentView headerView] : nil; - - if (currentHeaderView !== documentHeaderView) - { - [currentHeaderView removeFromSuperview]; - [_headerClipView setDocumentView:documentHeaderView]; - } - - var documentCornerView = [documentView respondsToSelector:@selector(cornerView)] ? [documentView cornerView] : nil; - - if (_cornerView !== documentCornerView) - { - [_cornerView removeFromSuperview]; - - _cornerView = documentCornerView; - - if (_cornerView) - [self addSubview:_cornerView]; - } - - [self reflectScrolledClipView:_contentView]; -} - -- (CPView)_headerView -{ - return [_headerClipView documentView]; -} - -- (CGRect)_cornerViewFrame -{ - if (!_cornerView) - return _CGRectMakeZero(); - - var bounds = [self _insetBounds], - frame = [_cornerView frame]; - - frame.origin.x = _CGRectGetMaxX(bounds) - _CGRectGetWidth(frame); - frame.origin.y = _CGRectGetMinY(bounds); - - return frame; -} - -- (CGRect)_headerClipViewFrame -{ - var headerView = [self _headerView]; - - if (!headerView) - return _CGRectMakeZero(); - - var frame = [self _insetBounds]; - - frame.size.height = _CGRectGetHeight([headerView frame]); - frame.size.width -= _CGRectGetWidth([self _cornerViewFrame]); - - return frame; -} - -- (CGRect)_bottomCornerViewFrame -{ - if ([[self horizontalScroller] isHidden] || [[self verticalScroller] isHidden]) - return CGRectMakeZero(); - - var verticalFrame = [[self verticalScroller] frame], - bottomCornerFrame = CGRectMakeZero(); - - bottomCornerFrame.origin.x = CGRectGetMinX(verticalFrame); - bottomCornerFrame.origin.y = CGRectGetMaxY(verticalFrame); - bottomCornerFrame.size.width = [CPScroller scrollerWidthInStyle:_scrollerStyle]; - bottomCornerFrame.size.height = [CPScroller scrollerWidthInStyle:_scrollerStyle]; - - return bottomCornerFrame; -} - -- (void)setBottomCornerView:(CPView)aBottomCornerView -{ - if (_bottomCornerView === aBottomCornerView) - return; - - [_bottomCornerView removeFromSuperview]; - - [aBottomCornerView setFrame:[self _bottomCornerViewFrame]]; - [self addSubview:aBottomCornerView]; - - _bottomCornerView = aBottomCornerView; - - [self _updateCornerAndHeaderView]; -} - -- (CPView)bottomCornerView -{ - return _bottomCornerView; -} - -/* @ignore */ -- (void)_verticalScrollerDidScroll:(CPScroller)aScroller -{ - var value = [aScroller floatValue], - documentFrame = [[_contentView documentView] frame], - contentBounds = [_contentView bounds]; - - switch ([_verticalScroller hitPart]) - { - case CPScrollerDecrementLine: contentBounds.origin.y -= _verticalLineScroll; - break; - - case CPScrollerIncrementLine: contentBounds.origin.y += _verticalLineScroll; - break; - - case CPScrollerDecrementPage: contentBounds.origin.y -= _CGRectGetHeight(contentBounds) - _verticalPageScroll; - break; - - case CPScrollerIncrementPage: contentBounds.origin.y += _CGRectGetHeight(contentBounds) - _verticalPageScroll; - break; - - case CPScrollerKnobSlot: - case CPScrollerKnob: - // We want integral bounds! - default: contentBounds.origin.y = ROUND(value * (_CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentBounds))); - } - - [self _sendDelegateMessages]; - - [_contentView scrollToPoint:contentBounds.origin]; -} - -/* @ignore */ -- (void)_horizontalScrollerDidScroll:(CPScroller)aScroller -{ - var value = [aScroller floatValue], - documentFrame = [[self documentView] frame], - contentBounds = [_contentView bounds]; - - switch ([_horizontalScroller hitPart]) - { - case CPScrollerDecrementLine: contentBounds.origin.x -= _horizontalLineScroll; - break; - - case CPScrollerIncrementLine: contentBounds.origin.x += _horizontalLineScroll; - break; - - case CPScrollerDecrementPage: contentBounds.origin.x -= _CGRectGetWidth(contentBounds) - _horizontalPageScroll; - break; - - case CPScrollerIncrementPage: contentBounds.origin.x += _CGRectGetWidth(contentBounds) - _horizontalPageScroll; - break; - - case CPScrollerKnobSlot: - case CPScrollerKnob: - // We want integral bounds! - default: contentBounds.origin.x = ROUND(value * (_CGRectGetWidth(documentFrame) - _CGRectGetWidth(contentBounds))); - } - - [self _sendDelegateMessages]; - - [_contentView scrollToPoint:contentBounds.origin]; - [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin.x, 0.0)]; -} - -/*! - Lays out the scroll view's components. -*/ -- (void)tile -{ - // yuck. - // RESIZE: tile->setHidden AND refl - // Outside Change: refl->tile->setHidden AND refl - // scroll: refl. -} - /* @ignore */ @@ -807,112 +1010,9 @@ var TIMER_INTERVAL = 0.2, [self reflectScrolledClipView:_contentView]; } -// Setting Scrolling Behavior -/*! - Sets how much the document moves when scrolled. Sets the vertical and horizontal scroll. - @param aLineScroll the amount to move the document when scrolled -*/ -- (void)setLineScroll:(float)aLineScroll -{ - [self setHorizontalLineScroll:aLineScroll]; - [self setVerticalLineScroll:aLineScroll]; -} -/*! - Returns how much the document moves when scrolled -*/ -- (float)lineScroll -{ - return [self horizontalLineScroll]; -} - -/*! - Sets how much the document moves when scrolled horizontally. - @param aLineScroll the amount to move horizontally when scrolled. -*/ -- (void)setHorizontalLineScroll:(float)aLineScroll -{ - _horizontalLineScroll = aLineScroll; -} - -/*! - Returns how much the document moves horizontally when scrolled. -*/ -- (float)horizontalLineScroll -{ - return _horizontalLineScroll; -} - -/*! - Sets how much the document moves when scrolled vertically. - @param aLineScroll the new amount to move vertically when scrolled. -*/ -- (void)setVerticalLineScroll:(float)aLineScroll -{ - _verticalLineScroll = aLineScroll; -} - -/*! - Returns how much the document moves vertically when scrolled. -*/ -- (float)verticalLineScroll -{ - return _verticalLineScroll; -} - -/*! - Sets the horizontal and vertical page scroll amount. - @param aPageScroll the new horizontal and vertical page scroll amount -*/ -- (void)setPageScroll:(float)aPageScroll -{ - [self setHorizontalPageScroll:aPageScroll]; - [self setVerticalPageScroll:aPageScroll]; -} - -/*! - Returns the vertical and horizontal page scroll amount. -*/ -- (float)pageScroll -{ - return [self horizontalPageScroll]; -} - -/*! - Sets the horizontal page scroll amount. - @param aPageScroll the new horizontal page scroll amount -*/ -- (void)setHorizontalPageScroll:(float)aPageScroll -{ - _horizontalPageScroll = aPageScroll; -} - -/*! - Returns the horizontal page scroll amount. -*/ -- (float)horizontalPageScroll -{ - return _horizontalPageScroll; -} - -/*! - Sets the vertical page scroll amount. - @param aPageScroll the new vertical page scroll amount -*/ -- (void)setVerticalPageScroll:(float)aPageScroll -{ - _verticalPageScroll = aPageScroll; -} - -/*! - Returns the vertical page scroll amount. -*/ -- (float)verticalPageScroll -{ - return _verticalPageScroll; -} - -// CPView Overrides +#pragma mark - +#pragma mark Overrides - (void)drawRect:(CPRect)aRect { @@ -1034,9 +1134,6 @@ var TIMER_INTERVAL = 0.2, CGContextStrokePath(context); } - -// CPResponder Overrides - /*! Handles a scroll wheel event from the user. @param anEvent the scroll wheel event @@ -1055,39 +1152,6 @@ var TIMER_INTERVAL = 0.2, [self _respondToScrollWheelEventWithDeltaX:[anEvent deltaX] deltaY:[anEvent deltaY]]; } -- (void)_hideScrollers:(CPTimer)theTimer -{ - if ([_verticalScroller allowFadingOut]) - [_verticalScroller fadeOut]; - if ([_horizontalScroller allowFadingOut]) - [_horizontalScroller fadeOut]; - _timerScrollersHide = nil; -} - -- (void)_respondToScrollWheelEventWithDeltaX:(float)deltaX deltaY:(float)deltaY -{ - var documentFrame = [[self documentView] frame], - contentBounds = [_contentView bounds], - contentFrame = [_contentView frame], - enclosingScrollView = [self enclosingScrollView]; - - // We want integral bounds! - contentBounds.origin.x = ROUND(contentBounds.origin.x + deltaX); - contentBounds.origin.y = ROUND(contentBounds.origin.y + deltaY); - - var constrainedOrigin = [_contentView constrainScrollPoint:CGPointCreateCopy(contentBounds.origin)], - extraX = contentBounds.origin.x - constrainedOrigin.x, - extraY = contentBounds.origin.y - constrainedOrigin.y; - - [self _sendDelegateMessages]; - - [_contentView scrollToPoint:constrainedOrigin]; - [_headerClipView scrollToPoint:CGPointMake(constrainedOrigin.x, 0.0)]; - - if (extraX || extraY) - [enclosingScrollView _respondToScrollWheelEventWithDeltaX:extraX deltaY:extraY]; -} - - (void)scrollPageUp:(id)sender { var contentBounds = [_contentView bounds]; @@ -1148,37 +1212,9 @@ var TIMER_INTERVAL = 0.2, [_headerClipView scrollToPoint:CGPointMake(contentBounds.origin.x, 0)]; } -- (void)_sendDelegateMessages -{ - if (_implementedDelegateMethods == 0) - return; - - if (!_scrollTimer) - { - [self _scrollViewWillScroll]; - _scrollTimer = [CPTimer scheduledTimerWithTimeInterval:TIMER_INTERVAL target:self selector:@selector(_scrollViewDidScroll) userInfo:nil repeats:YES]; - } - else - [_scrollTimer setFireDate:[CPDate dateWithTimeIntervalSinceNow:TIMER_INTERVAL]]; -} - -- (void)_scrollViewWillScroll -{ - if (_implementedDelegateMethods & CPScrollViewDelegate_scrollViewWillScroll_) - [_delegate scrollViewWillScroll:self]; -} - -- (void)_scrollViewDidScroll -{ - [_scrollTimer invalidate]; - _scrollTimer = nil; - - if (_implementedDelegateMethods & CPScrollViewDelegate_scrollViewDidScroll_) - [_delegate scrollViewDidScroll:self]; -} - @end + var CPScrollViewContentViewKey = @"CPScrollViewContentView", CPScrollViewHeaderClipViewKey = @"CPScrollViewHeaderClipViewKey", CPScrollViewVLineScrollKey = @"CPScrollViewVLineScroll", From efdfd0db1025cfc6d2d0b99f4ead93cd0e0d74eb Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 4 Oct 2011 16:21:24 +0200 Subject: [PATCH 06/22] fix some bugs and update arts --- AppKit/CPScrollView.j | 75 ++++--- AppKit/CPScroller.j | 199 +++++++++++------- .../scroller-horizontal-knob-center.png | Bin 997 -> 115 bytes .../scroller-horizontal-knob-left.png | Bin 1028 -> 146 bytes .../scroller-horizontal-knob-right.png | Bin 1028 -> 146 bytes .../scroller-horizontal-track-center.png | Bin 148 -> 139 bytes .../scroller-horizontal-track-left.png | Bin 176 -> 169 bytes .../scroller-horizontal-track-right.png | Bin 175 -> 171 bytes ...scroller-legacy-horizontal-knob-center.png | Bin 1297 -> 123 bytes .../scroller-legacy-horizontal-knob-left.png | Bin 1347 -> 158 bytes .../scroller-legacy-horizontal-knob-right.png | Bin 1332 -> 157 bytes ...croller-legacy-horizontal-track-center.png | Bin 1323 -> 145 bytes .../scroller-legacy-horizontal-track-left.png | Bin 1530 -> 285 bytes ...scroller-legacy-horizontal-track-right.png | Bin 1531 -> 301 bytes .../scroller-legacy-vertical-knob-bottom.png | Bin 1338 -> 157 bytes .../scroller-legacy-vertical-knob-center.png | Bin 1296 -> 123 bytes .../scroller-legacy-vertical-knob-top.png | Bin 1336 -> 157 bytes .../scroller-legacy-vertical-track-bottom.png | Bin 1552 -> 310 bytes .../scroller-legacy-vertical-track-center.png | Bin 1320 -> 139 bytes .../scroller-legacy-vertical-track-top.png | Bin 1536 -> 302 bytes .../scroller-vertical-knob-bottom.png | Bin 1024 -> 142 bytes .../scroller-vertical-knob-center.png | Bin 994 -> 112 bytes ...scroller-vertical-knob-disabled-bottom.png | Bin 421 -> 0 bytes ...scroller-vertical-knob-disabled-center.png | Bin 143 -> 0 bytes .../scroller-vertical-knob-disabled-top.png | Bin 424 -> 0 bytes .../Resources/scroller-vertical-knob-top.png | Bin 1023 -> 141 bytes .../scroller-vertical-track-bottom.png | Bin 173 -> 172 bytes .../scroller-vertical-track-center.png | Bin 144 -> 133 bytes .../Resources/scroller-vertical-track-top.png | Bin 177 -> 171 bytes 29 files changed, 169 insertions(+), 105 deletions(-) delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-bottom.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-center.png delete mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-top.png diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 06d45eca3..57fb8a23b 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -605,7 +605,7 @@ var TIMER_INTERVAL = 0.2, #pragma mark - -#pragma mark Utilities +#pragma mark Privates /* @ignore */ - (void)_updateScrollerStyle @@ -621,6 +621,13 @@ var TIMER_INTERVAL = 0.2, [_verticalScroller unsetThemeState:CPThemeStateSelected]; } + if (_scrollerStyle == CPScrollerStyleOverlay) + { + if (_timerScrollersHide) + [_timerScrollersHide invalidate]; + _timerScrollersHide = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_hideScrollers:) userInfo:nil repeats:NO]; + } + [self reflectScrolledClipView:_contentView]; } @@ -719,24 +726,30 @@ var TIMER_INTERVAL = 0.2, documentFrame = [[_contentView documentView] frame], contentBounds = [_contentView bounds]; + switch ([_verticalScroller hitPart]) { - case CPScrollerDecrementLine: contentBounds.origin.y -= _verticalLineScroll; - break; + case CPScrollerDecrementLine: + contentBounds.origin.y -= _verticalLineScroll; + break; - case CPScrollerIncrementLine: contentBounds.origin.y += _verticalLineScroll; - break; + case CPScrollerIncrementLine: + contentBounds.origin.y += _verticalLineScroll; + break; - case CPScrollerDecrementPage: contentBounds.origin.y -= _CGRectGetHeight(contentBounds) - _verticalPageScroll; - break; + case CPScrollerDecrementPage: + contentBounds.origin.y -= _CGRectGetHeight(contentBounds) - _verticalPageScroll; + break; - case CPScrollerIncrementPage: contentBounds.origin.y += _CGRectGetHeight(contentBounds) - _verticalPageScroll; - break; + case CPScrollerIncrementPage: + contentBounds.origin.y += _CGRectGetHeight(contentBounds) - _verticalPageScroll; + break; + // We want integral bounds! case CPScrollerKnobSlot: case CPScrollerKnob: - // We want integral bounds! - default: contentBounds.origin.y = ROUND(value * (_CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentBounds))); + default: + contentBounds.origin.y = ROUND(value * (_CGRectGetHeight(documentFrame) - _CGRectGetHeight(contentBounds))); } [self _sendDelegateMessages]; @@ -753,22 +766,27 @@ var TIMER_INTERVAL = 0.2, switch ([_horizontalScroller hitPart]) { - case CPScrollerDecrementLine: contentBounds.origin.x -= _horizontalLineScroll; - break; + case CPScrollerDecrementLine: + contentBounds.origin.x -= _horizontalLineScroll; + break; - case CPScrollerIncrementLine: contentBounds.origin.x += _horizontalLineScroll; - break; + case CPScrollerIncrementLine: + contentBounds.origin.x += _horizontalLineScroll; + break; - case CPScrollerDecrementPage: contentBounds.origin.x -= _CGRectGetWidth(contentBounds) - _horizontalPageScroll; - break; + case CPScrollerDecrementPage: + contentBounds.origin.x -= _CGRectGetWidth(contentBounds) - _horizontalPageScroll; + break; - case CPScrollerIncrementPage: contentBounds.origin.x += _CGRectGetWidth(contentBounds) - _horizontalPageScroll; - break; + case CPScrollerIncrementPage: + contentBounds.origin.x += _CGRectGetWidth(contentBounds) - _horizontalPageScroll; + break; + // We want integral bounds! case CPScrollerKnobSlot: case CPScrollerKnob: - // We want integral bounds! - default: contentBounds.origin.x = ROUND(value * (_CGRectGetWidth(documentFrame) - _CGRectGetWidth(contentBounds))); + default: + contentBounds.origin.x = ROUND(value * (_CGRectGetWidth(documentFrame) - _CGRectGetWidth(contentBounds))); } [self _sendDelegateMessages]; @@ -844,6 +862,10 @@ var TIMER_INTERVAL = 0.2, [_delegate scrollViewDidScroll:self]; } + +#pragma mark - +#pragma mark Utilities + /*! Lays out the scroll view's components. */ @@ -925,7 +947,7 @@ var TIMER_INTERVAL = 0.2, [_horizontalScroller setHidden:!shouldShowHorizontalScroller]; [_horizontalScroller setEnabled:hasHorizontalScroll]; - var overlay = 0; + var overlay = [CPScroller scrollerOverlay]; if (_scrollerStyle === CPScrollerStyleLegacy) { // We can thus appropriately account for them changing the content size. @@ -934,10 +956,7 @@ var TIMER_INTERVAL = 0.2, if (shouldShowHorizontalScroller) contentFrame.size.height -= horizontalScrollerHeight; - } - else - { - overlay = [CPScroller scrollerOffset]; + overlay = 0; } var scrollPoint = [_contentView bounds].origin, @@ -1002,9 +1021,7 @@ var TIMER_INTERVAL = 0.2, _timerScrollersHide = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_hideScrollers:) userInfo:nil repeats:NO]; } -/* - @ignore -*/ +/* @ignore */ - (void)resizeSubviewsWithOldSize:(CGSize)aSize { [self reflectScrolledClipView:_contentView]; diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index eb114121b..797883c56 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -83,6 +83,10 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); int _style; } + +#pragma mark - +#pragma mark Class methods + + (CPString)defaultThemeClass { return "scroller"; @@ -105,8 +109,44 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); }] } ++ (float)scrollerWidth +{ + return [CPScroller scrollerWidthInStyle:CPScrollerStyleLegacy]; +} -// Calculating Layout +/*! + Returns the CPScroller's width for a CPRegularControlSize. +*/ ++ (float)scrollerWidthInStyle:(int)aStyle +{ + var scroller = [[CPScroller alloc] init]; + + if (aStyle == CPScrollerStyleLegacy) + return [scroller valueForThemeAttribute:@"scroller-width" inState:CPThemeStateScrollViewLegacy]; + return [scroller currentValueForThemeAttribute:@"scroller-width"]; +} + +/*! + Returns the CPScroller's overlay value. +*/ ++ (float)scrollerOverlay +{ + return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"track-border-overlay"]; +} + +/*! + Returns the width of a CPScroller for the specified CPControlSize. + @param aControlSize the size of a controller to return the width for +*/ ++ (float)scrollerWidthForControlSize:(CPControlSize)aControlSize +{ + // ?? a class method using self? + return nil//[self scrollerWidth]; +} + + +#pragma mark - +#pragma mark Initialization - (id)initWithFrame:(CGRect)aFrame { @@ -136,20 +176,22 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); return self; } -- (void)_adjustScrollerSize + +#pragma mark - +#pragma mark Getters / Setters + +/*! + Returns the scroller's style +*/ +- (void)style { - var frame = [self frame], - scrollerWidth = [self currentValueForThemeAttribute:@"scroller-width"]; - - if ([self isVertical] && CGRectGetWidth(frame) !== scrollerWidth) - frame.size.width = scrollerWidth; - - if (![self isVertical] && CGRectGetHeight(frame) !== scrollerWidth) - frame.size.height = scrollerWidth; - - [self setFrame:frame]; + return _style } +/*! + Set the scroller's control size + @param aStyle the scroller style: CPScrollerStyleLegacy or CPScrollerStyleOverlay +*/ - (void)setStyle:(id)aStyle { if (_style != nil && _style === aStyle) @@ -171,41 +213,17 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); [self _adjustScrollerSize]; } -// Determining CPScroller Size - -+ (float)scrollerWidth +- (void)setObjectValue:(id)aValue { - return [CPScroller scrollerWidthInStyle:CPScrollerStyleLegacy]; + [super setObjectValue:MIN(1.0, MAX(0.0, +aValue))]; } /*! - Returns the CPScroller's width for a CPRegularControlSize. + Returns the scroller's control size */ -+ (float)scrollerWidthInStyle:(int)aStyle +- (CPControlSize)controlSize { - var scroller = [[CPScroller alloc] init]; - - if (aStyle == CPScrollerStyleLegacy) - return [scroller valueForThemeAttribute:@"scroller-width" inState:CPThemeStateScrollViewLegacy]; - return [scroller currentValueForThemeAttribute:@"scroller-width"]; -} - -/*! - Returns the CPScroller's offset. -*/ -+ (float)scrollerOffset -{ - return [[[CPScroller alloc] init] currentValueForThemeAttribute:@"track-border-overlay"]; -} - -/*! - Returns the width of a CPScroller for the specified CPControlSize. - @param aControlSize the size of a controller to return the width for -*/ -+ (float)scrollerWidthForControlSize:(CPControlSize)aControlSize -{ - // ?? a class method using self? - return nil//[self scrollerWidth]; + return _controlSize; } /*! @@ -224,18 +242,17 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); } /*! - Returns the scroller's control size + Return's the knob's proportion */ -- (CPControlSize)controlSize +- (float)knobProportion { - return _controlSize; -} - -- (void)setObjectValue:(id)aValue -{ - [super setObjectValue:MIN(1.0, MAX(0.0, +aValue))]; + return _knobProportion; } +/*! + Set the knob's proportion + @param aProportion the desired proportion +*/ - (void)setKnobProportion:(float)aProportion { _knobProportion = MIN(1.0, MAX(0.0001, aProportion)); @@ -244,25 +261,28 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); [self setNeedsLayout]; } -/*! - Return's the knob's proportion -*/ -- (float)knobProportion + +#pragma mark - +#pragma mark Privates + +/*! @ignore */ +- (void)_adjustScrollerSize { - return _knobProportion; + var frame = [self frame], + scrollerWidth = [self currentValueForThemeAttribute:@"scroller-width"]; + + if ([self isVertical] && CGRectGetWidth(frame) !== scrollerWidth) + frame.size.width = scrollerWidth; + + if (![self isVertical] && CGRectGetHeight(frame) !== scrollerWidth) + frame.size.height = scrollerWidth; + + [self setFrame:frame]; } -- (id)currentValueForThemeAttribute:(CPString)anAttributeName -{ - var themeState = _themeState; - if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) - themeState &= ~CPThemeStateHighlighted; - - return [self valueForThemeAttribute:anAttributeName inState:themeState]; -} - -// Calculating Layout +#pragma mark - +#pragma mark Utilities - (CGRect)rectForPart:(CPScrollerPart)aPart { @@ -406,7 +426,29 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); return _usableParts; } -// Drawing the Parts +/*! + Display the scroller +*/ +- (void)fadeIn +{ + [self setAlphaValue:1.0]; +} + +/*! + Start the fade out anination +*/ +- (void)fadeOut +{ + if ([self hasThemeState:CPThemeStateScrollViewLegacy]) + return; + + [_animationScroller startAnimation]; +} + + +#pragma mark - +#pragma mark Drawing + /*! Draws the specified arrow and sets the highlight. @param anArrow the arrow to draw @@ -641,6 +683,20 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); [self setNeedsLayout]; } + +#pragma mark - +#pragma mark Overrides + +- (id)currentValueForThemeAttribute:(CPString)anAttributeName +{ + var themeState = _themeState; + + if (NAMES_FOR_PARTS[_hitPart] + "-color" !== anAttributeName) + themeState &= ~CPThemeStateHighlighted; + + return [self valueForThemeAttribute:anAttributeName inState:themeState]; +} + - (void)mouseDown:(CPEvent)anEvent { if (![self isEnabled]) @@ -672,18 +728,9 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); [self fadeOut]; } -- (void)fadeIn -{ - [self setAlphaValue:1.0]; -} -- (void)fadeOut -{ - if ([self hasThemeState:CPThemeStateScrollViewLegacy]) - return; - - [_animationScroller startAnimation]; -} +#pragma mark - +#pragma mark Delegates - (void)animationDidEnd:(CPAnimation)animation { diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png index 025c57615d32e9752eeff53c8dfa0f3c4611e0ff..de67709ae1b0a5a608faac91ce6fce77b1b82263 100644 GIT binary patch delta 9 QcmaFLUOd5L@-Aj=02Jl}vj6}9 literal 997 zcmbVL%Wl&^6g5=hQPBlREU1Juau;lfJ>w*HZPipxY&VhW5~Y!dSY={Q8Y{8Kj3>nH z3bBJV-@y;CV4Yv!C*Ttpr*QzO>HPMgI2e9*&w`{g=QolzXC^vB?uD2 zF({IGnp=e}uX!!8FRxV@tWEgLmam-}20hTGjDV&BYa!Gj(2;`b4Z|>A0u3UlLQO?l z4H;HlvmgYUM;2-wT-4J1 zpki=I90A|Wa7y0$F-C{Y|)5FJ8o_&teyMia2kuNB{* z4;%l+-O^3dX==XSf@a6hFqJ(dZYs`{dE#!w=GqwA+#1qSazr4qn$gbHBDmAAbYv5LZ7*1QUrBDyO>1jyu)=g%z*`x_gYj(4-3#OLsqU+6UGP@hvWYWphO?wa# z5xk2C{s9H?t{yz}qM(1ktKe075^qkno2pQHFp$hgp67YLpKNVjUzoo#F9^ayYr|>t zb%wvQa~Jvd%iEu?_;Q&wyKI~E*~q6@utUSmKZOA4Cv^mUz47K`(9KVYG2b@%G_nCpg>*j8I%( z1FN~o1!By6kjJ}8X6BYS);0OQxRymQhOiw=JaMY)ZGi@%7}O+K37`gnh9p!~bzNTu z3Pezbij0&B(#@)3LI@_0$gR<^Z?+wGVvC>y!&UP-d0Qo+GlK%T6G`fdF zmy#Ha^J_+D*oW%Bao07&uxpB|)uB=45s4FS_&+(5xifOn9Dg-SdBr=h*q*jNKb#H^ zPWZ%7J{lhzPXQk*wdL5I{A(|KAY28v!l^}i?e)T&ilrhfO~Z^iLD5&!@I diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png index 6c5361615b55661ff7dee485125e8c8280cea451..d1ad107dc69f050fd4ed77952d2bbe0ddf6c8cd4 100644 GIT binary patch delta 10 RcmZqSn8Y~2WAZL$F8~vx1Cjs$ literal 1028 zcmbVLJ#W)M7`FImQKcdzBve>9xoczJIgVXhF^v=3Gy<0@jUXF!>`P;{_8I%qxE(uz z;1BQv7+8=Pfq|I;egGp2BNYrR2so#40jcVMCHp@7KF{-hK3ZS9IX`!8j^nub_Nvuk z>sj{BUYKFu_piP`XUkP;_vi*0(6N_d&J0K&gLdR?;STnKy$A1boq+~nw?}*KZQUo4 z;1xDP9wiLTarKov@%(K}K_730vB7_N^Ogr;VDR^9E_9O?9)_#?Dc;y$>-ziKz83H+ zH$Xkt89{`p2l8kq&h*^iC%ih_7uO;WCMI;-;E$Z@x$B@sQVePWtoTrYKtTek%Brd^ z0SO`~LPKKW?08optvTEOu~4Myb#0F<30YEO)016^6_k{Z1OPqIf$N@kbGkY1=Y*_D2Z9 zK!<1xVO*Sx@*G8L;WXUE zfs>L5O!BLTC+I`@-?*EKrkOR#QJPSzsh{aWR)|d(C>$+&uUVYZ5#g diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-center.png index 3c645b28ede57cb8052170d1e5b16ac21e9fb9ce..7b9720ec82c9e180a751469fe3dd1c0bec36f376 100644 GIT binary patch delta 110 zcmV-!0FnQc0gC~UBxf0PMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0000j zNkl%d;>8OF<{v+P2m=Hd0BF1k^5wd3 QG5`Po07*qoM6N<$f=rw%{r~^~ delta 119 zcmeBXoWeLkrGT@*BeIx*fm;}a85w5Hkzin8P)PO&@?~Jiox#9R+{eK1y_JEX z{TT*^A7>dD^nWuj2wvDJ&>jd>E9L3p7*cU7DIp;tARR;=@C1r7{Qu9)z`BmXWDnyh PKM>#3)z4*}Q$iB}P{|>Q diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png index c8b6c441e61bd90e1cd11d0c9ace4e334a0c2dde..c659f3e551cdb38e6984bb4647b59ea82f416d31 100644 GIT binary patch delta 141 zcmV;80CNAZ0jU9yB!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0000> zNklKM55WKKcpgj<%*38qzF{I*_&q+tF1_cp^gD2OY77(xcpR6Xh#be=i z>3a`XFH8;L@p$pttHb_X?}6sxbP0l+XkK0gW+# diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png index 1a2fce89bfbc4b56032cb775b465a5251c58ff83..18849cea2024a0cd4c08cc2cef7613c82ee181b8 100644 GIT binary patch delta 143 zcmV;A0C4}W0jmL!B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0000@ zNklu|)&hwLS6pKZAyvhX x5;LPMb}}=#dxvciab{-6+jEykzkLD>0JGi{%Lzi_v;Y7A00>D%PDHLkV1iO!GhzS$ delta 147 zcmZ3@xSnx>NKM55WKKcpgj<%*3{F*F{I*_&+(014GJO*2Of(`Y_V!>{{KJspF`6X ym8#paD8+e41B$-um-G$Ahf@8Gcl;7PcRM6~+TJfx*+&&t;ucLK6TQZ!`7) diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-center.png index 1dc443e42273d76c21971b9d73bcf618757c45e7..b2112661b8a30e1ab0fab55f6554641b1317bb77 100644 GIT binary patch delta 94 zcmbQpRXssDfL7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5DMr1r)978x{lYjjGZ_g~uETF(4a9;f2 e(PK#tSJ@btUD)DY@6c}pMTMuUpUXO@geCwn@*VmB diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-knob-left.png index 047e47c967e988b0c9cd00903de7982c5575f150..7c324534778b7f4db191296bf5b6fb8476555b39 100644 GIT binary patch delta 130 zcmV-|0Db?%3Z4OwBYOZDbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy zKuJVFRCwBA{Qv(y0}L=RAOYMQMkuWW#EL9HLJo+vVaha-^{^pxzQZ`oK>Q1cC1IRT kK>PuSxfqFa4nTkb0L8!x$yBR_7XSbN07*qoM6N<$f=~i5qyPW_ literal 1347 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y?!3HE>ZCjQIxlq%ts6 zFt&!=&%PWW^6ysa+zk)At_gV^0saR z`_1lrtE1%~+3kL^^W1FCub#wvOeFEgnhqtOZ%Uiz%{K8>4`$x^efRyJ?=01yKZ#rL zvoPwih(5naXt4j$Lw}Au5xM_~F;2!=`%i{%cbk}(n!5x4 zDKBTQeJ;?OJ4@2~-8Rw;;mo@nX|Dr?V>S1l9IFe^-(@ z<8A7!>5-a3sxm5jl0w!Q=VU(PX6~Hz?DE?$0h2b&H`#Au9Qpb2+kmMouMLlW{pRiV zW!K*8wET=QDJ!@s@XzZP{pt(^4X^%l9_t6!ogS%uxc{p9R2<-zm3(B?4<9i}C9fryGD|`#H(6Y>)|fo)t&Drc$#}jUabjPiH|_ZL z;PdxO8#eL-U|e*Y$LxM_lSD z|E9p}rDo421W*4{%6;Bw$~)CEp$MK`Yd*yN(8}TRZxuf@egBmc=kBc)Jl#;JW4C%< z@Y!Q;R4@5ldY!Ukf7e&1V-i0n7&=GI-KXL^r_1uwtpILyw(_Re&mP6-UuU1U`%LV^ zUpqP0>J=&X9TNZQTBG=3pYcAs`0e=}iOX;AyPWcRv0>Ef-IpisTC}lhO8;&3Z?=7_ zge5m^+_$kVj6-|NqU0>E%_aT}%&NJ5(?7FLelOUl#bQ121;(XMI5*V9>AV)b zEpIb#d&5NQ+sSKfa}#%U+l8&ZU7{B)$GDq+_0{?3S6#jP{7F4`#o|9~E0wvf9a&l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTK zVr7USFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xps5^5D;1=Z-LwyDGpMFJRfxe-h zfj-=1phg>@AFZ5=QWHz^i$e1AbL<>JfuInOkzbNuoRMFk;2dnK;G3A7nFr$A=%Xu# z+Ha!|aukvyAt3-31qOi~7f>fGIPJJpPFjFs#Lv^kF@!@l`Op9V_RKs62PG7w%-dO2 z&Yn1-!MNm#WFt#QBG-`wTP+1Pjs_k9mdy+1d^g}Tp74>oW2qxkkAgUZ?_`!uR}aWc e(BODb#>l|e$s;@U#uXb-ZCjQIxlq%ts6 zFt&!=&%PWW^6ysa+zk)At_gV^0saR z`_1lrtE1%~+3kL^^W1FCub#wvOeFEgnhqtOZ%Uiz%{K8>4`$x^efRyJ?=01yKZ#rL zvoPwih(5naXt4j$Lw}Au5xM_~F;2!=`%i{%cbk}(n!5x4 zDKBTQeJ;?OJ4@2~-8Rw;;mo@nX|Dr?V>S1l9IFe^-(@ z<8A7!>5-a3sxm5jl0w!Q=VU(PX6~Hz?DE?$0h2b&H`#Au9Qpb2+kmMouMLlW{pRiV zW!K*8wET=QDJ!@s@XzZP{pt(^4X^%l9_t6!ogS%uxc{p9R2<-zm3(B?4<9i}C9fryGD|`#H(6Y>)|fo)t&Drc$#}jUabjPiH|_ZL z;PdxO8#eL-U|e*Y$LxM_lSD z|E9p}rDo421W*4{%6;Bw$~)CEp$MK`Yd*yN(8}TRZxuf@egBmc=kBc)Jl#;JW4C%< z@Y!Q;R4@5ldY!Ukf7e&1V-i0n7&=GI-KXL^r_1uwtpILyw(_Re&mP6-UuU1U`%LV^ zUpqP0>J=&X9TNZQTBG=3pYcAs`0e=}iOX;AyPWcRv0>Ef-IpisTC}lhO8;&3Z?=7_ zge5m^+_$kVj6-|NqU0>E%_aT}%&NJ5(?7FLelOUl#bQ121;(XMI5*V9>AV)b zEpIb#d&5NQ+sSKfa}#%U+l8&ZU7{B)$GDq+_0{?3S6#jP{7F4`#o|9~E0wvf9a&l1AfjnEKjFOT9D}DX)@^Za$W4-*MbbUihOG|wNBYh(yU7!lx;>x^|#0uTK zVr7USFmqf|i<65o3raHc^AtelCMM;Vme?vOfh>Xps5^5D;1=Z-LwyDGpMFJRfxe-h zfj-=1phg>@AFZ5=QWHz^i$e1AbL<>JfuInOkzbNuoRMFk;2dnK;G3A7nFr$A=%Xu# z+Ha!|aukvyAt3-31qOi~7f>fGIPJJpPFjFs#NN}zF@!@l`Op9V_RKs62PG7w%-L14 z`HwtO*sG9Q*>Ps)QKl<@I6LwgeXEap%qeErt0-6@Aa?W) PD7HLZ{an^LB{Ts5dfYI5 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-center.png index b83295f890275922e4123fc357845773365b4278..cd48f051376f7be411ee7e380e83478ab1703483 100644 GIT binary patch delta 127 zcmZ3@HIZ?GWCarg14E+XLvA1?S>hT|5}cn_Ql40p%HWuipOmWLnVXoN8kCxtQdxL1 z)dr}@*we)^q~exLha)e81IOWMjt7|kP4$tub8vBHut!p;q0)?*&yU{COnZ@chKEt+ e_J3POHU`cAd_NDl9J>nC&fw|l=d#Wzp$PziT`i{o literal 1323 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrC!3HGXIhVySFfhwyIy(n=Iy)-_6y>L7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5DM$9~2978x{b-PY-G8ph2mU+M5FO6HV zJv!s7Ko!S3y^yIJb}yRQxWmSiDV^<2-iNw`v^v)#tC^>`D=m1#`LPQWNuI8LF6*2U FngBf^D--|# diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-left.png index 050e7206bd0fa9d128a0ff545c585586b9d9c8d1..b2f76be0227f11b001423a5ea5d4f0021eca4f53 100644 GIT binary patch delta 269 zcmV+o0rLL(3!MUx8Gix*004Faal!xq02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM006&9L_t(|+I)~X4umiaMF$8G5o?i(g8QF?BTyoG1c-tLL_xw=JQEg0 z^D4`Jw&QqpU4Q=K9mnxXZQItiE%H$man6}i>Q!!2pt8 zI*dHemu0c@D0moYn&QW%Y0`$Tp`VmxISfPJ_qL5$m%s^CRl&gJQcAq+6kq@-n5NU~ T6{*Pp0000FgZf>Flf!P?VpRnUl)E zP{G(5azFcWfXKgFsdG0x?6yi5# zEzQK#VHW2h_M=W#-a8yDW@JA2%zNWpqsS9=wUv|fx@}gw2I)Udaoxo8?Sp)A^QZU? zE2g}hz4p04Z|*Efzl$|p_v9^W3woY0Ts>$XFR|Bg$J~Mlv&V}~>zvN2tP@n*`}|!= z=8U(gv!+LC3aQGd>`4k)XPlGyjGMW0*0alRzXVL$FyCaqiE-rT$8Q6svb;7t`t_T) z+m~H?uiu_HnfhB$d3DT*@p7soZ37&01sfw6`+u6({5QcEpK&jo!55 z+k@Zp?y6qz+aua~bo=5Pfp51qzTCA*c$Rd1Y2wnwc@NEZKAkO{yPBIL@L$){jUI8S zr~I1&ua}xVn-DzxPbv3#qbcuH%Y-6$cCGmk_d_d(%fD6p(DeORPMo{9R`7H~p^n|^ zdBJCoy-~g7bLn-;j{RL2nPqzZN)!E9MUO#&jqko-!-tIH8 z4}b0CSgTj0+;>R)t80zohkeHT?BciQcO)*qz3+0$>&1pquXkUbxNFhIsww@q)xX*H ztrC{pv~l0Yx-bsyEsK(~yf&BkGcc>>`c41LI{Cd|3wKS&I^E9x)k)zK{I$9AXY#~N z=kZ+caZ_)Db^lxDZNb-KpJm1uTYlCmcq#q&@M}HuP_{V90~d?+#1|NsKH=O@6Q}c9 z^tQasyzLDWt#2ofAZ{?%9KpI>$L?(--0+!c%eu&q?)x^`$` zyb&10_2y1qB70 zqLehNAQv~Nb|BAIDWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_ zuUHvk2+SOp)Z*l#%z~24{5%Daxrs^nr6smXN+65i0P4=%0=Pwa#ZX@X{ik1%SfFpH zXP^%^8K}_)=tnE(qSVBa{GyQj{2V(+P#`D-WaO9R7iZ)bC^!e3D)=TQXXb(UHu~tw zq4wM8gB*qANJt2PMS($J#|6|03r;&Om6I007-3}fba4#P5bd3Kx~s)Nz%^fv!_HwN zd&$BF|KI;*o&K*;p=oz!Oh?muzojS7cvKm(P7?5cw|8n%YGmAx^o{FY+Z}qn%jvJP z0E@?Ekw6j0qI0@;b8lZT;oYR;94Im&sA)%k!Ts+ZlUOR}Wp_9zwlp1$t(0IhIG49z z`{xZ&aukR-8Dv@DVN&Ol9dtdg1Fy$i> zmpiU1l=_`_Q%GHIG*RcN0gqvya!ZYM+;eN|*lklX8FFtQ`W%|aDi!*6iOyQiYo)xW zWR8D)?+{|Mj8C^BQY<8t^?Iq}#*)QZaz3`*tii#bZJK2=zU+H{xKL&f!w#jo)lo{3 Qppu=z)78&qol`;+0HI5dS^xk5 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-horizontal-track-right.png index bb3667ac4fc2106cb1b77c10a396893e7d1d0a20..7c338ed9e2f773cbdb7a7e0a0d806fae1cbd4d38 100644 GIT binary patch delta 285 zcmV+&0pkAq3#|f>8Gix*004Faal!xq02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM007TPL_t(|+I*2s4n#l@Mn|K?PlARs_Xg>0z>R#S}szEGdeo$`<{t@6O^f{3eRzzJ0Z@w%d+gcE{@|(l|k8I7FgZf>Flf!P?VpRnUl)E zP{G(5azFcWfXKgFsdG0x?6yi5# zEzQK#VHW2h_M=W#-a8yDW@JA2%zNWpqsS9=wUv|fx@}gw2I)Udaoxo8?Sp)A^QZU? zE2g}hz4p04Z|*Efzl$|p_v9^W3woY0Ts>$XFR|Bg$J~Mlv&V}~>zvN2tP@n*`}|!= z=8U(gv!+LC3aQGd>`4k)XPlGyjGMW0*0alRzXVL$FyCaqiE-rT$8Q6svb;7t`t_T) z+m~H?uiu_HnfhB$d3DT*@p7soZ37&01sfw6`+u6({5QcEpK&jo!55 z+k@Zp?y6qz+aua~bo=5Pfp51qzTCA*c$Rd1Y2wnwc@NEZKAkO{yPBIL@L$){jUI8S zr~I1&ua}xVn-DzxPbv3#qbcuH%Y-6$cCGmk_d_d(%fD6p(DeORPMo{9R`7H~p^n|^ zdBJCoy-~g7bLn-;j{RL2nPqzZN)!E9MUO#&jqko-!-tIH8 z4}b0CSgTj0+;>R)t80zohkeHT?BciQcO)*qz3+0$>&1pquXkUbxNFhIsww@q)xX*H ztrC{pv~l0Yx-bsyEsK(~yf&BkGcc>>`c41LI{Cd|3wKS&I^E9x)k)zK{I$9AXY#~N z=kZ+caZ_)Db^lxDZNb-KpJm1uTYlCmcq#q&@M}HuP_{V90~d?+#1|NsKH=O@6Q}c9 z^tQasyzLDWt#2ofAZ{?%9KpI>$L?(--0+!c%eu&q?)x^`$` zyb&10_2y1qB70 zqLehNAQv~Nb|BAIDWjyMz)D}gyu4hm+*mKaC|%#s($Z4jz)0W7NEfI=x41H|B(Xv_ zuUHvk2+SOp)Z*l#%z~24{5%Daxrs^nr6smXN+65i0P4=%0=Pwa#ZX@X{ik1%SfFpH zXP^%^8K}_)=tnE(qSVBa{GyQj{2V(+P#`D-WaO9R7iZ)bC^!e3D)=TQXXb(UHu~tw zq4wM8gB*qANJt2PMS($J#|6|03r;&Om6I007-3}dba4#P5bd3Cx~s)Nz%^ga%&ddE zT(4x|1O6Q!kN=e|RNf)sc=Y&>GZB25%RKef0zy{IsV)|t_I&3dd-2!5%t(fgP(0o;(1xb^HnvQ*i8RynLlIM%YB}+1E;gRIJ4_A z<5O{`3*WY?@S1LUdz)AHG}Gx#KIv8p<-e?iCN=!KT^f72GB%v~-7daDnffxd@VEC& zcx8?^zW=>`O_lQV_ma;){?2{kvGJ0LX^f}B^Gr5Z$>SgELZ+o|$c>)8_p7{w%%ORw Sqtxbt5}l{3pUXO@geCxUzLB5+ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png index 1715d2dcfcf887b1b7744748ec72fd1615098aff..0d925df8106f2c3535bba0128d96c4af69e6f965 100644 GIT binary patch delta 129 zcmV-{0Dk|v3Y`IvBYFTCbVXQnQ*UN;cVTj606}DLVr3vnZDD6+Qe|Oed2z{QJOBUy zKS@MERCwBA{Qv(y12SM_WV8oTd<>Z26Hx6z7>5aqf}0H3!7UUEu-FKqB!E~2hy{W8 jJrLgk;upwj0RjvF{NNI@H9)y@00000NkvXXu0mjf6}~To literal 1338 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_1!3HE3U$f%}vgI~=rdd2Tl6S5M+SCX)DLO^1@tH>J(p+85Sh}{3g7$@Vb{U^h>yG_hX&E0|j@}|o7n?Li(9m^?smw$it zzvQd4rt%1WkWtt-#q@~M!^j1hF;_~2A6)BvKiAOo&{?12h~+Gt^63`&$&C+tdX=Z8 znV34v;ylED)XBfJqzXo9s6+j{N-iZNOBP*M>*Ge)D$w zvTN`4+Y=|VKQ^^nu6eEA;osixUyHh)R!;ixdW&4|)i2SLtio>JesXr1^5G-pf%eQE zPECC>DH;zZI`JgVNr;JWIW%FII*wMn|6GA z@O$1})$4tGL|cz;Uwk9*?bgPZyEX~WlCCdJT)H^#q500Iv!!!ab8`g#>w3D;BQEun ze^cP~QnP0hf~Wr}UJbNAK?o^B}Av0FVa z`0TMas+W8&y-wM&zw4{hF^QiO44tFq?o;ud(`EVTRsgp;TY1y#XOCj^ud~nFeJ1wd zubmug^@^1H4vBwttx^22&v>6*{Pz5g#O1g5T~2wu*f8q#?#mN*E!tQ$rT@12H`~5d z!jhXd?%P-w#-Y7sQF4~o<`RDfX4PE3>7Q9AzZY!buIX5(+u6T5DSU#zHdp>kp1A2e zp6fks>TR&@f6Kfr_*(3<%=lu<&sqg9rT-p&t!Ey}7AJY&VzHk10^`yroEvK5bY6?z zmbaO=yv0i>ry1t>MrKP@sk-m|UE>MMTab;dfVufyA zu`tKo-FP)SbBnaEtPap}qq8Pro9uK;KZ$ zKp$>0P@@gdk5zopr07kno5C8xG diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-center.png index 5bf0395692c6fa457154bc9797b85139f875b7cc..8e9272da955179f2e9edba38e4c177507af11b6b 100644 GIT binary patch delta 94 zcmbQhRXssDfWn zs9z&x-*5iRCwDBT>i?CDjW zmS$q=FpKjL`%xz=?;Q>nGcq51=Dl&QQRIob+R90K-8QRTgY=)KxNhS4_Cdb5`BVIc z6;oc$Ui)02H+Pn#-^H4)d-9gG1wGFgt{$|Hm)PsLV{So&+2h5gbxvnh)(NWZeg3W_ zbH>}$S<@pmg;Zr!_9TU@GtS9;#?9P0>)GYEUjim=m~XP*#5nTvLNaZn@^QdWU~|zke<2dRjT@!|N?_y;r|PPqGTTef!DTWy*(-ln2@~ zdpI@q$)spJnCQflI4k+csvkaLl1g4nE@hU4RBp1kX00)K+FKd-ij(ntJL1H?MsM2j z?ZNMPcU7TKmrub(}N(Z9|fdbp zRtZaP+PH6HT^NVoo;9U>ZI@q{@PsmGkM~s z^LVcJxT&|ny8kWnw%}{A&obkSEkA1&yp;ZX__dySC|jK5fs4g@;tPyRpKxxdiPL#4 zdRyLR-u8xx*0+<_+U6$i>b478eY-?2T8?oy|LUvr&#$_A_xY20?ux~K*j6fYT|2Ze z-UygsI14-?iy0WWg+Z8+Vb&Z8U{)&342dX-@b$4u&d=3LOvz75)vL%Y0IFtSu&J;D zGILW)5)~?PbMlI0ooeue djalZ0e=uC{W&6KVr_TZu6P~VqF6*2UngG?QAlU!_ diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-top.png index f7947c66ebb96fbefab4e73da24cda3761aa6dda..d34e638b87c9a500b43eccfd61d5bdb9f73c541d 100644 GIT binary patch delta 129 zcmdnNHJ5RMautJQiEBhjaDG}zd16s2gJVj5QmTSyZen_BP-3)dm>D_m^F>rd~=rdd2Tl6S5M+SCX)DLO^1@tH>J(p+85Sh}{3g7$@Vb{U^h>yG_hX&E0|j@}|o7n?Li(9m^?smw$it zzvQd4rt%1WkWtt-#q@~M!^j1hF;_~2A6)BvKiAOo&{?12h~+Gt^63`&$&C+tdX=Z8 znV34v;ylED)XBfJqzXo9s6+j{N-iZNOBP*M>*Ge)D$w zvTN`4+Y=|VKQ^^nu6eEA;osixUyHh)R!;ixdW&4|)i2SLtio>JesXr1^5G-pf%eQE zPECC>DH;zZI`JgVNr;JWIW%FII*wMn|6GA z@O$1})$4tGL|cz;Uwk9*?bgPZyEX~WlCCdJT)H^#q500Iv!!!ab8`g#>w3D;BQEun ze^cP~QnP0hf~Wr}UJbNAK?o^B}Av0FVa z`0TMas+W8&y-wM&zw4{hF^QiO44tFq?o;ud(`EVTRsgp;TY1y#XOCj^ud~nFeJ1wd zubmug^@^1H4vBwttx^22&v>6*{Pz5g#O1g5T~2wu*f8q#?#mN*E!tQ$rT@12H`~5d z!jhXd?%P-w#-Y7sQF4~o<`RDfX4PE3>7Q9AzZY!buIX5(+u6T5DSU#zHdp>kp1A2e zp6fks>TR&@f6Kfr_*(3<%=lu<&sqg9rT-p&t!Ey}7AJY&VzHk10^`yroEvK5bY6?z zmbaO=yv0i>ry1t>MrKP@sk-m|UE>MMTab;dfVufyA zu`tKo-FP)SbBnaEtPap}qq8Pro9uK;KZ$ zKp$>0P@@gdk5u9b|2 z_5$@RkD?t)*Eg8R7%a+W$r55eHS1ugf<$^l*8Iaed<@ux);1n-OKXZ@U}xAXC+Pbu S@U}Q8#ynm9T-G@yGywnvHY`;D diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-track-bottom.png index 61d1eb3e4216380c89f8206ea3b68c5a7a91d74e..7f53deda98143538bc000c1331c3f97a7fe9539f 100644 GIT binary patch literal 310 zcmV-60m=S}P)-*<`| z=NzKrIOGfC1pw;1LSU+|ssf z*L76}d7dN6IF3TYHP5B4>#pmPBvG!|sVIu7s`|bUg24BEM8`Ykr)h#~nx^=H-odeT zmSqS8b<;GkL@F#0MG=OP6$A9WX&lGs$uI7%Y5dH8q?Z5#0Q+Z~fEt`eQ~&?~07*qo IM6N<$f{L|)`2YX_ literal 1552 zcmZ8g3pCVO82?LNGb4#Y#27?j#ybWRhEN_OLH#4O`KX8tmEl_HKu$Rji!iIz&< zEh1y{s&-dG9yME7uVZID3KOl>j#6jO-gCZtzwbN0@Ap0Ky(t72dr8p!u_V)fX<-iM>h#u|3i6#Bdv8h*t^V580BvvZVF< z$tWj2skOA71s##-8DFr~4|@ zy1Jv?jte{3#AhgxwI;G`5F~bR_q}ze0}7~si2_7UF?5 zzlIk6#NQ=vG)6NX?N97!E+2DS`04U|Yl941F)oVqV|m2nv4=B-inJ=YxZ76hOuYk< z@{4P{+h~-@>^1lN%_w-kLGGf)`F-Aq*89uE^`qf1*F?F_{EnATpTDh^{`FF%4z8-i zy|4E#jX|eD9=W9>be?p%~=_Wm^it|=NF&zt?jA2TXe()Qcg$&U}k ztI-U#j83^VyI9p_jv)sZ&PDE zjJWoLvf%GdHbSm|um;T~e?=r`N%{&rHn~POC9^8X>zb=J47`CL<|7b+TpaH;wg%zkY3PeJ(XyFk|EXxx08G#k(+inaB z`56L*S)#n12}nH1pdgLVMrb`04u(V`Eg0l;*weNrcESagB`Oqx=vWLUIyxF1ZHNXL zAsBr#Gc$~y0mi^USAfuE#za6QmTm-7?F-3Q9$N}Cm_emOR4@X$%}WXbqaaHZYCF-l zwNodJ{w+}ibEhjoe;5{tj?qW!VZJd70xbkRV(|HO$#NV4C3{GN}3Nyq9NBV4{m}Ef1@e+NljwwQ^~y;StMC`C#5QQ<|d}62BjvZR2H60 zwE-&9^>lFzskkL`kdc?cfP;BM|HOxk|Gfmv=3Pii+Z7!Y`Z7iBWCz2CbMJ2bW8z`x X4CMHh`gesCP$PqWn zs9z&x-*5iRCwDBT>i?CDjW zmS$q=FpKjL`%xz=?;Q>nGcq51=Dl&QQRIob+R90K-8QRTgY=)KxNhS4_Cdb5`BVIc z6;oc$Ui)02H+Pn#-^H4)d-9gG1wGFgt{$|Hm)PsLV{So&+2h5gbxvnh)(NWZeg3W_ zbH>}$S<@pmg;Zr!_9TU@GtS9;#?9P0>)GYEUjim=m~XP*#5nTvLNaZn@^QdWU~|zke<2dRjT@!|N?_y;r|PPqGTTef!DTWy*(-ln2@~ zdpI@q$)spJnCQflI4k+csvkaLl1g4nE@hU4RBp1kX00)K+FKd-ij(ntJL1H?MsM2j z?ZNMPcU7TKmrub(}N(Z9|fdbp zRtZaP+PH6HT^NVoo;9U>ZI@q{@PsmGkM~s z^LVcJxT&|ny8kWnw%}{A&obkSEkA1&yp;ZX__dySC|jK5fs4g@;tPyRpKxxdiPL#4 zdRyLR-u8xx*0+<_+U6$i>b478eY-?2T8?oy|LUvr&#$_A_xY20?ux~K*j6fYT|2Ze z-UygsI14-?iy0WWg+Z8+Vb&Z8U{)&342dX-@b$4u&d=3LOvz75)vL%Y0IFtSu&J;D zGILW)5)~?PbMlI0oKG(BLdS>UUs(bw$JFL&}sC=BVQB02y>eSaefwW^{L9a%BKPWN%_+AW3auXJt}l zVPtu6$z?nM007WQL_t(|+O&|n3WGopMYFE&w;~o|9vNTPP<9L1*0O9eo{)3A5pl#cxX@+6g_kW#Is_VMzx~6Hqq06$A zWjW8YVHj~7OOiwgnWm}l`>yN4FhnO?0I59B;S>acZQF{X$g-@es^@u0lEAyFs&!qN zYf%&^IF2Kpf+b$z6udD6VO`e@-L}p5eT)!qx=>s+ilT8G8LDX-FVLHKhW`W&*o~o> k$T{Id*KsV%dKU>W0K|D@a_afuS^xk507*qoM6N<$f)QPWk^lez literal 1536 zcmeAS@N?(olHy`uVBq!ia0vp^d_c_2!3HG#TlXX}FfhwyIy(n=Iy)-_6y>L7=A<$( zR4}%N+|RxoAoA~4>f8+vyRFg%Iqfng=A{IeIM3OZ9lq;q)GM>?iXO9<<;Ki9rt-FK z1N+VHe5<47AKC4Gvh&<*&aa-tdrTzp$C?f$pKnT==gl_pRS#y~`F;2OpYJTypFfFP z@Ut-LvWPyvNNBMC(L;ZZJQ2D7i7`&bS^H0hZ+DxRmzui+|K&}U?>B$ulRK7E@-F}W z>VL^sXHDf1{2-&SZ;I&=rH7FVGGnfk2tT;i`F^gU>7lbe#SzO{IOWqV@{=1M_Vg-G zOEWQbn8kUB{iu_b_YMb(8JQ10^WHeuDDp&IZRI4rZkyGvLHbWqTsQH2`ygN3{3(9J ziYYH=uYE4in>$O=?_y2YJ$cL8f}Up#R}b39OYC*rF}EPX?D1mLI;XQL>jc&IK7Ut| zIpb~Wtm%=OLaH($fLPW`AsIw_NjDy~Dq~-@g`hJ*}Md;q?}|-m71tCs~EvzWwCvGUdZZ$^-40 zJ)D~QWKuL9OmyN&oRxfJ)ej#rNhPl(moiI2DmPhNv(}hA?X8S^#mRWS9dTk`qc`pN z_TcxtyQ!oJTCInCaQ_6kbXv#a)GNA~bU28tX{m{zc@^2MCG=2Y-6X))&6+GQgsAIQ! zUhvstZ&WY&TzZ|dV}I9Ir(+U7Cm1?M&E2QsJEzO?)2#q*b++=R*Uuis=wD}_xBE=& z!(Tf&*6I~0_Z<@d>RO}tVW06nyZG(-9f`|t@4KAxda+^D>)n?p?pn05YD)iY^>4O) ztAr&tZQQr9E{sEa%cA5gugxX?49u#ze$zj*PJS=g!d=s`PPemvbyD~Qe{HV(nLKgR zc|6y9+|=7(-T#((Tky5mXPNQEmY=l>UP}Kx{94aElr2v3z{O%c@dd`EPdGQ!#Ob^i zy)ADuZ+pW;>)Xj|ZF3WMb=!rlzFndhEyuWQ&?x097+E*i={n znYpPYi3%0DIeEoa6}C!X6;?ntNLXJ<0j#7X+g2&UH$cHTzbI9~M9)OeK*^3vK|#T$ zC?(A*$i)q+9mum)$|xx*u+rBrFE7_CH`dE9O4m2Ew6xSWFw!?N(gmu}Ew0QfNvzP# zD^`XW0yD=YwK%ybv!En1KTiQKgZ4y6bK3d8Tlpo#Toep3eLf%3ciWSnRy_-jXt_^ zsQotjAV(oN5)uMnQD6|*aRGJ0g42#m<)j5LMi{w0T^vI+ME6eInb+dL(^mh^+WQ7~ zCtJp*^@o^0b4@WRnG&Lq8h$H@v%HCYqtogT&7_yp-IMFT-8g)-@Qd&A*KQ{9Wty*RJA9jeJzMKUspUV-d$;gAMj?Hdf!Zy*xkR_O=t7cziD( z*rdba$PhX0V4=*b^-|k!^Iku%ZF9a^f#Y=1t6grBRMs56X?wVC`@&UPBCd_=UR%iZ z?Wl=Kn5Fi~#{GI}g6w6J)@7LmGVGHy3{Q5Qu~~iY^Mmx(L=MkM0U}44zSZ_$etG2C zLIz>c8Rw%X{5$`>)<&+Mb;-k(N}ba-Ugf$Jrs22Y^)7A??+2}{QQQI>oStk?yKPp- Yz*L{HF`4Jp3{cARboFyt=akR{0HHROQ~&?~ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png index c2b5d135edff6096026aa56a91e3c24ec10a0462..6bb0e9a69f91aef382fedc382ca383d812408603 100644 GIT binary patch delta 10 RcmZqR=wqDVF?koW8vqkm1BL(q literal 1024 zcmbVLJ#W)M7`9Z=LQ&ZmU_d8#CH9?@*tJ!+b>f&t!lg=s2orVeOJlY68T(4yPKb$a zj0`ZcAz)_!2^f&rU_$%{KukysyiVf+Qq=)V_I>z$p6C5MSYNv`H+ykb5QMq*s@;Kg z2HvUD)9}6Z=KMQYF7Q^5Z?FL$c_|gFfb}VAN8T3gP%qfK{hlrYU=VhDyyspud=^Pw zVI$>H0%$>4T+S2E-=-Y(=~ft<;@6k2L=*<5c%$xOH)+ygxVoRxjs3N*zrXG4fw;Vc z7IOm#BFa6KM>}z5ggeV>Ee0P)mb>(XpM07Mx6R$a!MO@@O=YMpcQWTQbpgz2H!k3RqOK zy_kD>CC=tc2AgJn8YVnsF)A3nKHKG{2%a8>5GAgAL>y<6L_x~r+)HF4VL6J5xW?8Q z@6bPP9BZ9*_Yx|1XvTI^AL=ofFTs$zlZ6UH@W!~7hENo5$7cR+L}T8zO%eV`K^PdA zEMP*k8rBr7E)b#BRa+@Jj>Bp#$HuC<&{8oVTi9w<>$X#C5DQzHrPNDo zJI=Tl`?S;zL3e`HPQ)6`lzN<{UB-6G4p<*D&axp(P;;Y>T+a{V;#`#HFj||Y;T;+{ zDT~lJzeaeBKCb;6cSF^6tFAa|1M5}rN}OPW|H+vQ&d5b`{M9Vw6?9;+J!*Y891RbR zVPaAkjVGUeK83NuZQJVRpZme)=8KvB()87D2WM8l1h3Dah*H=EAdi!YQ*QNW< eh3{wY3RA+z2Q!bSZ$A7{%w)T@WdMy7^a$7Q|+aRhZ+wPdUat27ARz~VRyi8B5kwX#P!x$nC+4-48qiR@jB(^;)KsLk zkmcx_10h&FvQR7Hi8H{#N=uwvdCGb2sOo$^SLV9Hic=NYwq0{*T1!~8%8QJXs+E;H z4FjfSR3tf1SO#iFGG^!8m4&BQA*6X2UK3~KDp4Y3YDIDtDNs$*I@;AJyW53oL*b2cSR|q-WQJLEp3;o>u`7!|N}R+FM7t0ns|_s; zn!56=g>edzhRfrEAzdC;>w&1kUwtmGt%Xrr45 z-4)ij73=g0N;oTqjLn)3IGQrf$|=i1@7Mq#iIS{7*X6m27SkemL*t-eDOl#$Np8@G z?SJF$nzrp3T3~jety{h+udwm|ee4aZALIDs#6Je2l!+6^q3BM#j{%sHzGq z%i3GK*=#7hF;!)hs+RvFCcfZ&Y##J_ixbB=HyJyk0`w+CRITAQA~w)qyG97Z5LT;r z{^UO1G0%Ihl4L!MqHtZ71u(|`yfKbrLi+vnc}oqLwr$I~>qheR7z~I*R@0-qSJyWejG03vI?apXuq?|&8MG{l{9!ho zj1;F(D5-8MZVOP)9gVJnsn3vphy)5k19vT!nt(c4X`!KWxC7e5j{pMz+Xv87014kE P00000NkvXXu0mjf4qCHR diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-center.png deleted file mode 100644 index 2756a41caf48223caedd31fc5c418b0c4ef3b47f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^{6Nge!2~4x_9f>6DajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MTVX(jv*DdlJ4w&->_=ctM-2R|Ns8}{{8*Eef_^bzrITI qIDC;;VB!Av^Y`;tSF;%y*%)%pX{4VG-@Y2CnZeW5&t;ucLK6UXG&P(6 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-disabled-top.png deleted file mode 100644 index 6ca32cb884164f357160dd5282202ae210e94149..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 424 zcmV;Z0ayNsP)pmJa)55b~6b{ zER>*VA(}!&)N*UF@_`sjOP`gW;8)n%TiB_j_Xotnko5}^*svq}nDLHm5kxUwILw{l zo|!u{#P@yp76hR=BuD3{9Fqh8K{9I=Vk2x!&X5>Mkko9#$3&CcC#Po}#`sno$8Gr` z7ote^rIfEyM&0hy;~mySIWfVuzr@2%XRg(ny(yN8zET>pOaY}7!chpLFoeNy2*bhP zx!-%c3W9zQozR@d&Mz)kJkNU&)oP7%3-DAVfh0+w=s3U_gL2sg&iH1UX7?KO{(BI- z(50ni2c6qybE;MdMy7$&J{nv?ldnCiLpU3@lJ+v0)dmB&9anjc($hvM{?#S{Q_Bm-b*9 z4<@~N^jCQG;K74>@DF(KN7SnaV;r_i)uib`5||I(=Xu`G^WB|?iwk!bIF4KNw(JgD z=h!|d9ORg@BGSjeOM)Tp;2=7A{snI^z##7SXwTm^LXrqU zWh0bH#?TzMu~}w8cz`MB<6)ed{P*`Cco0V>|3vYjpSAHQ-a5_k-sw&^JUs~Yh~Inw zHcEpLB$x)EOb*k+C{2FCYp{KFE%IPuLJv&-(y5-m3)&>dKoMXggen9o5|G@~H0?f+ zAc7*4L?ktkX2_BOA(%cqQ_G`)(XrjB7CV{zh|hA<2CIia0H%iDD@e%ODex0L3J!;+j|& zw1fY+ajkXHJ;|`x!38}nhHx~x yT5IUNBQvr0X2K&?1rhlVCmpoN+22oq0RRWb8ZBS*GFbos00{s|MNUMnLSTZ|dN^tT delta 145 zcmZ3(xR!B(NKM55WKKcpgj<%*4Wd(?0o0t^6G*a>h@7%xu%0000< KMNUMnLSTX*WGCYQ delta 115 zcmZo=oWM9iC5N-XBeIx*fm;}a85w5Hkzin8P)PO&@?~Jiox#9R+{eK1y_JEX z{TT*^A7>dD^nWuj2wvDJ&>jd>E9U9q7*cU7DJ3BxApHO%P=w+Ce`W?2P6kcQ9iNgx Nd{0+Dmvv4FO#rLJA7KCh diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png index f0534175f0d9d2fff6da028031afe9e132aa5995..7ffd824d22842d0ad9c3470c47a0713bbff61199 100644 GIT binary patch delta 143 zcmV;A0C4}Y0jmL!B!3xnMObuGZ)S9NVRB^vL1b@YWgtmyVP|DhWnpA_ami&o0000@ zNklY$sG?f-vUr;Z&Ij%zOPBqT=GS`ZNf5JX9lm-#0&ySVuP xRYg@{52)whxy)>2CL#jvjyWf~`}_qM0IGo&;>hs=RR91000>D%PDHLkV1i&#HKM55WKKcpgj<%*4)#@F{I*F&PheC0}2cb2PSv&Y`OX6fBa@$F1O~3 zv3nn!SW&U@Ln50<$@Y&66#u2%0_yqypPAw5Q5JJ%cfPzTAfLh0)z4*}Q$iB}bU-sX From 8c6913c399376defdec24e8bc9d7f8966aaa65f8 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Tue, 4 Oct 2011 17:03:23 +0200 Subject: [PATCH 07/22] small theming adjustment --- AppKit/CPScroller.j | 6 ++---- AppKit/Themes/Aristo/ThemeDescriptors.j | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 797883c56..bfab73fa4 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -141,7 +141,7 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); + (float)scrollerWidthForControlSize:(CPControlSize)aControlSize { // ?? a class method using self? - return nil//[self scrollerWidth]; + return [self scrollerWidth]; } @@ -150,9 +150,7 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); - (id)initWithFrame:(CGRect)aFrame { - self = [super initWithFrame:aFrame]; - - if (self) + if (self = [super initWithFrame:aFrame]) { _controlSize = CPRegularControlSize; _partRects = []; diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 677d01454..b11157453 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -671,7 +671,7 @@ var themedButtonValues = nil, [@"scroller-width", 7.0, CPThemeStateVertical], [@"knob-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateVertical], [@"track-inset", CGInsetMake(2.0, 0.0, 11.0, 0.0), CPThemeStateVertical], - [@"track-border-overlay", 9.0, CPThemeStateVertical], + [@"track-border-overlay", 10.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], [@"knob-color", knobColor, CPThemeStateVertical], @@ -746,7 +746,7 @@ var themedButtonValues = nil, [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 2.0)], [@"track-inset", CGInsetMake(0.0, 11.0, 0.0, 2.0)], - [@"track-border-overlay", 9.0], + [@"track-border-overlay", 10.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor, CPThemeStateSelected], [@"knob-color", knobColor], From 6e4007adc0bc6343f4ca8c6101f2e5047e931338 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 11:27:32 +0200 Subject: [PATCH 08/22] add support for the different scroller knob styles --- AppKit/CPScrollView.j | 52 +++++++- AppKit/CPScroller.j | 14 +- .../scroller-horizontal-knob-center.png | Bin 115 -> 123 bytes .../scroller-horizontal-knob-dark-center.png | Bin 0 -> 115 bytes .../scroller-horizontal-knob-dark-left.png | Bin 0 -> 146 bytes .../scroller-horizontal-knob-dark-right.png | Bin 0 -> 146 bytes .../scroller-horizontal-knob-left.png | Bin 146 -> 177 bytes .../scroller-horizontal-knob-light-center.png | Bin 0 -> 115 bytes .../scroller-horizontal-knob-light-left.png | Bin 0 -> 146 bytes .../scroller-horizontal-knob-light-right.png | Bin 0 -> 149 bytes .../scroller-horizontal-knob-right.png | Bin 146 -> 175 bytes ...scroller-horizontal-track-light-center.png | Bin 0 -> 115 bytes .../scroller-horizontal-track-light-left.png | Bin 0 -> 146 bytes .../scroller-horizontal-track-light-right.png | Bin 0 -> 147 bytes .../scroller-legacy-vertical-knob-bottom.png | Bin 157 -> 153 bytes .../scroller-vertical-knob-bottom.png | Bin 142 -> 168 bytes .../scroller-vertical-knob-center.png | Bin 112 -> 119 bytes .../scroller-vertical-knob-dark-bottom.png | Bin 0 -> 142 bytes .../scroller-vertical-knob-dark-center.png | Bin 0 -> 112 bytes .../scroller-vertical-knob-dark-top.png | Bin 0 -> 141 bytes .../scroller-vertical-knob-light-bottom.png | Bin 0 -> 144 bytes .../scroller-vertical-knob-light-center.png | Bin 0 -> 112 bytes .../scroller-vertical-knob-light-top.png | Bin 0 -> 143 bytes .../Resources/scroller-vertical-knob-top.png | Bin 141 -> 170 bytes .../scroller-vertical-track-light-bottom.png | Bin 0 -> 143 bytes .../scroller-vertical-track-light-center.png | Bin 0 -> 112 bytes .../scroller-vertical-track-light-top.png | Bin 0 -> 142 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 121 ++++++++++++++---- 28 files changed, 154 insertions(+), 33 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index 57fb8a23b..a1c25f1ff 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -75,6 +75,7 @@ var TIMER_INTERVAL = 0.2, CPTimer _timerScrollersHide; int _scrollerStyle; + int _scrollerKnobStyle; } @@ -174,6 +175,7 @@ var TIMER_INTERVAL = 0.2, [self setHasVerticalScroller:YES]; [self setHasHorizontalScroller:YES]; + _scrollerKnobStyle = CPScrollerKnobStyleDark; [self setScrollerStyle:CPScrollerStyleOverlay]; _delegate = nil; @@ -229,7 +231,7 @@ var TIMER_INTERVAL = 0.2, */ - (void)setScrollerStyle:(int)aStyle { - if (_scrollerStyle == aStyle) + if (_scrollerStyle === aStyle) return; _scrollerStyle = aStyle; @@ -237,6 +239,21 @@ var TIMER_INTERVAL = 0.2, [self _updateScrollerStyle]; } +- (int)scrollerKnobStyle +{ + return _scrollerKnobStyle; +} + +- (void)setScrollerKnobStyle:(int)newScrollerKnobStyle +{ + if (_scrollerKnobStyle === newScrollerKnobStyle) + return; + + _scrollerKnobStyle = newScrollerKnobStyle; + + [self _updateScrollerStyle]; +} + /*! Returns the content view that clips the document. */ @@ -614,11 +631,39 @@ var TIMER_INTERVAL = 0.2, { [_horizontalScroller setStyle:_scrollerStyle]; [_horizontalScroller unsetThemeState:CPThemeStateSelected]; + switch (_scrollerKnobStyle) + { + case CPScrollerKnobStyleLight: + [_horizontalScroller unsetThemeState:CPThemeStateScrollerKnobDark]; + [_horizontalScroller setThemeState:CPThemeStateScrollerKnobLight]; + break; + case CPScrollerKnobStyleDark: + [_horizontalScroller unsetThemeState:CPThemeStateScrollerKnobLight]; + [_horizontalScroller setThemeState:CPThemeStateScrollerKnobDark]; + break; + default: + [_horizontalScroller unsetThemeState:CPThemeStateScrollerKnobLight]; + [_horizontalScroller unsetThemeState:CPThemeStateScrollerKnobDark]; + } } if (_hasVerticalScroller) { [_verticalScroller setStyle:_scrollerStyle]; [_verticalScroller unsetThemeState:CPThemeStateSelected]; + switch (_scrollerKnobStyle) + { + case CPScrollerKnobStyleLight: + [_verticalScroller unsetThemeState:CPThemeStateScrollerKnobDark]; + [_verticalScroller setThemeState:CPThemeStateScrollerKnobLight]; + break; + case CPScrollerKnobStyleDark: + [_verticalScroller unsetThemeState:CPThemeStateScrollerKnobLight]; + [_verticalScroller setThemeState:CPThemeStateScrollerKnobDark]; + break; + default: + [_verticalScroller unsetThemeState:CPThemeStateScrollerKnobLight]; + [_verticalScroller unsetThemeState:CPThemeStateScrollerKnobDark]; + } } if (_scrollerStyle == CPScrollerStyleOverlay) @@ -1246,7 +1291,8 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", CPScrollViewCornerViewKey = @"CPScrollViewCornerViewKey", CPScrollViewBottomCornerViewKey = @"CPScrollViewBottomCornerViewKey", CPScrollViewBorderTypeKey = @"CPScrollViewBorderTypeKey", - CPScrollViewScrollerStyleKey = @"CPScrollViewScrollerStyleKey"; + CPScrollViewScrollerStyleKey = @"CPScrollViewScrollerStyleKey", + CPScrollViewScrollerKnobStyleKey = @"CPScrollViewScrollerKnobStyleKey"; @implementation CPScrollView (CPCoding) @@ -1289,6 +1335,7 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", [[CPRunLoop currentRunLoop] performSelector:@selector(_updateCornerAndHeaderView) target:self argument:_contentView order:0 modes:[CPDefaultRunLoopMode]]; [self setScrollerStyle:[aCoder decodeIntForKey:CPScrollViewScrollerStyleKey] || CPScrollerStyleOverlay]; + [self setScrollerKnobStyle:[aCoder decodeIntForKey:CPScrollViewScrollerKnobStyleKey] || CPScrollerKnobStyleDark]; } return self; @@ -1319,6 +1366,7 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", [aCoder encodeInt:_borderType forKey:CPScrollViewBorderTypeKey]; [aCoder encodeInt:_scrollerStyle forKey:CPScrollViewScrollerStyleKey]; + [aCoder encodeInt:_scrollerKnobStyle forKey:CPScrollViewScrollerKnobStyleKey]; } @end diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index bfab73fa4..b3855e4a9 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -56,10 +56,16 @@ NAMES_FOR_PARTS[CPScrollerKnobSlot] = @"knob-slot"; NAMES_FOR_PARTS[CPScrollerKnob] = @"knob"; -CPScrollerStyleLegacy = 1; -CPScrollerStyleOverlay = 2; +CPScrollerStyleLegacy = 0; +CPScrollerStyleOverlay = 1; -CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); +CPScrollerKnobStyleDefault = 0; +CPScrollerKnobStyleDark = 1; +CPScrollerKnobStyleLight = 2; + +CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); +CPThemeStateScrollerKnobLight = CPThemeState("scroller-knob-light"); +CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); @implementation CPScroller : CPControl @@ -99,7 +105,7 @@ CPThemeStateScrollViewLegacy = CPThemeState("scroller-style-legacy"); @"knob-slot-color": [CPNull null], @"decrement-line-color": [CPNull null], @"increment-line-color": [CPNull null], - @"knob-color": [CPColor grayColor], + @"knob-color": [CPNull null], @"decrement-line-size":_CGSizeMakeZero(), @"increment-line-size":_CGSizeMakeZero(), @"track-inset":_CGInsetMakeZero(), diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png index de67709ae1b0a5a608faac91ce6fce77b1b82263..20f79d97d3a6ea35629124542f86dc4670eb18f3 100644 GIT binary patch delta 55 zcmXS}p5SRD>*?YcQgJKk$N&HPt%Q}87fT5<3oHgnPbQgJIOAtB*IDw7b81!n^TGXs|gLzLmk(hLS5@O1TaS?83{1OQy{ B4XXeE diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png new file mode 100644 index 0000000000000000000000000000000000000000..de67709ae1b0a5a608faac91ce6fce77b1b82263 GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrJ!3HEx`lwF8U}fi7AzZCsS>JibOqK978H@B_$*zd`M*y;<4atU|?q8@?eNEJXx9nRKVcr L>gTe~DWM4f<|G{y literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png new file mode 100644 index 0000000000000000000000000000000000000000..2cd8ec9a5400e2c086410fb7cfa5ac4c2e83626c GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INJ*BsMwA5Sr(oR*w%%8w~~irzJTs@TTyw r8$B29`7Ga&-y|XCpu>>Fz#_rmUBBXhi(^Q|t)!F&233Wy6h@&Uhc&!HiA+hpD|BWYZaedn@38^%M}389 kEroWBAK4Y2F>x3$)FrVTjtrW;ivb8cUHx3vIVCg!0AJV}Z~y=R diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png new file mode 100644 index 0000000000000000000000000000000000000000..268530166ff581cbb5b6a5f0970008df2f08aa9f GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrJ!3HEx`lwF8U}fi7AzZCsS>JibOqK978H@CH?sSf4{ykv%mut1|}YcoTtp;c0Y5XfC?Bq MUHx3vIVCg!05zE(`~Uy| literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png new file mode 100644 index 0000000000000000000000000000000000000000..37859baa0e894bd537aa078c29c1c43eadde7cb3 GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INJ*BsMwA5SrgTe~DWM4f>P#(R literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png index d1ad107dc69f050fd4ed77952d2bbe0ddf6c8cd4..13111dc351f2678502f29b4ceab3664e11b88dc3 100644 GIT binary patch delta 109 zcmV-z0FwWb0j~j&NoG+=L_t(|+G6BXhi(^Q|t)#SsgaU>~@eY4xvU+@A+Gr^7KP}0Dfj5PZ-RQY+&u96L j{3Z!82OWka1{Mhh?=rSs|7<>WGXR07tDnm{r-UW|ig_Df diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png new file mode 100644 index 0000000000000000000000000000000000000000..78273eeaf5c7ab521b68ce01148ca1bed624cbca GIT binary patch literal 115 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrJ!3HEx`lwF8U}fi7AzZCsS>JibOqK978H@CH?sSf4`J4v%mut1|}Yc3>{{J%WfSHfC?Bq MUHx3vIVCg!04b^;hX4Qo literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png new file mode 100644 index 0000000000000000000000000000000000000000..e16c6df0ce1828c557f326b2d2b30ba8838bb60b GIT binary patch literal 146 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INJ*BsMwA5Sr r+;iq<^O;KK#|BQmkJ*wG8-NzoYjI?~z1pM?)X(7Q>gTe~DWM4foJlPx literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-right.png new file mode 100644 index 0000000000000000000000000000000000000000..695d11d87ed52dc574be35c5eb64a2d11fbe0a6e GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y}!3HGH?)<(INJ*BsMwA5Sr<$f#3=?YkH5UcVk_Q^V;OXk;vd$@?2>^>@EC>Jq literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-legacy-vertical-knob-bottom.png index 0d925df8106f2c3535bba0128d96c4af69e6f965..f2a83216b459146eb11bef5021d944fdef511d27 100644 GIT binary patch delta 54 zcmbQsIFoULC!_U5FIBA+KC@o^h94#Z``bU=cm8>Pq9`Ma1Vf81-_KU9Gu{k9;OXk; Jvd$@?2>=p{672v0 delta 58 zcmbQqIG1sPC!_sDFI7De?hQ9M7O6Buuy(LE{;(Ce&-h6EL>40x55u1aLYqt-b`~=L Nfv2mV%Q~loCICEh6LJ6m diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png index 6bb0e9a69f91aef382fedc382ca383d812408603..fa0e62666f20b73680feb7dbd68da8b571ccd61a 100644 GIT binary patch delta 102 zcmV-s0Ga=e0jL3xNnc7yL_t(|+G70w|G$E^wzkr>YuC6Lpg>Jc?c2?pH}5h5*>B?F z;y!3-XnX@nfM^gO$b8EP)Cm&f0b(H_<^QAfzW@Xn00HP3=$XLIzW@LL07*qo IM6N<$f)jZzg#Z8m delta 76 zcmZ3%*vB}*)78M!#WAGfR#Hkr!UpyvJ2syWotz$bQV#It88Ub3D}*|nVLdX(;g4L$ gdWMhO4Ghc-mnX2#Ws98gnE?nqUHx3vIVCg!04o0*H2?qr diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png index 2a876c1b7a17fc0985d1e59def7500c7564b6901..fe58cadfd0e47f94f8d84c5dd59e662147999038 100644 GIT binary patch delta 51 zcmXRYpWvw{>FMGaQgJKk&;S4Xt(27)OEF6^blqp-Fknc0!>%TnZMlj82s~Z=T-G@y GGywqcP!V4M delta 44 ycmXRfnBb`{H$UuCLRX%{S5w9-J+5VK;Y@>=d#Wzp$Py(XAM#S diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..6bb0e9a69f91aef382fedc382ca383d812408603 GIT binary patch literal 142 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQqm978H@C8Z=JY+z5aWApjY$?0(?XK#XZXn7z`)FKc>?=fw#XTufqEG{UHx3vIVCg!07+#kX8-^I literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png new file mode 100644 index 0000000000000000000000000000000000000000..2a876c1b7a17fc0985d1e59def7500c7564b6901 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)O!3HFSxVM}GQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=eYCT;XLn>}1r6eSLNIk&Fz{JDAzMsLrs#{bND9hmK>gTe~ HDWM4fj<+0? literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png new file mode 100644 index 0000000000000000000000000000000000000000..63fd8b21063fbeef041e4111a24dfdc8dddd1dc8 GIT binary patch literal 141 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jiu65Q978H@C8abl7%GG@C)FwZ<2bUt;fJX51OfIWV>X|H mHc5{e42ITXo^lNg%na}Tu%ulpix&ZEW$<+Mb6Mw<&;$U%cPBdl literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f40d70d9f2c9abbc51604a2c14a8dc0fb65ed553 GIT binary patch literal 144 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>Jii|v6978H@CH?vTf4?m=GqXIi+K(eFDtSf;?As+8tsHqc p6~Y*k92M&LkCZq3V0CC_E)O!3HFSxVM}GQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=eYCT;XLn>}1{rUfYzdkb`gFpg9L>{w``j090Kv@P)S3j3^ HP6_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQtn978H@CH?vT-=0~ZgK?vjz-Q)hQ3KH+K2V&O5vWr^S65f*%9Sf1-C&@mruOaT&6{@t0t^63#1?l047oi30000< KMNUMnLSTZ3hbX21 delta 75 zcmZ3**vmM<(?#FY#WAGfR#Hj>gP}qgb5fncKaL~Y8-9o?PY_^FGG_BBXp{7q!C+`D e<|)^}z|8RO4@=s$vUm{&An_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQtn978H@CH?vTf4>bgGqW|b+K-bgD))>M*xySuS~>E_ pDTpy8@hSXcoW$@*pMjB$;Y%X-&la_%hk=?IJYD@<);T3K0RUf1DNO(X literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png new file mode 100644 index 0000000000000000000000000000000000000000..c9309c738777424a026ec272263f17da5c0fa2e8 GIT binary patch literal 112 zcmeAS@N?(olHy`uVBq!ia0vp^>_E)O!3HFSxVM}GQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS=eYCT;XLn>}1{rUfYzZ5ecgFpg9$b4qiE!8}SfU*ppu6{1- HoD!M_E)S!3HGb4~rfJQj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JiVQqm978H@CH?vT-=0~ZfO(^Vz-H!;{t9*6N8%+LCn<1d nviW?N!|BmskihQ5z{tkXrOIVwCX;josF%Uh)z4*}Q$iB}Ee Date: Wed, 5 Oct 2011 11:34:06 +0200 Subject: [PATCH 09/22] add a timer before fading out the scroller when overed --- AppKit/CPScroller.j | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index b3855e4a9..81ccbd676 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -87,6 +87,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); BOOL _allowFadingOut @accessors(getter=allowFadingOut); int _style; + CPTimer _timerFadeOut; } @@ -284,6 +285,13 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); [self setFrame:frame]; } +/*! @ignore */ +- (void)_performFadeOut:(CPTimer)aTimer +{ + [self fadeOut]; + _timerFadeOut = nil; +} + #pragma mark - #pragma mark Utilities @@ -721,6 +729,9 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); - (void)mouseEntered:(CPEvent)anEvent { + if (_timerFadeOut) + [_timerFadeOut invalidate]; + _allowFadingOut = NO; [self fadeIn]; [self setThemeState:CPThemeStateSelected]; @@ -729,7 +740,10 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); - (void)mouseExited:(CPEvent)anEvent { _allowFadingOut = YES; - [self fadeOut]; + + if (_timerFadeOut) + [_timerFadeOut invalidate]; + _timerFadeOut = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_performFadeOut:) userInfo:nil repeats:NO]; } From e3565bdc7dddf5de7006063b2f20f1b6b4762250 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 15:57:18 +0200 Subject: [PATCH 10/22] fix visual glitch when scroller are hidden and overed --- AppKit/CPScroller.j | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 81ccbd676..4844a550d 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -732,6 +732,9 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); if (_timerFadeOut) [_timerFadeOut invalidate]; + if (![self isEnabled]) + return; + _allowFadingOut = NO; [self fadeIn]; [self setThemeState:CPThemeStateSelected]; @@ -739,6 +742,12 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); - (void)mouseExited:(CPEvent)anEvent { + if ([self isHidden]) + return; + + if (![self isEnabled]) + return; + _allowFadingOut = YES; if (_timerFadeOut) From 76e2a2b8caa6bf34cf2d404ebe3e6c546dae2bfc Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 16:24:12 +0200 Subject: [PATCH 11/22] support new properties in nib2cib --- Tools/nib2cib/NSScrollView.j | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Tools/nib2cib/NSScrollView.j b/Tools/nib2cib/NSScrollView.j index 43b6d5e8f..f2af67f1e 100644 --- a/Tools/nib2cib/NSScrollView.j +++ b/Tools/nib2cib/NSScrollView.j @@ -40,7 +40,8 @@ _bottomCornerView = [[CPView alloc] init]; [self addSubview:_bottomCornerView]; - + [self setScrollerKnobStyle:[aCoder decodeObjectForKey:"NSScrollerKnobStyle"] || CPScrollerKnobStyleDefault]; + CPLogPrint([self scrollerKnobStyle]); _hasVerticalScroller = !!(flags & (1 << 4)); _hasHorizontalScroller = !!(flags & (1 << 5)); _autohidesScrollers = !!(flags & (1 << 9)); From 422e940bc710cfbd8268a7598644ef2f26671a4e Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 16:24:37 +0200 Subject: [PATCH 12/22] use default knob style as default. logic. --- AppKit/CPScrollView.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPScrollView.j b/AppKit/CPScrollView.j index a1c25f1ff..aee3597c3 100644 --- a/AppKit/CPScrollView.j +++ b/AppKit/CPScrollView.j @@ -175,7 +175,7 @@ var TIMER_INTERVAL = 0.2, [self setHasVerticalScroller:YES]; [self setHasHorizontalScroller:YES]; - _scrollerKnobStyle = CPScrollerKnobStyleDark; + _scrollerKnobStyle = CPScrollerKnobStyleDefault; [self setScrollerStyle:CPScrollerStyleOverlay]; _delegate = nil; @@ -1335,7 +1335,7 @@ var CPScrollViewContentViewKey = @"CPScrollViewContentView", [[CPRunLoop currentRunLoop] performSelector:@selector(_updateCornerAndHeaderView) target:self argument:_contentView order:0 modes:[CPDefaultRunLoopMode]]; [self setScrollerStyle:[aCoder decodeIntForKey:CPScrollViewScrollerStyleKey] || CPScrollerStyleOverlay]; - [self setScrollerKnobStyle:[aCoder decodeIntForKey:CPScrollViewScrollerKnobStyleKey] || CPScrollerKnobStyleDark]; + [self setScrollerKnobStyle:[aCoder decodeIntForKey:CPScrollViewScrollerKnobStyleKey] || CPScrollerKnobStyleDefault]; } return self; From 4b1ce8bc0b3e74c5e61e4cf3ab739144ef8000fa Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 16:55:08 +0200 Subject: [PATCH 13/22] better art for default knob style --- .../scroller-horizontal-knob-center.png | Bin 123 -> 123 bytes .../scroller-horizontal-knob-dark-center.png | Bin 115 -> 120 bytes .../scroller-horizontal-knob-dark-left.png | Bin 146 -> 162 bytes .../scroller-horizontal-knob-dark-right.png | Bin 146 -> 155 bytes .../scroller-horizontal-knob-left.png | Bin 177 -> 205 bytes .../scroller-horizontal-knob-light-center.png | Bin 115 -> 122 bytes .../scroller-horizontal-knob-light-left.png | Bin 146 -> 158 bytes .../scroller-horizontal-knob-light-right.png | Bin 149 -> 157 bytes .../scroller-horizontal-knob-right.png | Bin 175 -> 208 bytes .../scroller-horizontal-track-center.png | Bin 139 -> 147 bytes .../scroller-horizontal-track-dark-center.png | Bin 0 -> 147 bytes .../scroller-horizontal-track-dark-left.png | Bin 0 -> 185 bytes .../scroller-horizontal-track-dark-right.png | Bin 0 -> 179 bytes .../scroller-horizontal-track-left.png | Bin 169 -> 220 bytes ...scroller-horizontal-track-light-center.png | Bin 115 -> 122 bytes .../scroller-horizontal-track-light-left.png | Bin 146 -> 158 bytes .../scroller-horizontal-track-light-right.png | Bin 147 -> 152 bytes .../scroller-horizontal-track-right.png | Bin 171 -> 218 bytes .../scroller-vertical-knob-bottom.png | Bin 168 -> 189 bytes .../scroller-vertical-knob-center.png | Bin 119 -> 119 bytes .../scroller-vertical-knob-dark-bottom.png | Bin 142 -> 160 bytes .../scroller-vertical-knob-dark-center.png | Bin 112 -> 119 bytes .../scroller-vertical-knob-dark-top.png | Bin 141 -> 163 bytes .../scroller-vertical-knob-light-bottom.png | Bin 144 -> 154 bytes .../scroller-vertical-knob-light-center.png | Bin 112 -> 116 bytes .../scroller-vertical-knob-light-top.png | Bin 143 -> 154 bytes .../Resources/scroller-vertical-knob-top.png | Bin 170 -> 186 bytes .../scroller-vertical-track-bottom.png | Bin 172 -> 213 bytes .../scroller-vertical-track-center.png | Bin 133 -> 145 bytes .../scroller-vertical-track-dark-bottom.png | Bin 0 -> 194 bytes .../scroller-vertical-track-dark-center.png | Bin 0 -> 145 bytes .../scroller-vertical-track-dark-top.png | Bin 0 -> 178 bytes .../scroller-vertical-track-left.png | Bin 0 -> 220 bytes .../scroller-vertical-track-light-bottom.png | Bin 143 -> 154 bytes .../scroller-vertical-track-light-center.png | Bin 112 -> 116 bytes .../scroller-vertical-track-light-top.png | Bin 142 -> 151 bytes .../scroller-vertical-track-right.png | Bin 0 -> 214 bytes .../Resources/scroller-vertical-track-top.png | Bin 171 -> 204 bytes AppKit/Themes/Aristo/ThemeDescriptors.j | 86 +++++++++++------- 39 files changed, 53 insertions(+), 33 deletions(-) create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-center.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-top.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png create mode 100644 AppKit/Themes/Aristo/Resources/scroller-vertical-track-right.png diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-center.png index 20f79d97d3a6ea35629124542f86dc4670eb18f3..4ebac465a9c6bd8347205b29211e84ce67a927dc 100644 GIT binary patch delta 48 zcmb=fo*>S}$-&0J!0_44?a4$%TiFL{4X^STStJ;yzhgIjGa+R%P>#XV)z4*}Q$iB} DX><=y delta 48 zcmb=fo*>S}&cVjOz;Mz>eab{dTiFG|4mYD27}*%geAo^99hj4VatxlXelF{r5}E)W CObh1# diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-center.png index de67709ae1b0a5a608faac91ce6fce77b1b82263..7ed9e6f3aca1081c2a6a64cb3275197d8621ea9d 100644 GIT binary patch delta 66 zcmXS}m>|x@$-&0J!0_44?a4$%4Sgw37srr_TS-6u|F>u6_+ixOF^7fOL)M{zkzr~p VTgZxSe04z844$rjF6*2UngGee6S}&cVjOz;Mz>eab{d4J}bm7srr_TS*BC2_I6Kgm^4C8yJ`wxI7r53{RG3 Q02MNLy85}Sb4q9e0PmO(KL7v# diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-dark-left.png index 2cd8ec9a5400e2c086410fb7cfa5ac4c2e83626c..dbc02bf1f3f1310ee52154e57bcce800f5e65c6c 100644 GIT binary patch delta 131 zcmbQlxQJ1)Gr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}w>(#6xoF{I*F(x3nT z?U{`dT#~dIH!5*YQD#4KOMy)|#6fr&kIDg_BRMCS>KlJp`!q;;{bx$@OlkCY_`}$- gQ{v)XMu7wdnIi7}l^R>4f#x!Jy85}Sb4q9e01gT#mH+?% delta 115 zcmZ3)IEhiQGr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^o+h3yjv*Ddl2RHN zR29Nf7=?-)*6<1?G9~%0(3x?#?aWWU#|F$F^%bVI6xuO$kx-vF{I*F(x3nT z?U}6#7?Lyvm{m@)EU9d~A<^OL*yQ7(WqN_t;sUFkB6q`@U7V9QG9)q1(CvBgj)B8~ Zq0@)|lcw~ZWk3TNJYD@<);T3K0RZ7jByIoz delta 115 zcmbQuIEhiQGr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^o+h3yjv*DdlF||q z3K$;6JN%i+>hXbTqoKh6v?K=x-V{D|qvygspXEF9nbQqEtSR@#{%h-1Pv-#8w PG>5^{)z4*}Q$iB}=X@cE diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-left.png index d40398d1d1c92e3ba10b48b740bc39ba74f0985a..4bbacbb9c97b119016a44f48ad26a011bdc35961 100644 GIT binary patch delta 175 zcmdnUc$QJIGr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}yXKHt;DF{I*F(x3nT z?U@A(m^La1a2pspG(==&ty;BV!v-nlfL0Gj$41S73*s%3jZCL(Y;0b|@2^W`(@d@U z|Ib#thgnQOMC6aEg2D%BJ%%Ilmo8tve~87Qt!YC=ef|E4lO|2#R=y&uaDcst-JyYz aAx}l!Wp%gT6rd9rJYD@*UDi1zGywoei#gN) delta 146 zcmX@hxRFt@Gr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^8Nr?|jv*DdlK%Yv zZ_g~i(PSVz;eo!6PKcnmcz7zyDUH)7PiorM{h87H^6&5OYZTZ#bSE!Z@Ic?y^{Bi8 wU$L|E;rInX=boRRZ*1t~`oj@=@z+@drv)90b0Z0>FVdQ&MBb@0DV0)6aWAK diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-center.png index 268530166ff581cbb5b6a5f0970008df2f08aa9f..4ac50a74a15889b6ec83d5ddf858aa871c83f81c 100644 GIT binary patch delta 68 zcmXS}njp@_$-&0J!0_44?a4$%4MQ1E7srr_TS-6u|F>rrW@c{I??^b{Y0z+mkwt=G Y>Q%O|^Q%*40M#>iy85}Sb4q9e0RH_J*#H0l delta 61 zcmb;_o*>S}&cVjOz;Mz>eab{d4J}bm7srr_TS-6u|KG1K%q;Lgg@K8OA?GP`xZTg3 QD4;?HPgg&ebxsLQ06&KlDF6Tf diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-left.png index 37859baa0e894bd537aa078c29c1c43eadde7cb3..f9c28c326c2b5136d8dcc2c69580c74021520a47 100644 GIT binary patch delta 127 zcmbQlIFC`WGr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}w>)WOrmF{I*F(x3nT z?U{`d9Fw#eH!Ar!@O5l;rjO+*i~>6tg%eyhh4FNRN?yFn bD3HM5<-&6z#>MD0&`btTS3j3^P65^{)z4*}Q$iB}9H%2D diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-light-right.png index 43448337137638f3238d7e4cba27ad613c9a0089..3de61a69d23a4dab365d8aa3dd1355de77fef10a 100644 GIT binary patch delta 126 zcmbQrIG0heGr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}w>#NN}zF{I*F(x3nT z?U{`dn3C8Pra6f{U`2QB_L{!ly7aNVJXxx=1;MS@|EgMioj TzN`8`qZmA0{an^LB{Ts5PPijQ diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-knob-right.png index 13111dc351f2678502f29b4ceab3664e11b88dc3..93ae51239cba5004ca16a43c860a97d1952b3438 100644 GIT binary patch delta 178 zcmZ3_c!5!|Gr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}yXzR1(XF{I*F(vScD z_cIA_GZ->+7<+nnthj#l>PiCxgAQYdMtu(dStch1Ry6esY8_BeSO5O_;o)}knF*)t z>i(QyS`zVq>C&Z3_KjEcH!uhb3p@Mzo{d)c%-r18*7kW*>gg|yY+a3OSa0ewAF(kg dXJCxSmn5Gr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^X@Q)}Bp?C* zrjP&;SKo1ScdpEIRTYW|WM*i0QFrsrjPt)IzyKvQ5CjX-k2nAT002ovPDHLkV1mN> BAWZ-O delta 87 zcmV-d0I2_y0gC~U7YYXm1^@s6$xJ7dks&BTElET{RCwBAkdTm2W75>rWMBfa7?{}E t*%_FA{`|?n^y0+}2Ie0>eh32u7yxLz3G(H-Z!!P?002ovPDHLkV1kw)A^iXV diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-center.png new file mode 100644 index 0000000000000000000000000000000000000000..fd0543a46d90f37fde494ccf160963e435c8bfdc GIT binary patch literal 147 zcmeAS@N?(olHy`uVBq!ia0vp^j6lrE!3HEhySY69Qj#UE5hcO-X(i=}MX3yqDfvmM z3ZA)%>8U}fi7AzZCsS>JicCFS978H@CH?sS-=4X-rKLq`^0H-W%)%3n9yoID+_?i^ uK0o(oTPCg_XJGLE$4BQGj7#_w4lt-N@V`0vaH}EE00vK2KbLh*2~7Z#OEW$I literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-left.png new file mode 100644 index 0000000000000000000000000000000000000000..58f1271697a58040c11bbdb6f89cdd650d9b1d75 GIT binary patch literal 185 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c3!3HEn^LrNnDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MbVxvjv*DdV*DKW8VooVYwWIYnEUU4<85v+p_D@J9+f2l zQ4H_=?nk6EKH#`fX(CmydesMk7$qmm^hYz4I+hA+swUNMkIL??^7A$|)>}Ek8 gqx!#k8zvqGuTbgvm$Xhe0Igy0boFyt=akR{0CpNY761SM literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-dark-right.png new file mode 100644 index 0000000000000000000000000000000000000000..7df58e92b56496ef1d1e8fc8de85ae1f3645ee04 GIT binary patch literal 179 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c3!3HEn^LrNnDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MWLQ9jv*DdV)_iZ4g_#Ge+^#3aW{rbw(9@po6IkgLJNL2 zvMUCPC^MDqJsIk{amGxe9fA{A$0`|3&J`1MoM>fbU|jJ1)3wG`=T4bF^E|h+>9_oT b24)7CGqMvi7q+_tEnx6;^>bP0l+XkKcP>2c literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-left.png index c659f3e551cdb38e6984bb4647b59ea82f416d31..814f29f61257a7f3024079eb0d30c2d08ce0c95c 100644 GIT binary patch delta 190 zcmV;v073t$0o(y0iBL{Q4GJ0x0000DNk~Le00004000092nGNE02ObIpphXce|||s zK~#9!Opd(@10fKEcMY1K6VxO{2-u{!Hxpam#0RyoG8|%JcHxQ)e8mjIFgWLgU1#DX zcC&;Kt~U};P zH5hQXTwKVTlhf37@BciOl~;Bs{LB}-Fh|&>gyBYXYuKGtr`A47N}C}m_N%F*hNJxW puDA-LVi%Sd|F>PO*vG`faEwvpi^{*deL&+GJYD@<);T3K0RUQiGp_&u diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-center.png index 78273eeaf5c7ab521b68ce01148ca1bed624cbca..8454e45d40c9ac15a138a1c410eadac1469190a1 100644 GIT binary patch delta 68 zcmXS}njp@_$-&0J!0_44?a4$%4MQ1E7srr_TS-6u|F>rrW@c`d>PR@?Y0z+mkwt=G XLL{61rbFt=K=llsu6{1-oD!M<=5Q5c delta 61 zcmb;_o*>S}&cVjOz;Mz>eab{d4J}bm7srr_TS-6u|KBeq%q;Lgg@K8OAw!4R;IdoC Q1E4|%Pgg&ebxsLQ05g~pv;Y7A diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-light-left.png index e16c6df0ce1828c557f326b2d2b30ba8838bb60b..1befa86cd0396b5114a0b178eace5522fdba418f 100644 GIT binary patch delta 127 zcmbQlIFC`WGr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}w>)WOrmF{I*F(x3nT z?U{`d9Fw@2HZu4$$alCp@~Ew7;P8?3Xb|j}Ig!<2**`}yhDLJ(MmLr0osAJ4f_G&Z b7}*$<@A2e3yH@xGXeNWFtDnm{r-UW|6J8{8 delta 115 zcmbQoIEhiQGr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^o+h3yjv*DdlK%Yv zZ_g~i!L*Tqd%^?uq`(Or!UEj}4vZa#d(Ql9K2yp3*ucs6F^afqT~h|B}Y-2C4TOe((zXXW%qgw3}Js0K@6m W+}7uQR2~DG#^CAd=d#Wzp$P!MuqIvr delta 116 zcmbQiIGItgGr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^UZ$Qdjv*Ddl79UE zzn@9qGm{}RH#0M{w179$$9Oe176Hd+8x)G`l#1^)@%&&rlHc%y-JyYzVL~mx=Axik R@<4+aJYD@<);T3K0RR9=A>#l5 diff --git a/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png b/AppKit/Themes/Aristo/Resources/scroller-horizontal-track-right.png index 18849cea2024a0cd4c08cc2cef7613c82ee181b8..91f415300ad0d0b6fe49ba919b6bd5277e6dad3e 100644 GIT binary patch delta 188 zcmZ3@c#Bc7Gr-TCmrII^fq{Y7)59eQNV5PjCkGpl6wU8lFi}yXzQ)tVF{I*_NuM_t zv!Z}YH{XmC4t5?L3LGb$_B3w)Y;o_9^Uf;<7OE=U?w7x2tTKGQXEOIer!`yEp8sLk zAUJ1+UH01aWS$_e_=@+;t`GhM+;h=vbMTltiPyfpRaX&jNb ozdtp4>+0XT&iwCpZeV1H^b)dLYVN&bG0;H_p00i_>zopr065M@5&!@I delta 140 zcmcb`xSCP1Gr-TCmrII^fq{Y7)59eQNHYU5I|mz(JiGJz%87~^Nxq&gjv*Ddbb36w z8XS07su!_vo;exA!vF7oYMml?4`)OGZ)qk&#i^awm^wMaW0H9kLyz_g886l?Gcw*$ p-JUC0n3i_@cJXxg{k2Ry44dzXoaS_Tv;}AZgQu&X%Q~loCIA>kEi(WB diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-bottom.png index fa0e62666f20b73680feb7dbd68da8b571ccd61a..df32cc98144631439cb902b14449034006dac54f 100644 GIT binary patch delta 158 zcmZ3%xR+6}Gr-TCmrII^fq{Y7)59eQNOJ-)3kMsJjNunOH&IceB;M1-F{I*F(x3nT z_cu+MGUe9i=jU%qUT9ddSJc^8ES!!~;x5Mn?CVo=7&RHEyWz_U_)e zXwf3=fD7U-%|8?hC)g-=G%(pIh%qGjDg5IzYixWd?7^gPfI)AO#w^awFQ)>nWbkzL Kb6Mw<&;$V7=sc_d delta 137 zcmdnXxPno!Gr-TCmrII^fq{Y7)59eQNV5YmGY1=xj6W=TbfTh0yqBkoV@SoVq(A@v z?{C_+ZQG@-+1GbSE^zSmeS7=tZ1eXFVdQ&MBb@0Hf?P#{d8T diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-center.png index fe58cadfd0e47f94f8d84c5dd59e662147999038..e193dfde38a9e1635bf89487d4af8e775e20e913 100644 GIT binary patch delta 68 zcmXRfSL_V%bLZuf;$mQ6;Pv!y2?ElbK+MR&1|)e7wbV{jw36Xtn6jT$Ac3JKgERLtq&b0@g@X-9#_)@to2aM}?&Rs>7*cU7>CgZF z_RPx4i*1>indO<)ey~ijKf&_!PRaqkyhe^0i^Lsjq&n_9|9rpj&vOMn?hb}X&d?uB evkMs**%-_%gii^vepv)GmBG{1&t;ucLK6VOgeJxS delta 111 zcmZ3$*vF{Y8Q|y6%O%Cdz`(%k>ERLtq}hR(nS%{T#vc|vI#E%>)xgumF{I*FQc6O? z2KFR7HlGijoE~>l4)Em}GI#1LggTsIJu=7Pk6g!khL7A049pCdC$P_Di=6QpXa<9) LtDnm{r-UW|8s#8B diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-center.png index 2a876c1b7a17fc0985d1e59def7500c7564b6901..c285ecd817aa1a8bf310fe4ca2c8157b0b0c13ff 100644 GIT binary patch delta 86 zcmXRYSL_V%bLZuf;$mQ6;Pv!y2?ElbK+MR&1|)e7wbV{j)XEaktaVse$A>l*n d0Y(NU9tQUP4E|N!qLM&W44$rjF6*2UngD@I5(WSO diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-dark-top.png index 63fd8b21063fbeef041e4111a24dfdc8dddd1dc8..b4de055ffaa1fd3cc154beee1c5c3e9bfc5d8aaf 100644 GIT binary patch delta 132 zcmeBWT+FE08Q|y6%O%Cdz`(%k>ERLtq&b0@g@X-9#_)@to2aM}DT}N z_RNZB4l%Iw^z#5) hz^*V^l7WebVgG6+28-=!Qb2ERLtq}hR(nS%{T#vc|vI#E%>Mc>oKF{I*FQc44Z zp+XpQQk}v-jw9O}euyeh5MWO-X7ed%lk}LuU}!DoDc8Wj%<%3HOWL)vcoCox44$rj JF6*2UngE@*9Tflo diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-bottom.png index f40d70d9f2c9abbc51604a2c14a8dc0fb65ed553..3085360e152e7ec162aa7e349d4bfc2e30b06d9f 100644 GIT binary patch delta 123 zcmbQhIEzuSGr-TCmrII^fq{Y7)59eQNOJ-)3kMsJjNunOH&Ia|(8klnF{I*F(x3nT z?U@B`FdND%72+7iH?`PGIbd;I5aRa Yv?%kQoqlAR0?<4LPgg&ebxsLQ02Q?+TmS$7 delta 113 zcmbQmIDt{IGr-TCmrII^fq{Y7)59eQNV5YmGY1=xj6W=TbfTh$yOF1hV@SoVq(A@v z@3&=UW|n7G`*DOtCC?~*k&^_@h}wmGXLjptw;l^WbkzLb6Mw<&;$S--4)^h delta 79 zcmXRZQ0xrwbLZuf;$mQ6;Pv!y2?EmWK+MR&1|)^Jx15`(sG%<8>EaktaVzQ1|Nr~- enfVw55*Q-#n0?fLOtA;5V(@hJb6Mw<&;$UjQ4`|; diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-light-top.png index 7bdb26e43a47d7e0d5a6382263a29fa3dcf1ec1b..ddaea84ca920941d8feb47d668ff3a09f672b41d 100644 GIT binary patch delta 123 zcmeBYoW-cv8Q|y6%O%Cdz`(%k>ERLtq&b0@g@X-9#_)@to2aM}XyfVP7*cU7>DT}N z_RNZB4mB_&Ijmtj^2gziU`IaVN9_qL!Xb?o0<)PnDunn5oSNERLtq}hR(nS%{T#vc|vI#E%>&Ct`uF{I*F(x3nT z?U@BS7&l4@d}jXWuCR~w$a;y!Nsk=bB$?GL4zsA3NNiv>ZD3$#n6!~AEzMXl9%u-I Mr>mdKI;Vst09A4yMgRZ+ diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-knob-top.png index 0f2b1b61c12f0dc9b97779751e5581378f4de1a9..52958547d9026e463df97b1baef794e4be20cf08 100644 GIT binary patch delta 155 zcmZ3*xQkJ-Gr-TCmrII^fq{Y7)59eQNOJ-)3kMsJjNunOH&IceFvioxF{I*F(y#yj z?U_YBGj5a-SnZf;H$z64nWe*jhJmB2r>E!K)>c=PbG_U{w delta 139 zcmdnRxQbD+Gr-TCmrII^fq{Y7)59eQNV5YmGY1=xj6W=TbfTh0qK~JGV@SoVq(A@v z+cOIkFmE&vC}#M`uTaN*Bz~rYkg%Fh!1e3b!_yKI1DP)>*agg)F1RAtF+4o{<*BLK p3U?D0EL-;N?X$D9%Ndz?7`%>%l{53~v;~^a;OXk;vd$@?2>>FRE#?3K diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-bottom.png index 0fb67ce54f75bc95471861be55607cd81f54e7b4..c7d0892975f084b1706ad5ec4efdf14d9a25bb1f 100644 GIT binary patch delta 183 zcmV;o07(C=0o4H^iBL{Q4GJ0x0000DNk~Le00009000042nGNE09+3h&XFM~e|Jel zK~#9!ER4Yl!yphu$E0AO9s-`~%^dP=-uwx_RKZ)lD4{}w-IXr99d?EtF~-=9F}l{e zYONuqMDHD?6ey+cob!7D@bTVXtu>^S5M!K5PjJp%oP(N}X9(eCtv$#*S@~w4bHVFB llGum`@tqAo=in#60PX8Lp}$%F4fp^6002ovPDHLkV1nKOOdS9K delta 141 zcmcc0xQ0=&Gr-TCmrII^fq{Y7)59eQNV5YmGY1=xj6W=TbfTh0vY)4mV@Sm4Em1kqv8kUb|{8ERLtq&b0@k%J9L@*HZZov5hcVeIMR7*cVIL6zaw zf5!j+{|ie>N(yUgYBESjNHDOovorks`IF(rix&*nuU}_){`~n{CLV_OZv=!=*$SP3 P#xQug`njxgN@xNAZjd4J delta 102 zcmbQp*vhEb8Q|y6%O%Cdz`(%k>ERLtq}hR(k%J9L3UO~aH&Ic;M%~lJF{I*F(v%4k z0xn;s-GCLV_H8=M6J68io?tqh*7elF{r5}E*u CW*`9o diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-dark-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..e71064c82f69c910fa4d1801ff4b17bb4850dbfc GIT binary patch literal 194 zcmeAS@N?(olHy`uVBq!ia0vp^oIuRN!3HE__(jhFDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MJb*xjv*Dda(XuMH7M}7tUq?4wfF4N|NnKw%_B27QW?d$hGWp3Ap&62^y5<;rX=eT1`uMW4lKWawMV2r343B-V*`1r`);;%j qS6b16pZS#^>vVMkJ}eGzU}R9cVDSr z1<%~X^wgl##FWaylc_d9MaG^kjv*Dd7*rW<{b&6D|38DIq@5s+PHNWP&DSr z1<%~X^wgl##FWaylc_d9MIoLpjv*DdT6#8eH8}7%Uv^#*5VK|W|NoV9ZQA`z+0}PQ zR@itsMTb7@XEjzzy5cxRg_G~y#jWQbED3jOd%m~#-`^)`Y~}5%l#B%hU+jJVW}SNj aBZG>hcHcf`p-({b89ZJ6T-G@yGywp4sXe*? literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-left.png new file mode 100644 index 0000000000000000000000000000000000000000..814f29f61257a7f3024079eb0d30c2d08ce0c95c GIT binary patch literal 220 zcmeAS@N?(olHy`uVBq!ia0vp^EI`c3!3HEn^LrNnDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MRlGojv*DdeERlsF)IqRl=IG-FMLJCmE*>e9p=K(_m8k| z-C!h>lvMVxi>Kx&&tU_L=Pj}6k5tMww+O5=7YcYhDX1!Fhg5Rdk^`A*-|sE|a<6&C zR=KEbjioG0ML3?{IUet7lX*0jGV~jHpZoby>EZo;<^Ml84H$~}jWUnt Sd=v+|gu&C*&t;ucLK6Uw8Bvq~ literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-bottom.png index 321646918fc370035e1443e2f12fb993ec2771d1..2fb4d07249485ed0b303fa94f51b6ff6a10c4d65 100644 GIT binary patch delta 123 zcmeBYoW-cv8Q|y6%O%Cdz`(%k>ERLtq&b0@g@X-9#_)@to2aM}XyfVP7*cU7>CgZF z_RIn&m<_F&)qZdu;h(u+&UT&~2dxDdgTJtL%xC<_ukoLK%74itiH?`PvUV9VI5aRa YEZNSNn;SIK185$Dr>mdKI;Vst02rSpF#rGn delta 112 zcmbQm*w3ig8Q|y6%O%Cdz`(%k>ERLtq}hR(nS%{T#vc|vI#E%>&Ct`uF{I*F(x3nT z_uDWtGg~vO{W!^@a?dD%{k=q^l_QUwf*4a0pTa-JNeqwl85r3Zz9e%0Y*AZ!7-$HC Mr>mdKI;Vst03^8|A^-pY diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-center.png index c9309c738777424a026ec272263f17da5c0fa2e8..981c98ac27d9b4f900792125e3235c14dc5b054e 100644 GIT binary patch delta 83 zcmXRYQS1!xbLZuf;$mQ6;Pv!y2?ElbK+MR&1|)e7wbV{j)X*05ba4!+xRvzh|9^XC iffa@i*tRn;@i63ZGXLMONbxIBC4;A{pUXO@geCwWeHLB- delta 79 zcmXRZQ0xrwbLZuf;$mQ6;Pv!y2?EmWK+MR&1|)^Jx15`(sG%<8>EaktaVzQ1|Nr}? enE4n45*R|}GplZ?<~amZ#o+1c=d#Wzp$P!2iWA=e diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-light-top.png index 0576301a247996df6099fd2f32eeb7229eb507e7..64a6fd631dd0df8b223607be8d2a3313ddf64670 100644 GIT binary patch delta 120 zcmeBUoX)7&8Q|y6%O%Cdz`(%k>ERLtq&b0@g@X-9#_)@to2aPaXX)wU7*cU7>CgZF z_RNY0nvOhUOG;EoV}CT?;g49y{w5WPg=&o=9?6DJECuS*nu=TsZm6&*F);Bk+<(cf UIcv%F2B2XKp00i_>zopr0JIMz;s5{u delta 111 zcmbQv*vF{Y8Q|y6%O%Cdz`(%k>ERLtq}hR(nS%{T#vc|vI#E%>)xgumF{I*F(x3nT z?U@A%m^T^-Y-axGuTaN*Bwn&{k^*NYo6mDSr z1<%~X^wgl##FWaylc_d9MHQYdjv*DdO!^$ToE3Ro+I4ci9?tg`7iC#kuQ>0La|Ory z=RpsX)tBtQ)402L0Nudg M>FVdQ&MBb@0EatI@&Et; literal 0 HcmV?d00001 diff --git a/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png b/AppKit/Themes/Aristo/Resources/scroller-vertical-track-top.png index 7ffd824d22842d0ad9c3470c47a0713bbff61199..17e29c9e688762acb718c56c422f33e9977d06ea 100644 GIT binary patch delta 174 zcmZ3@c!p82Gr-TCmrII^fq{Y7)59eQNOJ-)3kMsJjNunOH&IceKF`y|F{I*_N!Lcc z1_d6M?nzUQ2$*g-apFL|(dG|Rb98ce*rJcBU4Q-cuF4wy%u`}yUb zwC2*p=V$&;4+>s7MbD~PKuKe1+;f@aJu|qY+KbO^xfYhKtDyAd-ok5KQLlGT36f`I aW4Oa diff --git a/AppKit/Themes/Aristo/ThemeDescriptors.j b/AppKit/Themes/Aristo/ThemeDescriptors.j index 1e65c1c2a..a5bf8c5ee 100755 --- a/AppKit/Themes/Aristo/ThemeDescriptors.j +++ b/AppKit/Themes/Aristo/ThemeDescriptors.j @@ -635,17 +635,25 @@ var themedButtonValues = nil, var scroller = [self makeVerticalScroller], trackColor = PatternColor( [ - ["scroller-vertical-track-top.png", 7.0, 3.0], - ["scroller-vertical-track-center.png", 7.0, 1.0], - ["scroller-vertical-track-bottom.png", 7.0, 3.0] + ["scroller-vertical-track-top.png", 9.0, 4.0], + ["scroller-vertical-track-center.png", 9.0, 1.0], + ["scroller-vertical-track-bottom.png", 9.0, 4.0] ], PatternIsVertical), trackColorLight = PatternColor( [ - ["scroller-vertical-track-light-top.png", 7.0, 3.0], - ["scroller-vertical-track-light-center.png", 7.0, 1.0], - ["scroller-vertical-track-light-bottom.png", 7.0, 3.0] + ["scroller-vertical-track-light-top.png", 9.0, 4.0], + ["scroller-vertical-track-light-center.png", 9.0, 1.0], + ["scroller-vertical-track-light-bottom.png", 9.0, 4.0] + ], + PatternIsVertical), + + trackColorDark = PatternColor( + [ + ["scroller-vertical-track-dark-top.png", 9.0, 4.0], + ["scroller-vertical-track-dark-center.png", 9.0, 1.0], + ["scroller-vertical-track-dark-bottom.png", 9.0, 4.0] ], PatternIsVertical), @@ -655,25 +663,25 @@ var themedButtonValues = nil, knobColor = PatternColor( [ - ["scroller-vertical-knob-top.png", 7.0, 3.0], - ["scroller-vertical-knob-center.png", 7.0, 1.0], - ["scroller-vertical-knob-bottom.png", 7.0, 3.0] + ["scroller-vertical-knob-top.png", 9.0, 4.0], + ["scroller-vertical-knob-center.png", 9.0, 1.0], + ["scroller-vertical-knob-bottom.png", 9.0, 4.0] ], PatternIsVertical), knobColorLight = PatternColor( [ - ["scroller-vertical-knob-light-top.png", 7.0, 3.0], - ["scroller-vertical-knob-light-center.png", 7.0, 1.0], - ["scroller-vertical-knob-light-bottom.png", 7.0, 3.0] + ["scroller-vertical-knob-light-top.png", 9.0, 4.0], + ["scroller-vertical-knob-light-center.png", 9.0, 1.0], + ["scroller-vertical-knob-light-bottom.png", 9.0, 4.0] ], PatternIsVertical), knobColorDark = PatternColor( [ - ["scroller-vertical-knob-dark-top.png", 7.0, 3.0], - ["scroller-vertical-knob-dark-center.png", 7.0, 1.0], - ["scroller-vertical-knob-dark-bottom.png", 7.0, 3.0] + ["scroller-vertical-knob-dark-top.png", 9.0, 4.0], + ["scroller-vertical-knob-dark-center.png", 9.0, 1.0], + ["scroller-vertical-knob-dark-bottom.png", 9.0, 4.0] ], PatternIsVertical), @@ -692,13 +700,14 @@ var themedButtonValues = nil, [@"minimum-knob-length", 21.0, CPThemeStateVertical], // Overlay - [@"scroller-width", 7.0, CPThemeStateVertical], + [@"scroller-width", 9.0, CPThemeStateVertical], [@"knob-inset", CGInsetMake(2.0, 0.0, 0.0, 0.0), CPThemeStateVertical], [@"track-inset", CGInsetMake(2.0, 0.0, 11.0, 0.0), CPThemeStateVertical], - [@"track-border-overlay", 10.0, CPThemeStateVertical], + [@"track-border-overlay", 12.0, CPThemeStateVertical], [@"knob-slot-color", [CPNull null], CPThemeStateVertical], [@"knob-slot-color", trackColor, CPThemeStateVertical | CPThemeStateSelected], [@"knob-slot-color", trackColorLight, CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobLight], + [@"knob-slot-color", trackColorDark, CPThemeStateVertical | CPThemeStateSelected | CPThemeStateScrollerKnobDark], [@"knob-color", knobColor, CPThemeStateVertical], [@"knob-color", knobColorLight, CPThemeStateVertical | CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateVertical | CPThemeStateScrollerKnobDark], @@ -747,17 +756,25 @@ var themedButtonValues = nil, var scroller = [self makeHorizontalScroller], trackColor = PatternColor( [ - ["scroller-horizontal-track-left.png", 3.0, 7.0], - ["scroller-horizontal-track-center.png", 1.0, 7.0], - ["scroller-horizontal-track-right.png", 3.0, 7.0] + ["scroller-horizontal-track-left.png", 4.0, 9.0], + ["scroller-horizontal-track-center.png", 1.0, 9.0], + ["scroller-horizontal-track-right.png", 4.0, 9.0] ], PatternIsHorizontal), trackColorLight = PatternColor( [ - ["scroller-horizontal-track-light-left.png", 3.0, 7.0], - ["scroller-horizontal-track-light-center.png", 1.0, 7.0], - ["scroller-horizontal-track-light-right.png", 3.0, 7.0] + ["scroller-horizontal-track-light-left.png", 4.0, 9.0], + ["scroller-horizontal-track-light-center.png", 1.0, 9.0], + ["scroller-horizontal-track-light-right.png", 4.0, 9.0] + ], + PatternIsHorizontal), + + trackColorDark = PatternColor( + [ + ["scroller-horizontal-track-dark-left.png", 4.0, 9.0], + ["scroller-horizontal-track-dark-center.png", 1.0, 9.0], + ["scroller-horizontal-track-dark-right.png", 4.0, 9.0] ], PatternIsHorizontal), @@ -767,25 +784,25 @@ var themedButtonValues = nil, knobColor = PatternColor( [ - ["scroller-horizontal-knob-left.png", 3.0, 7.0], - ["scroller-horizontal-knob-center.png", 1.0, 7.0], - ["scroller-horizontal-knob-right.png", 3.0, 7.0] + ["scroller-horizontal-knob-left.png", 4.0, 9.0], + ["scroller-horizontal-knob-center.png", 1.0, 9.0], + ["scroller-horizontal-knob-right.png", 4.0, 9.0] ], PatternIsHorizontal), knobColorLight = PatternColor( [ - ["scroller-horizontal-knob-light-left.png", 3.0, 7.0], - ["scroller-horizontal-knob-light-center.png", 1.0, 7.0], - ["scroller-horizontal-knob-light-right.png", 3.0, 7.0] + ["scroller-horizontal-knob-light-left.png", 4.0, 9.0], + ["scroller-horizontal-knob-light-center.png", 1.0, 9.0], + ["scroller-horizontal-knob-light-right.png", 4.0, 9.0] ], PatternIsHorizontal), knobColorDark = PatternColor( [ - ["scroller-horizontal-knob-dark-left.png", 3.0, 7.0], - ["scroller-horizontal-knob-dark-center.png", 1.0, 7.0], - ["scroller-horizontal-knob-dark-right.png", 3.0, 7.0] + ["scroller-horizontal-knob-dark-left.png", 4.0, 9.0], + ["scroller-horizontal-knob-dark-center.png", 1.0, 9.0], + ["scroller-horizontal-knob-dark-right.png", 4.0, 9.0] ], PatternIsHorizontal), @@ -802,12 +819,15 @@ var themedButtonValues = nil, // Common [@"minimum-knob-length", 21.0], + // Overlay + [@"scroller-width", 9.0], [@"knob-inset", CGInsetMake(0.0, 0.0, 0.0, 2.0)], [@"track-inset", CGInsetMake(0.0, 11.0, 0.0, 2.0)], - [@"track-border-overlay", 10.0], + [@"track-border-overlay", 12.0], [@"knob-slot-color", [CPNull null]], [@"knob-slot-color", trackColor, CPThemeStateSelected], [@"knob-slot-color", trackColorLight, CPThemeStateSelected | CPThemeStateScrollerKnobLight], + [@"knob-slot-color", trackColorDark, CPThemeStateSelected | CPThemeStateScrollerKnobDark], [@"knob-color", knobColor], [@"knob-color", knobColorLight, CPThemeStateScrollerKnobLight], [@"knob-color", knobColorDark, CPThemeStateScrollerKnobDark], From c7ca35220588bd14a4b95f3fc5c57c9606b45673 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:00:31 +0200 Subject: [PATCH 14/22] remove debug print --- Tools/nib2cib/NSScrollView.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Tools/nib2cib/NSScrollView.j b/Tools/nib2cib/NSScrollView.j index f2af67f1e..eb99bd695 100644 --- a/Tools/nib2cib/NSScrollView.j +++ b/Tools/nib2cib/NSScrollView.j @@ -41,7 +41,7 @@ [self addSubview:_bottomCornerView]; [self setScrollerKnobStyle:[aCoder decodeObjectForKey:"NSScrollerKnobStyle"] || CPScrollerKnobStyleDefault]; - CPLogPrint([self scrollerKnobStyle]); + _hasVerticalScroller = !!(flags & (1 << 4)); _hasHorizontalScroller = !!(flags & (1 << 5)); _autohidesScrollers = !!(flags & (1 << 9)); From 1e65342814019085764c2fdcdfafc367be6d0fc5 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:07:17 +0200 Subject: [PATCH 15/22] add manual test for CPScrollView specificities --- ...s_Tonio_Desktop_scrollview_AppController.h | 13 + ..._Tonio_Desktop_scrollview__AppController.h | 13 + .../scrollview.xcodeproj/project.pbxproj | 354 ++ .../contents.xcworkspacedata | 7 + Tests/Manual/CPScrollView2/AppController.j | 85 + Tests/Manual/CPScrollView2/Info.plist | 10 + Tests/Manual/CPScrollView2/Jakefile | 94 + .../CPScrollView2/Resources/MainMenu.xib | 3822 +++++++++++++++++ .../CPScrollView2/Resources/spinner.gif | Bin 0 -> 1849 bytes Tests/Manual/CPScrollView2/index-debug.html | 103 + Tests/Manual/CPScrollView2/index.html | 77 + Tests/Manual/CPScrollView2/main.j | 18 + 12 files changed, 4596 insertions(+) create mode 100644 Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview_AppController.h create mode 100644 Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview__AppController.h create mode 100644 Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj create mode 100644 Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 Tests/Manual/CPScrollView2/AppController.j create mode 100644 Tests/Manual/CPScrollView2/Info.plist create mode 100644 Tests/Manual/CPScrollView2/Jakefile create mode 100644 Tests/Manual/CPScrollView2/Resources/MainMenu.xib create mode 100644 Tests/Manual/CPScrollView2/Resources/spinner.gif create mode 100644 Tests/Manual/CPScrollView2/index-debug.html create mode 100644 Tests/Manual/CPScrollView2/index.html create mode 100644 Tests/Manual/CPScrollView2/main.j diff --git a/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview_AppController.h b/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview_AppController.h new file mode 100644 index 000000000..fc861f06e --- /dev/null +++ b/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview_AppController.h @@ -0,0 +1,13 @@ + +@interface AppController : NSObject +{ + IBOutlet NSScrollView* scrollView; + IBOutlet NSView* contentView; +} +- (IBAction)change:(id)aSender; +- (IBAction)changeKnob:(id)aSender; +- (IBAction)changeBackground:(id)aSender; +- (IBAction)makeBigDocView:(id)aSender; +- (IBAction)makeSmallDocView:(id)aSender; +- (IBAction)flash:(id)aSender; +@end \ No newline at end of file diff --git a/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview__AppController.h b/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview__AppController.h new file mode 100644 index 000000000..fc861f06e --- /dev/null +++ b/Tests/Manual/CPScrollView2/.xCodeSupport/Sources/_Users_Tonio_Desktop_scrollview__AppController.h @@ -0,0 +1,13 @@ + +@interface AppController : NSObject +{ + IBOutlet NSScrollView* scrollView; + IBOutlet NSView* contentView; +} +- (IBAction)change:(id)aSender; +- (IBAction)changeKnob:(id)aSender; +- (IBAction)changeBackground:(id)aSender; +- (IBAction)makeBigDocView:(id)aSender; +- (IBAction)makeSmallDocView:(id)aSender; +- (IBAction)flash:(id)aSender; +@end \ No newline at end of file diff --git a/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj new file mode 100644 index 000000000..2760e2941 --- /dev/null +++ b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.pbxproj @@ -0,0 +1,354 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; }; + 9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EEC4497135749D200615446 /* Cocoa.framework */; }; + 9EEC44CC13574A0B00615446 /* scrollview in Resources */ = {isa = PBXBuildFile; fileRef = 9EEC44CB13574A0B00615446 /* scrollview */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 9EEC44B6135749D300615446 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 9EEC448A135749D200615446 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 9EEC4492135749D200615446; + remoteInfo = Another; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + 9EEC4493135749D200615446 /* Another.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Another.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 9EEC4497135749D200615446 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + 9EEC449A135749D300615446 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + 9EEC449B135749D300615446 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + 9EEC449C135749D300615446 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + 9EEC44B4135749D300615446 /* AnotherTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = AnotherTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + 9EEC44CB13574A0B00615446 /* scrollview */ = {isa = PBXFileReference; lastKnownFileType = folder; name = scrollview; path = ..; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 9EEC4490135749D200615446 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9EEC4498135749D200615446 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9EEC44B0135749D300615446 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 9EEC44B5135749D300615446 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9EEC4488135749D200615446 = { + isa = PBXGroup; + children = ( + 9EEC44CB13574A0B00615446 /* scrollview */, + 9EEC4496135749D200615446 /* Frameworks */, + 9EEC4494135749D200615446 /* Products */, + ); + sourceTree = ""; + }; + 9EEC4494135749D200615446 /* Products */ = { + isa = PBXGroup; + children = ( + 9EEC4493135749D200615446 /* Another.app */, + 9EEC44B4135749D300615446 /* AnotherTests.octest */, + ); + name = Products; + sourceTree = ""; + }; + 9EEC4496135749D200615446 /* Frameworks */ = { + isa = PBXGroup; + children = ( + 9EEC4497135749D200615446 /* Cocoa.framework */, + 9EEC4499135749D300615446 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + 9EEC4499135749D300615446 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + 9EEC449A135749D300615446 /* AppKit.framework */, + 9EEC449B135749D300615446 /* CoreData.framework */, + 9EEC449C135749D300615446 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 9EEC4492135749D200615446 /* Another */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9EEC44C5135749D300615446 /* Build configuration list for PBXNativeTarget "Another" */; + buildPhases = ( + 9EEC448F135749D200615446 /* Sources */, + 9EEC4490135749D200615446 /* Frameworks */, + 9EEC4491135749D200615446 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Another; + productName = Another; + productReference = 9EEC4493135749D200615446 /* Another.app */; + productType = "com.apple.product-type.application"; + }; + 9EEC44B3135749D300615446 /* AnotherTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */; + buildPhases = ( + 9EEC44AF135749D300615446 /* Sources */, + 9EEC44B0135749D300615446 /* Frameworks */, + 9EEC44B1135749D300615446 /* Resources */, + 9EEC44B2135749D300615446 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 9EEC44B7135749D300615446 /* PBXTargetDependency */, + ); + name = AnotherTests; + productName = AnotherTests; + productReference = 9EEC44B4135749D300615446 /* AnotherTests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 9EEC448A135749D200615446 /* Project object */ = { + isa = PBXProject; + attributes = { + ORGANIZATIONNAME = "280 North, Inc."; + }; + buildConfigurationList = 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = 9EEC4488135749D200615446; + productRefGroup = 9EEC4494135749D200615446 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 9EEC4492135749D200615446 /* Another */, + 9EEC44B3135749D300615446 /* AnotherTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 9EEC4491135749D200615446 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 9EEC44CC13574A0B00615446 /* scrollview in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9EEC44B1135749D300615446 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 9EEC44B2135749D300615446 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 9EEC448F135749D200615446 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9EEC44AF135749D300615446 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 9EEC44B7135749D300615446 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 9EEC4492135749D200615446 /* Another */; + targetProxy = 9EEC44B6135749D300615446 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + 9EEC44C3135749D300615446 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = DEBUG; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + 9EEC44C4135749D300615446 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + 9EEC44C6135749D300615446 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = NO; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Another/Another-Prefix.pch"; + INFOPLIST_FILE = "Another/Another-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + 9EEC44C7135749D300615446 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Another/Another-Prefix.pch"; + INFOPLIST_FILE = "Another/Another-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + 9EEC44C9135749D300615446 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another"; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_DYNAMIC_NO_PIC = NO; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch"; + INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist"; + OTHER_LDFLAGS = ( + "-framework", + SenTestingKit, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + 9EEC44CA135749D300615446 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Another.app/Contents/MacOS/Another"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "AnotherTests/AnotherTests-Prefix.pch"; + INFOPLIST_FILE = "AnotherTests/AnotherTests-Info.plist"; + OTHER_LDFLAGS = ( + "-framework", + SenTestingKit, + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 9EEC448D135749D200615446 /* Build configuration list for PBXProject "Another" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9EEC44C3135749D300615446 /* Debug */, + 9EEC44C4135749D300615446 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 9EEC44C5135749D300615446 /* Build configuration list for PBXNativeTarget "Another" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9EEC44C6135749D300615446 /* Debug */, + 9EEC44C7135749D300615446 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + 9EEC44C8135749D300615446 /* Build configuration list for PBXNativeTarget "AnotherTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 9EEC44C9135749D300615446 /* Debug */, + 9EEC44CA135749D300615446 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + }; + rootObject = 9EEC448A135749D200615446 /* Project object */; +} diff --git a/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..966480d22 --- /dev/null +++ b/Tests/Manual/CPScrollView2/.xCodeSupport/scrollview.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/Tests/Manual/CPScrollView2/AppController.j b/Tests/Manual/CPScrollView2/AppController.j new file mode 100644 index 000000000..773bc4a3e --- /dev/null +++ b/Tests/Manual/CPScrollView2/AppController.j @@ -0,0 +1,85 @@ +/* + * AppController.j + * scrollview + * + * Created by You on October 3, 2011. + * Copyright 2011, Your Company All rights reserved. + */ + +@import + + +@implementation AppController : CPObject +{ + CPWindow theWindow; //this "outlet" is connected automatically by the Cib + @outlet CPScrollView scrollView; + @outlet CPView contentView; +} + +- (void)awakeFromCib +{ + [theWindow setFullPlatformWindow:YES]; + + [contentView setBackgroundColor:[CPColor colorWithHexString:@"f3f3f3"]]; + [contentView setAutoresizingMask:CPViewWidthSizable]; + // [scrollView setAutohidesScrollers:YES]; + [scrollView setDocumentView:contentView]; +} + +- (IBAction)change:(id)aSender +{ + if ([scrollView scrollerStyle] == CPScrollerStyleLegacy) + [scrollView setScrollerStyle:CPScrollerStyleOverlay]; + else + [scrollView setScrollerStyle:CPScrollerStyleLegacy]; +} + +- (IBAction)changeKnob:(id)aSender +{ + var style = [aSender title]; + + switch(style) + { + case "Default": + [scrollView setScrollerKnobStyle:CPScrollerKnobStyleDefault]; + break; + case "Dark": + [scrollView setScrollerKnobStyle:CPScrollerKnobStyleDark]; + break; + case "Light": + [scrollView setScrollerKnobStyle:CPScrollerKnobStyleLight]; + break; + } +} + +- (IBAction)changeBackground:(id)aSender +{ + var style = [aSender title]; + + switch(style) + { + case "Light": + [[scrollView documentView] setBackgroundColor:[CPColor colorWithHexString:@"f3f3f3"]]; + break; + case "Dark": + [[scrollView documentView] setBackgroundColor:[CPColor colorWithHexString:@"333"]]; + break; + } +} + +- (IBAction)makeBigDocView:(id)aSender +{ + [contentView setFrameSize:CPSizeMake(1000, 1000)]; +} + +- (IBAction)makeSmallDocView:(id)aSender +{ + [contentView setFrameSize:CPSizeMake(30, 30)]; +} + +- (IBAction)flash:(id)aSender +{ + [scrollView flashScrollers]; +} + +@end diff --git a/Tests/Manual/CPScrollView2/Info.plist b/Tests/Manual/CPScrollView2/Info.plist new file mode 100644 index 000000000..e2e477f2c --- /dev/null +++ b/Tests/Manual/CPScrollView2/Info.plist @@ -0,0 +1,10 @@ + + + + + Main cib file base name + MainMenu.cib + CPBundleName + scrollview + + diff --git a/Tests/Manual/CPScrollView2/Jakefile b/Tests/Manual/CPScrollView2/Jakefile new file mode 100644 index 000000000..e2630179d --- /dev/null +++ b/Tests/Manual/CPScrollView2/Jakefile @@ -0,0 +1,94 @@ +/* + * Jakefile + * scrollview + * + * Created by You on October 3, 2011. + * Copyright 2011, Your Company All rights reserved. + */ + +var ENV = require("system").env, + FILE = require("file"), + JAKE = require("jake"), + task = JAKE.task, + FileList = JAKE.FileList, + app = require("cappuccino/jake").app, + configuration = ENV["CONFIG"] || ENV["CONFIGURATION"] || ENV["c"] || "Debug", + OS = require("os"); + +app ("scrollview", function(task) +{ + task.setBuildIntermediatesPath(FILE.join("Build", "scrollview.build", configuration)); + task.setBuildPath(FILE.join("Build", configuration)); + + task.setProductName("scrollview"); + task.setIdentifier("com.yourcompany.scrollview"); + task.setVersion("1.0"); + task.setAuthor("Your Company"); + task.setEmail("feedback @nospam@ yourcompany.com"); + task.setSummary("scrollview"); + task.setSources((new FileList("**/*.j")).exclude(FILE.join("Build", "**"))); + task.setResources(new FileList("Resources/**")); + task.setIndexFilePath("index.html"); + task.setInfoPlistPath("Info.plist"); + task.setNib2CibFlags("-R Resources/"); + + if (configuration === "Debug") + task.setCompilerFlags("-DDEBUG -g"); + else + task.setCompilerFlags("-O"); +}); + +task ("default", ["scrollview"], function() +{ + printResults(configuration); +}); + +task ("build", ["default"]); + +task ("debug", function() +{ + ENV["CONFIGURATION"] = "Debug"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("release", function() +{ + ENV["CONFIGURATION"] = "Release"; + JAKE.subjake(["."], "build", ENV); +}); + +task ("run", ["debug"], function() +{ + OS.system(["open", FILE.join("Build", "Debug", "scrollview", "index.html")]); +}); + +task ("run-release", ["release"], function() +{ + OS.system(["open", FILE.join("Build", "Release", "scrollview", "index.html")]); +}); + +task ("deploy", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Deployment", "scrollview")); + OS.system(["press", "-f", FILE.join("Build", "Release", "scrollview"), FILE.join("Build", "Deployment", "scrollview")]); + printResults("Deployment") +}); + +task ("desktop", ["release"], function() +{ + FILE.mkdirs(FILE.join("Build", "Desktop", "scrollview")); + require("cappuccino/nativehost").buildNativeHost(FILE.join("Build", "Release", "scrollview"), FILE.join("Build", "Desktop", "scrollview", "scrollview.app")); + printResults("Desktop") +}); + +task ("run-desktop", ["desktop"], function() +{ + OS.system([FILE.join("Build", "Desktop", "scrollview", "scrollview.app", "Contents", "MacOS", "NativeHost"), "-i"]); +}); + +function printResults(configuration) +{ + print("----------------------------"); + print(configuration+" app built at path: "+FILE.join("Build", configuration, "scrollview")); + print("----------------------------"); +} diff --git a/Tests/Manual/CPScrollView2/Resources/MainMenu.xib b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib new file mode 100644 index 000000000..b54f6b87f --- /dev/null +++ b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib @@ -0,0 +1,3822 @@ + + + + 1050 + 11C71 + 1617 + 1138.23 + 567.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1617 + + + YES + NSPopUpButton + NSScroller + NSMenuItem + NSMenu + NSScrollView + NSButtonCell + NSButton + NSTextFieldCell + NSCustomView + NSCustomObject + NSView + NSWindowTemplate + NSPopUpButtonCell + NSTextField + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + AMainMenu + + YES + + + NewApplication + + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + submenuAction: + + NewApplication + + YES + + + About NewApplication + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Preferences… + , + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Services + + 1048576 + 2147483647 + + + submenuAction: + + Services + + YES + + _NSServicesMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Hide NewApplication + h + 1048576 + 2147483647 + + + + + + Hide Others + h + 1572864 + 2147483647 + + + + + + Show All + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Quit NewApplication + q + 1048576 + 2147483647 + + + + + _NSAppleMenu + + + + + File + + 1048576 + 2147483647 + + + submenuAction: + + File + + YES + + + New + n + 1048576 + 2147483647 + + + + + + Open… + o + 1048576 + 2147483647 + + + + + + Open Recent + + 1048576 + 2147483647 + + + submenuAction: + + Open Recent + + YES + + + Clear Menu + + 1048576 + 2147483647 + + + + + _NSRecentDocumentsMenu + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Close + w + 1048576 + 2147483647 + + + + + + Save + s + 1048576 + 2147483647 + + + + + + Save As… + S + 1179648 + 2147483647 + + + + + + Revert to Saved + + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Page Setup... + P + 1179648 + 2147483647 + + + + + + + Print… + p + 1048576 + 2147483647 + + + + + + + + + Edit + + 1048576 + 2147483647 + + + submenuAction: + + Edit + + YES + + + Undo + z + 1048576 + 2147483647 + + + + + + Redo + Z + 1179648 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Cut + x + 1048576 + 2147483647 + + + + + + Copy + c + 1048576 + 2147483647 + + + + + + Paste + v + 1048576 + 2147483647 + + + + + + Delete + + 1048576 + 2147483647 + + + + + + Select All + a + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Find + + 1048576 + 2147483647 + + + submenuAction: + + Find + + YES + + + Find… + f + 1048576 + 2147483647 + + + 1 + + + + Find Next + g + 1048576 + 2147483647 + + + 2 + + + + Find Previous + G + 1179648 + 2147483647 + + + 3 + + + + Use Selection for Find + e + 1048576 + 2147483647 + + + 7 + + + + Jump to Selection + j + 1048576 + 2147483647 + + + + + + + + + Spelling and Grammar + + 1048576 + 2147483647 + + + submenuAction: + + Spelling and Grammar + + YES + + + Show Spelling… + : + 1048576 + 2147483647 + + + + + + Check Spelling + ; + 1048576 + 2147483647 + + + + + + Check Spelling While Typing + + 1048576 + 2147483647 + + + + + + Check Grammar With Spelling + + 1048576 + 2147483647 + + + + + + + + + Substitutions + + 1048576 + 2147483647 + + + submenuAction: + + Substitutions + + YES + + + Smart Copy/Paste + f + 1048576 + 2147483647 + + + 1 + + + + Smart Quotes + g + 1048576 + 2147483647 + + + 2 + + + + Smart Links + G + 1179648 + 2147483647 + + + 3 + + + + + + + Speech + + 1048576 + 2147483647 + + + submenuAction: + + Speech + + YES + + + Start Speaking + + 1048576 + 2147483647 + + + + + + Stop Speaking + + 1048576 + 2147483647 + + + + + + + + + + + + Format + + 2147483647 + + + submenuAction: + + Format + + YES + + + Font + + 2147483647 + + + submenuAction: + + Font + + YES + + + Show Fonts + t + 1048576 + 2147483647 + + + + + + Bold + b + 1048576 + 2147483647 + + + 2 + + + + Italic + i + 1048576 + 2147483647 + + + 1 + + + + Underline + u + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Bigger + + + 1048576 + 2147483647 + + + 3 + + + + Smaller + - + 1048576 + 2147483647 + + + 4 + + + + YES + YES + + + 2147483647 + + + + + + Kern + + 2147483647 + + + submenuAction: + + Kern + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Tighten + + 2147483647 + + + + + + Loosen + + 2147483647 + + + + + + + + + Ligature + + 2147483647 + + + submenuAction: + + Ligature + + YES + + + Use Default + + 2147483647 + + + + + + Use None + + 2147483647 + + + + + + Use All + + 2147483647 + + + + + + + + + Baseline + + 2147483647 + + + submenuAction: + + Baseline + + YES + + + Use Default + + 2147483647 + + + + + + Superscript + + 2147483647 + + + + + + Subscript + + 2147483647 + + + + + + Raise + + 2147483647 + + + + + + Lower + + 2147483647 + + + + + + + + + YES + YES + + + 2147483647 + + + + + + Show Colors + C + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Copy Style + c + 1572864 + 2147483647 + + + + + + Paste Style + v + 1572864 + 2147483647 + + + + + _NSFontMenu + + + + + Text + + 2147483647 + + + submenuAction: + + Text + + YES + + + Align Left + { + 1048576 + 2147483647 + + + + + + Center + | + 1048576 + 2147483647 + + + + + + Justify + + 2147483647 + + + + + + Align Right + } + 1048576 + 2147483647 + + + + + + YES + YES + + + 2147483647 + + + + + + Show Ruler + + 2147483647 + + + + + + Copy Ruler + c + 1310720 + 2147483647 + + + + + + Paste Ruler + v + 1310720 + 2147483647 + + + + + + + + + + + + View + + 1048576 + 2147483647 + + + submenuAction: + + View + + YES + + + Show Toolbar + t + 1572864 + 2147483647 + + + + + + Customize Toolbar… + + 1048576 + 2147483647 + + + + + + + + + Window + + 1048576 + 2147483647 + + + submenuAction: + + Window + + YES + + + Minimize + m + 1048576 + 2147483647 + + + + + + Zoom + + 1048576 + 2147483647 + + + + + + YES + YES + + + 1048576 + 2147483647 + + + + + + Bring All to Front + + 1048576 + 2147483647 + + + + + _NSWindowsMenu + + + + + Help + + 1048576 + 2147483647 + + + submenuAction: + + Help + + YES + + + NewApplication Help + ? + 1048576 + 2147483647 + + + + + + + + _NSMainMenu + + + 7 + 2 + {{335, 390}, {609, 372}} + 1946157056 + Window + NSWindow + + + + + 256 + + YES + + + 268 + + YES + + + 2304 + + YES + + + 274 + {552, 244} + + + + _NS:414 + + + {{1, 1}, {567, 259}} + + + + _NS:412 + + + 6 + System + controlColor + + 3 + MC42NjY2NjY2NjY3AA + + + 4 + + + + 256 + {{553, 1}, {15, 253}} + + + + _NS:419 + + _doScroller: + 1 + 0.96363627910614014 + + + + 256 + {{1, 245}, {561, 15}} + + + + _NS:423 + 1 + + _doScroller: + 0.50602412223815918 + + + {{20, 20}, {569, 261}} + + + + _NS:410 + 133169 + + + + + + + 268 + {{326, 324}, {136, 32}} + + + + _NS:161 + YES + + 67239424 + 134217728 + Flash scrollers + + LucidaGrande + 13 + 1044 + + _NS:161 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{462, 323}, {133, 32}} + + + + _NS:161 + YES + + 67239424 + 134217728 + Big Doc view + + _NS:161 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{460, 292}, {135, 32}} + + + + _NS:161 + YES + + 67239424 + 134217728 + Small Doc view + + _NS:161 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{326, 293}, {136, 32}} + + + + _NS:161 + YES + + 67239424 + 134217728 + Scroller style + + _NS:161 + + -2038284033 + 129 + + + 200 + 25 + + + + + 268 + {{147, 327}, {148, 26}} + + + + _NS:179 + YES + + -2076049856 + 2048 + + _NS:179 + + 109199615 + 129 + + + 400 + 75 + + + Dark + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Light + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + Default + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + + + + 268 + {{147, 297}, {148, 26}} + + + + _NS:179 + YES + + -2076049856 + 2048 + + _NS:179 + + 109199615 + 129 + + + 400 + 75 + + + Light + + 1048576 + 2147483647 + 1 + + + _popUpItemAction: + + + YES + + OtherViews + + YES + + + + Dark + + 1048576 + 2147483647 + + + _popUpItemAction: + + + + + + 1 + YES + YES + 2 + + + + + 268 + {{17, 334}, {125, 17}} + + + + _NS:3936 + YES + + 68288064 + 71304192 + Srcoller knob style: + + _NS:3936 + + + + 6 + System + controlTextColor + + 3 + MAA + + + + + + + 268 + {{17, 303}, {125, 17}} + + + + _NS:3936 + YES + + 68288064 + 71304192 + Background color: + + _NS:3936 + + + + + + + {609, 372} + + + + + {{0, 0}, {1680, 1028}} + {10000000000000, 10000000000000} + YES + + + AppController + + + + 268 + + YES + + + 289 + {{656, -231}, {84, 17}} + + + + _NS:3936 + YES + + 68288064 + 71304192 + Bottom right + + _NS:3936 + + + + + + + + 265 + {{656, 428}, {87, 17}} + + + + _NS:3936 + YES + + 68288064 + 71304192 + Top right + + _NS:3936 + + + + + + + + 292 + {{17, -231}, {75, 17}} + + + + _NS:3936 + YES + + 68288064 + 272630784 + Bottom left + + _NS:3936 + + + + + + + + 268 + {{17, 428}, {54, 17}} + + + + _NS:3936 + YES + + 68288064 + 272630784 + Top left + + _NS:3936 + + + + + + + {629, 465} + + + + _NS:499 + NSView + + + + + YES + + + performMiniaturize: + + + + 37 + + + + arrangeInFront: + + + + 39 + + + + print: + + + + 86 + + + + runPageLayout: + + + + 87 + + + + clearRecentDocuments: + + + + 127 + + + + orderFrontStandardAboutPanel: + + + + 142 + + + + performClose: + + + + 193 + + + + toggleContinuousSpellChecking: + + + + 222 + + + + undo: + + + + 223 + + + + copy: + + + + 224 + + + + checkSpelling: + + + + 225 + + + + paste: + + + + 226 + + + + stopSpeaking: + + + + 227 + + + + cut: + + + + 228 + + + + showGuessPanel: + + + + 230 + + + + redo: + + + + 231 + + + + selectAll: + + + + 232 + + + + startSpeaking: + + + + 233 + + + + delete: + + + + 235 + + + + performZoom: + + + + 240 + + + + performFindPanelAction: + + + + 241 + + + + centerSelectionInVisibleArea: + + + + 245 + + + + toggleGrammarChecking: + + + + 347 + + + + toggleSmartInsertDelete: + + + + 355 + + + + toggleAutomaticQuoteSubstitution: + + + + 356 + + + + toggleAutomaticLinkDetection: + + + + 357 + + + + showHelp: + + + + 360 + + + + saveDocument: + + + + 362 + + + + saveDocumentAs: + + + + 363 + + + + revertDocumentToSaved: + + + + 364 + + + + runToolbarCustomizationPalette: + + + + 365 + + + + toggleToolbarShown: + + + + 366 + + + + hide: + + + + 367 + + + + hideOtherApplications: + + + + 368 + + + + unhideAllApplications: + + + + 370 + + + + newDocument: + + + + 373 + + + + openDocument: + + + + 374 + + + + raiseBaseline: + + + + 426 + + + + lowerBaseline: + + + + 427 + + + + copyFont: + + + + 428 + + + + subscript: + + + + 429 + + + + superscript: + + + + 430 + + + + tightenKerning: + + + + 431 + + + + underline: + + + + 432 + + + + orderFrontColorPanel: + + + + 433 + + + + useAllLigatures: + + + + 434 + + + + loosenKerning: + + + + 435 + + + + pasteFont: + + + + 436 + + + + unscript: + + + + 437 + + + + useStandardKerning: + + + + 438 + + + + useStandardLigatures: + + + + 439 + + + + turnOffLigatures: + + + + 440 + + + + turnOffKerning: + + + + 441 + + + + alignLeft: + + + + 442 + + + + alignJustified: + + + + 443 + + + + copyRuler: + + + + 444 + + + + alignCenter: + + + + 445 + + + + toggleRuler: + + + + 446 + + + + alignRight: + + + + 447 + + + + pasteRuler: + + + + 448 + + + + terminate: + + + + 449 + + + + delegate + + + + 451 + + + + theWindow + + + + 459 + + + + contentView + + + + 469 + + + + scrollView + + + + 470 + + + + flash: + + + + 495 + + + + change: + + + + 496 + + + + changeKnob: + + + + 497 + + + + changeBackground: + + + + 507 + + + + makeBigDocView: + + + + 514 + + + + makeSmallDocView: + + + + 515 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 29 + + + YES + + + + + + + + + + MainMenu + + + 19 + + + YES + + + + + + 56 + + + YES + + + + + + 103 + + + YES + + + + 1 + + + 217 + + + YES + + + + + + 83 + + + YES + + + + + + 81 + + + YES + + + + + + + + + + + + + + + + 75 + + + 3 + + + 80 + + + 8 + + + 78 + + + 6 + + + 72 + + + + + 82 + + + 9 + + + 124 + + + YES + + + + + + 77 + + + 5 + + + 73 + + + 1 + + + 79 + + + 7 + + + 112 + + + 10 + + + 74 + + + 2 + + + 125 + + + YES + + + + + + 126 + + + + + 205 + + + YES + + + + + + + + + + + + + + + + + + 202 + + + + + 198 + + + + + 207 + + + + + 214 + + + + + 199 + + + + + 203 + + + + + 197 + + + + + 206 + + + + + 215 + + + + + 218 + + + YES + + + + + + 216 + + + YES + + + + + + 200 + + + YES + + + + + + + + + 219 + + + + + 201 + + + + + 204 + + + + + 220 + + + YES + + + + + + + + + + 213 + + + + + 210 + + + + + 221 + + + + + 208 + + + + + 209 + + + + + 106 + + + YES + + + + 2 + + + 111 + + + + + 57 + + + YES + + + + + + + + + + + + + + + + 58 + + + + + 134 + + + + + 150 + + + + + 136 + + + 1111 + + + 144 + + + + + 129 + + + 121 + + + 143 + + + + + 236 + + + + + 131 + + + YES + + + + + + 149 + + + + + 145 + + + + + 130 + + + + + 24 + + + YES + + + + + + + + + 92 + + + + + 5 + + + + + 239 + + + + + 23 + + + + + 295 + + + YES + + + + + + 296 + + + YES + + + + + + + 297 + + + + + 298 + + + + + 211 + + + YES + + + + + + 212 + + + YES + + + + + + + 195 + + + + + 196 + + + + + 346 + + + + + 348 + + + YES + + + + + + 349 + + + YES + + + + + + + + 350 + + + + + 351 + + + + + 354 + + + + + 371 + + + YES + + + + + + 372 + + + YES + + + + + + + + + + + + + + 375 + + + YES + + + + + + 376 + + + YES + + + + + + + 377 + + + YES + + + + + + 378 + + + YES + + + + + + 379 + + + YES + + + + + + + + + + + + + 380 + + + + + 381 + + + + + 382 + + + + + 383 + + + + + 384 + + + + + 385 + + + + + 386 + + + + + 387 + + + + + 388 + + + YES + + + + + + + + + + + + + + + + + + + + + 389 + + + + + 390 + + + + + 391 + + + + + 392 + + + + + 393 + + + + + 394 + + + + + 395 + + + + + 396 + + + + + 397 + + + YES + + + + + + 398 + + + YES + + + + + + 399 + + + YES + + + + + + 400 + + + + + 401 + + + + + 402 + + + + + 403 + + + + + 404 + + + + + 405 + + + YES + + + + + + + + + + 406 + + + + + 407 + + + + + 408 + + + + + 409 + + + + + 410 + + + + + 411 + + + YES + + + + + + + + 412 + + + + + 413 + + + + + 414 + + + + + 415 + + + YES + + + + + + + + + 416 + + + + + 417 + + + + + 418 + + + + + 419 + + + + + 450 + + + + + 464 + + + YES + + + + + + + + 465 + + + + + 466 + + + + + 467 + + + + + 468 + + + YES + + + + + + + + + 471 + + + YES + + + + + + 472 + + + + + 473 + + + YES + + + + + + 474 + + + + + 475 + + + YES + + + + + + 476 + + + YES + + + + + + 477 + + + YES + + + + + + + + 478 + + + + + 479 + + + + + 480 + + + + + 481 + + + YES + + + + + + 482 + + + YES + + + + + + 483 + + + YES + + + + + + + 485 + + + + + 486 + + + + + 487 + + + YES + + + + + + 488 + + + + + 489 + + + YES + + + + + + 490 + + + + + 499 + + + YES + + + + + + 500 + + + + + 501 + + + YES + + + + + + 502 + + + + + 503 + + + YES + + + + + + 504 + + + YES + + + + + + 505 + + + + + 506 + + + + + 508 + + + YES + + + + + + 509 + + + + + 511 + + + YES + + + + + + 512 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 103.IBPluginDependency + 106.IBPluginDependency + 111.IBPluginDependency + 112.IBPluginDependency + 124.IBPluginDependency + 125.IBPluginDependency + 126.IBPluginDependency + 129.IBPluginDependency + 130.IBPluginDependency + 131.IBPluginDependency + 134.IBPluginDependency + 136.IBPluginDependency + 143.IBPluginDependency + 144.IBPluginDependency + 145.IBPluginDependency + 149.IBPluginDependency + 150.IBPluginDependency + 19.IBPluginDependency + 195.IBPluginDependency + 196.IBPluginDependency + 197.IBPluginDependency + 198.IBPluginDependency + 199.IBPluginDependency + 200.IBPluginDependency + 201.IBPluginDependency + 202.IBPluginDependency + 203.IBPluginDependency + 204.IBPluginDependency + 205.IBPluginDependency + 206.IBPluginDependency + 207.IBPluginDependency + 208.IBPluginDependency + 209.IBPluginDependency + 210.IBPluginDependency + 211.IBPluginDependency + 212.IBPluginDependency + 213.IBPluginDependency + 214.IBPluginDependency + 215.IBPluginDependency + 216.IBPluginDependency + 217.IBPluginDependency + 218.IBPluginDependency + 219.IBPluginDependency + 220.IBPluginDependency + 221.IBPluginDependency + 23.IBPluginDependency + 236.IBPluginDependency + 239.IBPluginDependency + 24.IBPluginDependency + 29.IBPluginDependency + 295.IBPluginDependency + 296.IBPluginDependency + 297.IBPluginDependency + 298.IBPluginDependency + 346.IBPluginDependency + 348.IBPluginDependency + 349.IBPluginDependency + 350.IBPluginDependency + 351.IBPluginDependency + 354.IBPluginDependency + 371.IBPluginDependency + 371.IBWindowTemplateEditedContentRect + 371.NSWindowTemplate.visibleAtLaunch + 372.IBPluginDependency + 375.IBPluginDependency + 376.IBPluginDependency + 377.IBPluginDependency + 378.IBPluginDependency + 379.IBPluginDependency + 380.IBPluginDependency + 381.IBPluginDependency + 382.IBPluginDependency + 383.IBPluginDependency + 384.IBPluginDependency + 385.IBPluginDependency + 386.IBPluginDependency + 387.IBPluginDependency + 388.IBPluginDependency + 389.IBPluginDependency + 390.IBPluginDependency + 391.IBPluginDependency + 392.IBPluginDependency + 393.IBPluginDependency + 394.IBPluginDependency + 395.IBPluginDependency + 396.IBPluginDependency + 397.IBPluginDependency + 398.IBPluginDependency + 399.IBPluginDependency + 400.IBPluginDependency + 401.IBPluginDependency + 402.IBPluginDependency + 403.IBPluginDependency + 404.IBPluginDependency + 405.IBPluginDependency + 406.IBPluginDependency + 407.IBPluginDependency + 408.IBPluginDependency + 409.IBPluginDependency + 410.IBPluginDependency + 411.IBPluginDependency + 412.IBPluginDependency + 413.IBPluginDependency + 414.IBPluginDependency + 415.IBPluginDependency + 416.IBPluginDependency + 417.IBPluginDependency + 418.IBPluginDependency + 419.IBPluginDependency + 450.IBPluginDependency + 464.IBPluginDependency + 465.IBPluginDependency + 466.IBPluginDependency + 467.IBPluginDependency + 468.IBPluginDependency + 471.IBPluginDependency + 472.IBPluginDependency + 473.IBPluginDependency + 474.IBPluginDependency + 475.IBPluginDependency + 476.IBPluginDependency + 477.IBPluginDependency + 478.IBPluginDependency + 479.IBPluginDependency + 480.IBPluginDependency + 481.IBPluginDependency + 482.IBPluginDependency + 483.IBPluginDependency + 485.IBPluginDependency + 486.IBPluginDependency + 487.IBPluginDependency + 488.IBPluginDependency + 489.IBPluginDependency + 490.IBPluginDependency + 499.IBPluginDependency + 5.IBPluginDependency + 500.IBPluginDependency + 501.IBPluginDependency + 502.IBPluginDependency + 503.IBPluginDependency + 504.IBPluginDependency + 505.IBPluginDependency + 506.IBPluginDependency + 508.IBPluginDependency + 509.IBPluginDependency + 511.IBPluginDependency + 512.IBPluginDependency + 56.IBPluginDependency + 57.IBPluginDependency + 58.IBPluginDependency + 72.IBPluginDependency + 73.IBPluginDependency + 74.IBPluginDependency + 75.IBPluginDependency + 77.IBPluginDependency + 78.IBPluginDependency + 79.IBPluginDependency + 80.IBPluginDependency + 81.IBPluginDependency + 82.IBPluginDependency + 83.IBPluginDependency + 92.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + {{303, 221}, {480, 360}} + + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 515 + + + + YES + + AppController + NSObject + + YES + + YES + change: + changeBackground: + changeKnob: + flash: + makeBigDocView: + makeSmallDocView: + + + YES + id + id + id + id + id + id + + + + YES + + YES + change: + changeBackground: + changeKnob: + flash: + makeBigDocView: + makeSmallDocView: + + + YES + + change: + id + + + changeBackground: + id + + + changeKnob: + id + + + flash: + id + + + makeBigDocView: + id + + + makeSmallDocView: + id + + + + + YES + + YES + contentView + scrollView + + + YES + NSView + NSScrollView + + + + YES + + YES + contentView + scrollView + + + YES + + contentView + NSView + + + scrollView + NSScrollView + + + + + IBProjectSource + ./Classes/AppController.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.macosx + + + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {9, 8} + {7, 2} + + + + diff --git a/Tests/Manual/CPScrollView2/Resources/spinner.gif b/Tests/Manual/CPScrollView2/Resources/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..06dbc2bc21dddcf0e09b566d5b211aee89570f52 GIT binary patch literal 1849 zcma*odr(tX9tZHtz31lM+(&Y`A`Ou`NeG&R#DrIfV%?hng21vs6v>ooRQQFbk7E_K!V( z{?5!fpZWgIZ%*d6t%i*j24bL}AZUJm9)h6R*;%L4IWse3G#VWaN1#$zSSXcBhlYlH zJ|D}n{r&w2f+Qp)SS*&n?*G4}{}!h?td_mjU6Kad-rW*QwWYCUk7d^e+sjpZAn6kT z5rM;`{~_}-wm+L@%+E;JphLm}C3WzQAQD0wBoY|rOTQX{(@pp-WAA8Iw0HKl|15j) zhGh(SFWu#5zUCw^T!}C~eC}~?{xG-r7ugQC>taC+|L^xr&a%{#cgUOZXIM&v?)k^2 z1i5%0!U00wq)r4vlAwXBA_m5J5WNeuBm-XJQ5pG4GD%vc|K){+TJ{AkHqN@SJKczX zU}QRd9n*_bf^h94)6Ctv{CUfz_;qs#RDuQ$DR%y1&5G-a6rhf*4Y zl+UOD1*GE{GQ7vv;c-tTIMkz0ovO>9j%b5hpa@a*CBJ#W!0@ndSwF|%hMkdFtXiU) z`BEp+yhkt8ZY>tg&uyH@%^%K4jDrbA;et&vnnzZ3z22@e6<27z2Vk13kb7OtISyxv z(XoO-LNQCZe3lfzc%*pNqU<9T+p~teThOEB+~e&U0mC|zS{Q)dJZ)!^1f7L(zg*L> z*vSW%?dR~@@0(}x6-V^A`~ImD;)NaBUnP8;RH=bS2@pk`wp>>8r&jGjmGPy%1BW}v zoPo}ca$~bze@efc3kapuEVW1!%teOZT3j2Tw5=hjiAf02d}7dL0oFC%@=RXp5Ow#% z@a>+AM|YWt$n&e`>sB-32gBcuTi>R>*|8@lp`y6thc7ydyqDsuUn~YzZf|{-R@-3y zL#wx{Ii}xxL_csiW*LBn0-A$>zp4WOmkf6=ilrjlW?-l9+bCd7|i?*b5NTmy<<6NZ0T8$SN@mwdC2f z6jqK=N@bS@!=YSj%>h0}*4p+%0HbTIrE$w7UMT6+AZZ&DAo*qZAAi(OtNbIfl#Dw^ zJWeiCp~zi#&t6x}m9)O^eR4HiLV3QA<<0>HZ8%$^lrSE94Wb}=+MM^!b>n#5&-JQR zkr-CEu9C;_F*7DqDisulV6Pmg$nFL0TPn%~*m^-`Z3^BgU(sNpnx%nW(!eV9A&FvI zHL3X3lw8Wji^6=8KbQDE-e%b?svdFxxdh$8r97@7$ojeI`6AL8Ob6QC$qh&>ZWVDX1F{0vJnT%%mE;GveKWR%C} zM&4d;Jf3s9|HAA)yVUPo`Aq;0do#)uHSXi5*QF*)x@MVVHr+cN)uMZ__F|&Ta#p8d z53TOKtce!PJUuie8UWol-S(`c2nH?UGqJP{!4RR4u$LCfn)q-hj0^f=h(VYy)T6eN zhRO!ja-aDBTcgeyP(8Ua4IdiOog^*CQa?R(cP#9AgL9`j>EX-6Yf1lzX(!~``M1XC zNmM<4<6d~wWZ$Xrk0K}UteTrq@LBBk#MsjkK;pbuVhe)NI7(7Pf(l?lxC7=1Z7Pzl zMbS;nV4NI5_N{1$P)&XC)huOGQ+h^zpYUZfb*1n6>!`#*b3y52LGmi+<4sY5jyD#- zw&$d}DTguLAfnRtjrM*JfqtHqUu6rQoU=g%1E9xk%;)TDm^2<8n-0IhTsQFaek)MY}>PK4;nBk=ow4pF>vzkO& gna%Org-kgQCf=+BeMi^RbuY;YE~rTjend;_cdi8t>i_@% literal 0 HcmV?d00001 diff --git a/Tests/Manual/CPScrollView2/index-debug.html b/Tests/Manual/CPScrollView2/index-debug.html new file mode 100644 index 000000000..0b45db901 --- /dev/null +++ b/Tests/Manual/CPScrollView2/index-debug.html @@ -0,0 +1,103 @@ + + + + + + + + + + + + + + + scrollview + + + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPScrollView2/index.html b/Tests/Manual/CPScrollView2/index.html new file mode 100644 index 000000000..426f900a2 --- /dev/null +++ b/Tests/Manual/CPScrollView2/index.html @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + scrollview + + + + + + + + + + + + +
+
+ + + +
+
+ + + diff --git a/Tests/Manual/CPScrollView2/main.j b/Tests/Manual/CPScrollView2/main.j new file mode 100644 index 000000000..f9bcb7c8d --- /dev/null +++ b/Tests/Manual/CPScrollView2/main.j @@ -0,0 +1,18 @@ +/* + * AppController.j + * scrollview + * + * Created by You on October 3, 2011. + * Copyright 2011, Your Company All rights reserved. + */ + +@import +@import + +@import "AppController.j" + + +function main(args, namedArgs) +{ + CPApplicationMain(args, namedArgs); +} From 8912d31bec6f930cf182996f89a7b236e5674528 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:32:44 +0200 Subject: [PATCH 16/22] do not fade in scrollers on overing --- AppKit/CPScroller.j | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 4844a550d..89bfc9d45 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -736,7 +736,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); return; _allowFadingOut = NO; - [self fadeIn]; + [self setThemeState:CPThemeStateSelected]; } From 866047c116c08d3c7f0ce0c75ec137169a0675ba Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:46:51 +0200 Subject: [PATCH 17/22] fix sone visual glitches --- AppKit/CPScroller.j | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 89bfc9d45..3374ab17d 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -88,6 +88,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); BOOL _allowFadingOut @accessors(getter=allowFadingOut); int _style; CPTimer _timerFadeOut; + BOOL _isMouseOver; } @@ -167,6 +168,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); _hitPart = CPScrollerNoPart; _allowFadingOut = YES; + _isMouseOver = NO; _style = CPScrollerStyleOverlay; _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; @@ -316,6 +318,9 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); // The ordering of these tests is important. We check the knob and // page rects first since they may overlap with the arrows. + if (![self hasThemeState:CPThemeStateSelected]) + return CPScrollerNoPart; + if (CGRectContainsPoint([self rectForPart:CPScrollerKnob], aPoint)) return CPScrollerKnob; @@ -443,6 +448,12 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); */ - (void)fadeIn { + if (_isMouseOver) + [self setThemeState:CPThemeStateSelected]; + + if (_timerFadeOut) + [_timerFadeOut invalidate]; + [self setAlphaValue:1.0]; } @@ -736,20 +747,18 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); return; _allowFadingOut = NO; - - [self setThemeState:CPThemeStateSelected]; + _isMouseOver = YES; + if ([self alphaValue] > 0) + [self setThemeState:CPThemeStateSelected]; } - (void)mouseExited:(CPEvent)anEvent { - if ([self isHidden]) - return; - - if (![self isEnabled]) + if ([self isHidden] || ![self isEnabled] || !_isMouseOver) return; _allowFadingOut = YES; - + _isMouseOver = NO; if (_timerFadeOut) [_timerFadeOut invalidate]; _timerFadeOut = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_performFadeOut:) userInfo:nil repeats:NO]; @@ -762,7 +771,6 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); - (void)animationDidEnd:(CPAnimation)animation { [self unsetThemeState:CPThemeStateSelected]; - [self setHidden:NO]; } @end @@ -790,6 +798,7 @@ var CPScrollerControlSizeKey = @"CPScrollerControlSize", _hitPart = CPScrollerNoPart; _allowFadingOut = YES; + _isMouseOver = NO; _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; From 3655724810089dcf885547d5b86da1b7455dc806 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:51:49 +0200 Subject: [PATCH 18/22] fix missing labels in test project --- .../CPScrollView2/Resources/MainMenu.xib | 29 ++++--------------- 1 file changed, 6 insertions(+), 23 deletions(-) diff --git a/Tests/Manual/CPScrollView2/Resources/MainMenu.xib b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib index b54f6b87f..774ec1911 100644 --- a/Tests/Manual/CPScrollView2/Resources/MainMenu.xib +++ b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib @@ -1134,7 +1134,7 @@ - + 256 YES @@ -1153,14 +1153,12 @@ 274 {552, 244} - _NS:414 {{1, 1}, {567, 259}} - _NS:412 @@ -1180,8 +1178,6 @@ 256 {{553, 1}, {15, 253}} - - _NS:419 _doScroller: @@ -1193,7 +1189,6 @@ 256 {{1, 245}, {561, 15}} - _NS:423 1 @@ -1204,7 +1199,6 @@ {{20, 20}, {569, 261}} - _NS:410 133169 @@ -1217,7 +1211,6 @@ 268 {{326, 324}, {136, 32}} - _NS:161 YES @@ -1245,7 +1238,6 @@ 268 {{462, 323}, {133, 32}} - _NS:161 YES @@ -1269,7 +1261,6 @@ 268 {{460, 292}, {135, 32}} - _NS:161 YES @@ -1293,7 +1284,6 @@ 268 {{326, 293}, {136, 32}} - _NS:161 YES @@ -1317,7 +1307,6 @@ 268 {{147, 327}, {148, 26}} - _NS:179 YES @@ -1387,7 +1376,6 @@ 268 {{147, 297}, {148, 26}} - _NS:179 YES @@ -1446,7 +1434,6 @@ 268 {{17, 334}, {125, 17}} - _NS:3936 YES @@ -1474,7 +1461,6 @@ 268 {{17, 303}, {125, 17}} - _NS:3936 YES @@ -1491,8 +1477,6 @@ {609, 372} - - {{0, 0}, {1680, 1028}} @@ -1510,10 +1494,9 @@ 289 - {{656, -231}, {84, 17}} + {{481, 20}, {84, 17}} - _NS:3936 YES @@ -1530,7 +1513,7 @@ 265 - {{656, 428}, {87, 17}} + {{478, 512}, {87, 17}} @@ -1550,7 +1533,7 @@ 292 - {{17, -231}, {75, 17}} + {{17, 20}, {75, 17}} @@ -1570,7 +1553,7 @@ 268 - {{17, 428}, {54, 17}} + {{17, 512}, {54, 17}} @@ -1588,7 +1571,7 @@ - {629, 465} + {582, 549} From c9a645285aa9d60eb50aade8fdb54fc8391cd5bb Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Wed, 5 Oct 2011 17:54:53 +0200 Subject: [PATCH 19/22] make labels selectable in test project to test accessibility of stuff under the overlay scrollers --- Tests/Manual/CPScrollView2/Resources/MainMenu.xib | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Tests/Manual/CPScrollView2/Resources/MainMenu.xib b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib index 774ec1911..853fdab56 100644 --- a/Tests/Manual/CPScrollView2/Resources/MainMenu.xib +++ b/Tests/Manual/CPScrollView2/Resources/MainMenu.xib @@ -1500,7 +1500,7 @@ _NS:3936 YES - 68288064 + 70385217 71304192 Bottom right @@ -1520,7 +1520,7 @@ _NS:3936 YES - 68288064 + 70385217 71304192 Top right @@ -1540,7 +1540,7 @@ _NS:3936 YES - 68288064 + 70385217 272630784 Bottom left @@ -1560,7 +1560,7 @@ _NS:3936 YES - 68288064 + 70385217 272630784 Top left From 2451b083067b92ef4ccd7cf58e215799f150c78b Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Oct 2011 13:38:31 +0200 Subject: [PATCH 20/22] fix accidental global --- AppKit/CPScroller.j | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index 3374ab17d..f6b1b3535 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -170,11 +170,11 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); _allowFadingOut = YES; _isMouseOver = NO; _style = CPScrollerStyleOverlay; - _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] + var paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; - [_animationScroller setViewAnimations:[_paramAnimFadeOut]]; + [_animationScroller setViewAnimations:[paramAnimFadeOut]]; [_animationScroller setDelegate:self]; [self setAlphaValue:0.0]; [self _calculateIsVertical]; @@ -740,6 +740,8 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); - (void)mouseEntered:(CPEvent)anEvent { + [super mouseEntered:anEvent]; + if (_timerFadeOut) [_timerFadeOut invalidate]; @@ -748,17 +750,21 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); _allowFadingOut = NO; _isMouseOver = YES; + if ([self alphaValue] > 0) [self setThemeState:CPThemeStateSelected]; } - (void)mouseExited:(CPEvent)anEvent { + [super mouseExited:anEvent]; + if ([self isHidden] || ![self isEnabled] || !_isMouseOver) return; _allowFadingOut = YES; _isMouseOver = NO; + if (_timerFadeOut) [_timerFadeOut invalidate]; _timerFadeOut = [CPTimer scheduledTimerWithTimeInterval:1.2 target:self selector:@selector(_performFadeOut:) userInfo:nil repeats:NO]; @@ -799,10 +805,10 @@ var CPScrollerControlSizeKey = @"CPScrollerControlSize", _allowFadingOut = YES; _isMouseOver = NO; - _paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] + var paramAnimFadeOut = [CPDictionary dictionaryWithObjects:[self, CPViewAnimationFadeOutEffect] forKeys:[CPViewAnimationTargetKey, CPViewAnimationEffectKey]]; _animationScroller = [[CPViewAnimation alloc] initWithDuration:0.2 animationCurve:CPAnimationEaseInOut]; - [_animationScroller setViewAnimations:[_paramAnimFadeOut]]; + [_animationScroller setViewAnimations:[paramAnimFadeOut]]; [_animationScroller setDelegate:self]; [self setAlphaValue:0.0]; From 140ae354a159b1fc40718fc77d617cdb928c346c Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Oct 2011 15:10:19 +0200 Subject: [PATCH 21/22] try to get 'NSScrollerKnobStyle'. for NSTableView in Xcode, this is not positioned and cause a crash --- Tools/nib2cib/NSScrollView.j | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Tools/nib2cib/NSScrollView.j b/Tools/nib2cib/NSScrollView.j index eb99bd695..2d1b76d11 100644 --- a/Tools/nib2cib/NSScrollView.j +++ b/Tools/nib2cib/NSScrollView.j @@ -40,7 +40,11 @@ _bottomCornerView = [[CPView alloc] init]; [self addSubview:_bottomCornerView]; - [self setScrollerKnobStyle:[aCoder decodeObjectForKey:"NSScrollerKnobStyle"] || CPScrollerKnobStyleDefault]; + + var knobStyle = 0; + try { knobStyle = [aCoder decodeObjectForKey:"NSScrollerKnobStyle"]; } catch (e){} + + [self setScrollerKnobStyle:knobStyle]; _hasVerticalScroller = !!(flags & (1 << 4)); _hasHorizontalScroller = !!(flags & (1 << 5)); From 210bb3e5c9f650d2404b1ff5747414ac5e1530e8 Mon Sep 17 00:00:00 2001 From: Antoine Mercadal Date: Thu, 6 Oct 2011 16:41:36 +0200 Subject: [PATCH 22/22] prevent scrollers to show track on mouse enter when ratio is 1 --- AppKit/CPScroller.j | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AppKit/CPScroller.j b/AppKit/CPScroller.j index f6b1b3535..fb2e97953 100644 --- a/AppKit/CPScroller.j +++ b/AppKit/CPScroller.j @@ -448,7 +448,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); */ - (void)fadeIn { - if (_isMouseOver) + if (_isMouseOver && _knobProportion != 1.0) [self setThemeState:CPThemeStateSelected]; if (_timerFadeOut) @@ -751,7 +751,7 @@ CPThemeStateScrollerKnobDark = CPThemeState("scroller-knob-dark"); _allowFadingOut = NO; _isMouseOver = YES; - if ([self alphaValue] > 0) + if ([self alphaValue] > 0 && _knobProportion != 1.0) [self setThemeState:CPThemeStateSelected]; }