diff --git a/main.cc b/main.cc index 4be8173..c21c9bb 100644 --- a/main.cc +++ b/main.cc @@ -308,12 +308,12 @@ bool HueSaturationPad( char const* const name , float* const hue , float* const saturation , - const float size = 180.f ) noexcept + const float size = 0.f ) noexcept { using namespace ImGui; // Check/set bounding box - const auto wSize{ ImMin( size , CalcItemWidth( ) ) }; + const auto wSize{ ImMax( size , CalcItemWidth( ) ) }; auto* const win( GetCurrentWindow( ) ); const ImVec2 cPos( win->DC.CursorPos ); const ImRect bb{ cPos , cPos + ImVec2( wSize , wSize ) }; @@ -447,29 +447,38 @@ bool ColorGradingControls( // Mode selection bool modeChanged{ false }; - modeChanged = CGCModeButton_( "Components" , !wheelMode ); + modeChanged = CGCModeButton_( "Color wheel" , wheelMode ); SameLine( ); - modeChanged = CGCModeButton_( "Color wheel" , wheelMode ) || modeChanged; + modeChanged = CGCModeButton_( "Components" , !wheelMode ) || modeChanged; if ( modeChanged ) { storage->SetBool( window->GetID( name ) , !wheelMode ); } bool changed; if ( wheelMode ^ modeChanged ) { - changed = false; const float scRed { ImSaturate( ( *red - base ) / ( unit * 2 ) ) } , scGreen{ ImSaturate( ( *green - base ) / ( unit * 2 ) ) } , scBlue { ImSaturate( ( *blue - base ) / ( unit * 2 ) ) }; - float H , S , V; - ColorConvertRGBtoHSV( scRed , scGreen , scBlue , H , S , V ); + float hue , saturation , value; + ColorConvertRGBtoHSV( scRed , scGreen , scBlue , hue , saturation , value ); - // FIXME test - static float fh = 0.f , fs = 0.f; - HueSaturationPad( "##wheel" , &fh , &fs , 180.f ); + PushMultiItemsWidths( 2 ); + changed = HueSaturationPad( "##wheel" , &hue , &saturation , 180.f ); + PopItemWidth( ); + SameLine( 0 , GetStyle( ).ItemInnerSpacing.x ); + ImVec4 updated{ 0 , 0 , 0 , 1 }; + ColorConvertHSVtoRGB( hue , saturation * .5f , 1 , + updated.x , updated.y , updated.z ); + changed = CGCComponentBar_( &value , 0 , .5 , updated , "V" ) || changed; -#warning implement the fuck + if ( changed ) { + ColorConvertHSVtoRGB( hue , saturation , value , + updated.x , updated.y , updated.z ); + *red = updated.x * unit * 2 + base; + *green = updated.y * unit * 2 + base; + *blue = updated.z * unit * 2 + base; + } } else { - PushItemWidth( -1 ); PushMultiItemsWidths( 3 ); changed = CGCComponentBar_( red , base , unit , ImVec4( 1 , 0 , 0 , 0 ) , "R" ); PopItemWidth( ); @@ -480,9 +489,8 @@ bool ColorGradingControls( SameLine( 0 , GetStyle( ).ItemInnerSpacing.x ); changed = CGCComponentBar_( blue , base , unit , ImVec4( .3 , .3 , 1 , 0 ) , "B" ) || changed; - PopItemWidth( ); - PopItemWidth( ); } + PopItemWidth( ); EndGroup( ); PopID( );