void graphics::color::ColorPatternUtil::GeneratePattern(IN COLOR_PATTERN colorPattern, IN const graphics::color::ColorValue &color, OUT std::shared_ptr<graphics::color::ColorSet> colorSet) { colorSet->Clear(); switch (colorPattern) { case COLOR_PATTERN_FLAT: { colorSet->AddColor(std::make_shared<graphics::color::SolidColor>(color)); } break; case COLOR_PATTERN_GRADIENT: { auto linearGradientColor = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.4f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.4f))); linearGradientColor->SetColor(collection); colorSet->AddColor(linearGradientColor); } break; case COLOR_PATTERN_CONVEX: { auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection1; collection1.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.4f))); collection1.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.4f))); linearGradientColor1->SetColor(collection1); colorSet->AddColor(linearGradientColor1); auto linearGradientColor2 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor2->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection2; collection2.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.2f))); collection2.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.2f))); linearGradientColor2->SetColor(collection2); colorSet->AddColor(linearGradientColor2); } break; case COLOR_PATTERN_CONCAVE: { auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection1; collection1.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndDarker(0.4f))); collection1.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndBrighter(0.4f))); linearGradientColor1->SetColor(collection1); colorSet->AddColor(linearGradientColor1); auto linearGradientColor2 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor2->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection2; collection2.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndDarker(0.2f))); collection2.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndBrighter(0.2f))); linearGradientColor2->SetColor(collection2); colorSet->AddColor(linearGradientColor2); } break; case COLOR_PATTERN_CONVEX_FRAME: { auto solidColor1 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor1); auto solidColor2 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor2); auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.2f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.2f))); linearGradientColor1->SetColor(collection); colorSet->AddColor(linearGradientColor1); } break; case COLOR_PATTERN_CONCAVE_FRAME: { auto solidColor1 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor1); auto solidColor2 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor2); auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.2f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.2f))); linearGradientColor1->SetColor(collection); colorSet->AddColor(linearGradientColor1); } break; case COLOR_PATTERN_FRAME: { auto solidColor1 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor1); auto solidColor2 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor2); auto solidColor3 = std::make_shared<graphics::color::SolidColor>(color); colorSet->AddColor(solidColor3); auto solidColor4 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor4); auto solidColor5 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor5); auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndBrighter(0.2f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndDarker(0.2f))); linearGradientColor1->SetColor(collection); colorSet->AddColor(linearGradientColor1); } break; case COLOR_PATTERN_CONVEX_METAL: { auto solidColor1 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor1); auto solidColor2 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor2); auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndChangeBrightness(0.8f))); collection.AddGradientStop(graphics::color::GradientStop(0.5f, color.CloneAndChangeBrightness(0.55f))); collection.AddGradientStop(graphics::color::GradientStop(0.5f, color.CloneAndChangeBrightness(0.45f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndChangeBrightness(0.2f))); linearGradientColor1->SetColor(collection); colorSet->AddColor(linearGradientColor1); } break; case COLOR_PATTERN_CONCAVE_METAL: { auto solidColor1 = std::make_shared<graphics::color::SolidColor>(color.CloneAndBrighter(0.3f)); colorSet->AddColor(solidColor1); auto solidColor2 = std::make_shared<graphics::color::SolidColor>(color.CloneAndDarker(0.3f)); colorSet->AddColor(solidColor2); auto linearGradientColor1 = std::make_shared<graphics::color::LinearGradientColor>(); linearGradientColor1->SetGradientDirection(graphics::GRADIENT_DIRECTION_TOP_BOTTOM); graphics::color::GradientStopCollection collection; collection.AddGradientStop(graphics::color::GradientStop(0.0f, color.CloneAndChangeBrightness(0.8f))); collection.AddGradientStop(graphics::color::GradientStop(0.5f, color.CloneAndChangeBrightness(0.55f))); collection.AddGradientStop(graphics::color::GradientStop(0.5f, color.CloneAndChangeBrightness(0.45f))); collection.AddGradientStop(graphics::color::GradientStop(1.0f, color.CloneAndChangeBrightness(0.2f))); linearGradientColor1->SetColor(collection); colorSet->AddColor(linearGradientColor1); } break; } }
void graphics::brush::BrushSet::SetColorSet(const graphics::color::ColorSet &colorSet) { Clear(); for (size_t i = 0; i < colorSet.GetNumberOfColors(); ++i) { auto color = colorSet.GetColor(i); switch (color->GetColorType()) { case graphics::color::IColor::COLOR_TYPE_SOLID_COLOR: { auto solidColor = std::dynamic_pointer_cast<graphics::color::SolidColor>(color); auto solidBrush = std::make_shared<graphics::brush::SolidColorBrush>(); solidBrush->SetColor(solidColor->GetCurrentColor()); if (solidColor->GetLabel().length() > 0) { solidBrush->SetLabel(solidColor->GetLabel()); m_labelToBrashMap.insert( std::make_pair<std::wstring, std::shared_ptr<graphics::brush::IBrush>>( solidColor->GetLabel(), solidBrush)); } m_brushes.push_back(solidBrush); } break; case graphics::color::IColor::COLOR_TYPE_LINEAR_GRADIENT_COLOR: { auto linearGradientColor = std::dynamic_pointer_cast<graphics::color::LinearGradientColor>(color); auto linearBrush = std::make_shared<graphics::brush::LinearGradientBrush>(); linearBrush->SetGradientDirection(linearGradientColor->GetGradientDirection()); linearBrush->SetGradientStops(linearGradientColor->GetCurrentColor()); if (linearGradientColor->GetLabel().length() > 0) { linearBrush->SetLabel(linearGradientColor->GetLabel()); m_labelToBrashMap.insert( std::make_pair<std::wstring, std::shared_ptr<graphics::brush::IBrush>>( linearGradientColor->GetLabel(), linearBrush)); } m_brushes.push_back(linearBrush); } break; case graphics::color::IColor::COLOR_TYPE_RADIAL_GRADIENT_COLOR: { auto radialGradientColor = std::dynamic_pointer_cast<graphics::color::RadialGradientColor>(color); auto radialBrush = std::make_shared<graphics::brush::RadialGradientBrush>(); radialBrush->SetGradientOriginOffsetRate( radialGradientColor->GetGradientOffsetX(), radialGradientColor->GetGradientOffsetY()); radialBrush->SetGradientStops(radialGradientColor->GetCurrentColor()); if (radialGradientColor->GetLabel().length() > 0) { radialBrush->SetLabel(radialGradientColor->GetLabel()); m_labelToBrashMap.insert( std::make_pair<std::wstring, std::shared_ptr<graphics::brush::IBrush>>( radialGradientColor->GetLabel(), radialBrush)); } m_brushes.push_back(radialBrush); } break; } } }