예제 #1
0
  private static QImage qtLogoImage(int width, int height, boolean render_logo) {
    QBrush tt_green = new QBrush(color_green);
    QBrush tt_black = new QBrush(new QColor(0, 0, 0));

    QImage image = new QImage(width, height, QImage.Format.Format_RGB32);
    QPainter p = new QPainter();
    p.begin(image);
    p.setRenderHint(QPainter.RenderHint.Antialiasing);

    // Fill the background
    p.scale(width, height);
    p.setPen(new QPen(tt_black, 0.05));
    p.setBrush(tt_green);
    p.drawRect(0, 0, 1, 1);

    if (render_logo) {
      // set up painter for the logo drawing..
      p.setPen(Qt.PenStyle.NoPen);
      p.setBrush(new QBrush(QColor.black));
      p.translate(0.5, 0.5);
      p.rotate(-45);

      double thickness = 0.13;
      double inner_radius = 0.24;
      double outer_radius = inner_radius + thickness;

      double ir2 = inner_radius * 2;
      double or2 = outer_radius * 2;
      double t_2 = thickness / 2;

      // draw the black circle
      QPainterPath circle_path = new QPainterPath();
      circle_path.addEllipse(-inner_radius, -inner_radius, ir2, ir2);
      circle_path.addEllipse(-outer_radius, -outer_radius, or2, or2);
      p.drawPath(circle_path);

      QPainterPath t_path = new QPainterPath();
      t_path.addRect(-t_2, 0, thickness, 0.48);
      t_path.addRect(-0.17, -t_2, 0.34, thickness);
      t_path.setFillRule(Qt.FillRule.WindingFill);
      p.drawPath(t_path);
    }
    p.end();

    return image;
  }
예제 #2
0
  private static QImage composeCup(QImage bg_image, QImage fg_image, int size, int warp) {
    double coffey_alpha = 1;
    QColor dark_brown = QColor.fromRgbF(0.3, 0.15, 0, coffey_alpha);
    QColor light_brown = QColor.fromRgbF(0.66, 0.33, 0, coffey_alpha);
    QColor highlight = QColor.fromRgbF(1, 1, 0.8, coffey_alpha);
    QColor transparent = QColor.transparent;
    double highlight_pos = 0.4;
    double highlight_size = 0.05;

    QImage combined =
        new QImage(
            size + size / 2, size + warp * 2 + size / 8, QImage.Format.Format_ARGB32_Premultiplied);
    combined.fill(0);

    QPainter p = new QPainter();
    p.begin(combined);
    p.setRenderHint(QPainter.RenderHint.Antialiasing);
    p.setPen(Qt.PenStyle.NoPen);

    // draw the background
    p.drawImage(0, 0, bg_image);

    // Draw the coffey
    QRectF coffey_bounds = new QRectF(0, warp, size, 2 * warp);
    QConicalGradient cg =
        new QConicalGradient(
            coffey_bounds.width() * GOLDEN_MEAN + warp * 0.1,
            warp * 1.2 + coffey_bounds.height() / 2.0,
            -30);
    cg.setColorAt(0, dark_brown);
    cg.setColorAt(highlight_pos - highlight_size, light_brown);
    cg.setColorAt(0.4, highlight);
    cg.setColorAt(highlight_pos + highlight_size, light_brown);
    cg.setColorAt(1, dark_brown);
    p.setPen(new QPen(new QBrush(QColor.black), size * 0.01));
    p.setBrush(new QBrush(cg));
    p.drawEllipse(coffey_bounds);

    // draw the foreground
    p.drawImage(0, warp, fg_image);

    // Draw the handle
    double handle_dim = size * 0.8;
    QRectF handle_bounds = new QRectF(size - handle_dim / 2, size / 3, handle_dim, handle_dim);
    double hcx = handle_bounds.width() / 2;
    double hcy = handle_bounds.height() / 2;
    QImage handle_im =
        new QImage(handle_bounds.size().toSize(), QImage.Format.Format_ARGB32_Premultiplied);
    {
      handle_im.fill(0);
      QPainter ph = new QPainter();
      ph.begin(handle_im);
      QRadialGradient rg = new QRadialGradient(hcx, hcy, hcx, hcx, hcy + size / 30);
      double ir = 0.5;
      double or = 0.9;
      double aa = 0.02;
      double shade = 0.08;
      rg.setColorAt(ir - aa, transparent);
      rg.setColorAt(ir, QColor.fromRgbF(0, 0, 0, 1));
      rg.setColorAt(ir + shade, color_green);
      rg.setColorAt((ir + or) / 2, QColor.fromRgbF(0.8, 0.85, 0.6));
      rg.setColorAt(or - shade, color_green);
      rg.setColorAt(or, QColor.fromRgbF(0, 0, 0, 1));
      rg.setColorAt(or + aa, transparent);
      ph.setBrush(new QBrush(rg));
      ph.setPen(Qt.PenStyle.NoPen);
      ph.drawEllipse(0, 0, (int) handle_bounds.width(), (int) handle_bounds.height());

      QLinearGradient lg = new QLinearGradient(0, 0, handle_bounds.width(), 0);
      lg.setColorAt(0.42, transparent);
      lg.setColorAt(0.47, QColor.fromRgbF(0, 0, 0));
      ph.setBrush(new QBrush(lg));
      ph.setCompositionMode(QPainter.CompositionMode.CompositionMode_DestinationIn);
      ph.drawRect(0, 0, (int) handle_bounds.width(), (int) handle_bounds.height());
      ph.end();
    }
    p.drawImage(handle_bounds.topLeft(), handle_im);

    // The drop shadow...
    QRadialGradient dsg = new QRadialGradient(0, 0, 0.5, 0, 0);
    dsg.setColorAt(0, QColor.fromRgbF(0, 0, 0, .75));
    dsg.setColorAt(1, transparent);
    p.translate(size * 3 / 4, size + warp * 1.4);
    p.scale(size * 1.5, size / 2);
    p.setBrush(new QBrush(dsg));
    p.setPen(Qt.PenStyle.NoPen);
    p.setCompositionMode(QPainter.CompositionMode.CompositionMode_DestinationOver);
    p.drawEllipse(new QRectF(-0.5, -0.5, 1, 1));
    //      p.drawEllipse(new QRectF(size - size / 2, size + warp - size / 2, size, size));

    p.end();

    return combined;
  }