FLinearColor UEditorStyleSettings::GetSubduedSelectionColor() const { FLinearColor SubduedSelectionColor = SelectionColor.LinearRGBToHSV(); SubduedSelectionColor.G *= 0.55f; // take the saturation SubduedSelectionColor.B *= 0.8f; // and brightness down return SubduedSelectionColor.HSVToLinearRGB(); }
FLinearColor FLinearColorUtils::AdjustSaturation(const FLinearColor& InColor, float SaturationFactor) { // Convert to HSV space for the saturation adjustment FLinearColor HSVColor = LinearRGBToHSV(InColor); // Clamp the range to what's expected SaturationFactor = FMath::Clamp(SaturationFactor, 0.0f, 2.0f); if (SaturationFactor < 1.0f) { HSVColor.G = FMath::Lerp(0.0f, HSVColor.G, SaturationFactor); } else { HSVColor.G = FMath::Lerp(HSVColor.G, 1.0f, SaturationFactor - 1.0f); } // Convert back to linear RGB return HSVColor.HSVToLinearRGB(); }
void UKismetMathLibrary::HSVToRGB_Vector(const FLinearColor HSV, FLinearColor& RGB) { RGB = HSV.HSVToLinearRGB(); }
void SColorGradientEditor::OnCancelSelectedStopColorChange( FLinearColor PreviousColor ) { SelectedStop.SetColor( PreviousColor.HSVToLinearRGB(), *CurveOwner ); CurveOwner->ModifyOwner(); }
bool FProfilerManager::TrackStat( const uint32 StatID ) { bool bAdded = false; // Check if all profiler instances have this stat ready. int32 NumReadyStats = 0; for( auto It = GetProfilerInstancesIterator(); It; ++It ) { const FProfilerSessionRef ProfilerSession = It.Value(); NumReadyStats += ProfilerSession->GetAggregatedStat(StatID) != nullptr ? 1 : 0; } const bool bStatIsReady = NumReadyStats == GetProfilerInstancesNum(); if( StatID != 0 && bStatIsReady ) { FTrackedStat* TrackedStat = TrackedStats.Find( StatID ); if( TrackedStat == nullptr ) { // R = H, G = S, B = V const FLinearColor& ColorAverage = GetColorForStatID( StatID ); const FLinearColor ColorAverageHSV = ColorAverage.LinearRGBToHSV(); FLinearColor ColorBackgroundHSV = ColorAverageHSV; ColorBackgroundHSV.G = FMath::Max( 0.0f, ColorBackgroundHSV.G-0.25f ); FLinearColor ColorExtremesHSV = ColorAverageHSV; ColorExtremesHSV.G = FMath::Min( 1.0f, ColorExtremesHSV.G+0.25f ); ColorExtremesHSV.B = FMath::Min( 1.0f, ColorExtremesHSV.B+0.25f ); const FLinearColor ColorBackground = ColorBackgroundHSV.HSVToLinearRGB(); const FLinearColor ColorExtremes = ColorExtremesHSV.HSVToLinearRGB(); TrackedStat = &TrackedStats.Add( StatID, FTrackedStat(CreateCombinedGraphDataSource( StatID ),ColorAverage,ColorExtremes,ColorBackground,StatID) ); bAdded = true; // @TODO: Convert a reference parameter to copy parameter/sharedptr/ref/weak, to avoid problems when a reference is no longer valid. TrackedStatChangedEvent.Broadcast( *TrackedStat, true ); } if( TrackedStat != nullptr ) { uint32 NumAddedInstances = 0; bool bMetadataInitialized = false; for( auto It = GetProfilerInstancesIterator(); It; ++It ) { const FGuid& SessionInstanceID = It.Key();// ProfilerSessionInstanceID, ProfilerInstanceID, InstanceID const FProfilerSessionRef ProfilerSession = It.Value(); const bool bInstanceAdded = TrackStatForSessionInstance( StatID, SessionInstanceID ); NumAddedInstances += bInstanceAdded ? 1 : 0; // Initialize metadata for combine graph data source. // TODO: This should be checked against the remaining elements to detect inconsistent data. // The first instance should be the main. if( !bMetadataInitialized ) { const bool bIsStatReady = ProfilerSession->GetMetaData()->IsStatInitialized( StatID ); if( bIsStatReady ) { const FProfilerStatMetaDataRef MetaData = ProfilerSession->GetMetaData(); const FProfilerStat& Stat = MetaData->GetStatByID( StatID ); const FProfilerGroup& Group = Stat.OwningGroup(); TrackedStat->CombinedGraphDataSource->Initialize( Stat.Name().GetPlainNameString(), Group.ID(), Group.Name().GetPlainNameString(), Stat.Type(), ProfilerSession->GetCreationTime() ); bMetadataInitialized = true; } } } } } return bAdded; }
int32 SColorBlock::OnPaint( const FGeometry& AllottedGeometry, const FSlateRect& MyClippingRect, FSlateWindowElementList& OutDrawElements, int32 LayerId, const FWidgetStyle& InWidgetStyle, bool bParentEnabled ) const { const FSlateBrush* GenericBrush = FCoreStyle::Get().GetBrush( "GenericWhiteBox" ); const ESlateDrawEffect::Type DrawEffects = ESlateDrawEffect::None; FLinearColor InColor = Color.Get(); if (ColorIsHSV.Get()) { InColor = InColor.HSVToLinearRGB(); } if (IgnoreAlpha.Get()) { InColor.A = 1.f; } const FColor DrawColor = InColor.ToFColor(bUseSRGB.Get()); if( ShowBackgroundForAlpha.Get() && DrawColor.A < 255 ) { // If we are showing a background pattern and the colors is transparent, draw a checker pattern const FSlateBrush* CheckerBrush = FCoreStyle::Get().GetBrush("ColorPicker.AlphaBackground"); FSlateDrawElement::MakeBox( OutDrawElements, LayerId, AllottedGeometry.ToPaintGeometry(), CheckerBrush, MyClippingRect, DrawEffects ); } // determine if it is HDR const float MaxRGB = FMath::Max3(InColor.R, InColor.G, InColor.B); if (MaxRGB > 1.f) { FLinearColor NormalizedLinearColor = InColor / MaxRGB; NormalizedLinearColor.A = InColor.A; const FColor DrawNormalizedColor = InWidgetStyle.GetColorAndOpacityTint() * NormalizedLinearColor.ToFColor(bUseSRGB.Get()); FLinearColor ClampedLinearColor = InColor; ClampedLinearColor.A = InColor.A * MaxRGB; const FColor DrawClampedColor = InWidgetStyle.GetColorAndOpacityTint() * ClampedLinearColor.ToFColor(bUseSRGB.Get()); TArray<FSlateGradientStop> GradientStops; GradientStops.Add( FSlateGradientStop( FVector2D::ZeroVector, DrawNormalizedColor ) ); GradientStops.Add( FSlateGradientStop( AllottedGeometry.Size * 0.5f, DrawClampedColor ) ); GradientStops.Add( FSlateGradientStop( AllottedGeometry.Size, DrawNormalizedColor ) ); FSlateDrawElement::MakeGradient( OutDrawElements, LayerId + 1, AllottedGeometry.ToPaintGeometry(), GradientStops, (AllottedGeometry.Size.X > AllottedGeometry.Size.Y) ? Orient_Vertical : Orient_Horizontal, MyClippingRect, DrawEffects ); } else { FSlateDrawElement::MakeBox( OutDrawElements, LayerId + 1, AllottedGeometry.ToPaintGeometry(), GenericBrush, MyClippingRect, DrawEffects, InWidgetStyle.GetColorAndOpacityTint() * DrawColor ); } return LayerId + 1; }