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;
  }
}
Example #2
0
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;
        }
    }
}