Оценка границ пути (создается только с помощью строки) - PullRequest
0 голосов
/ 12 июня 2018

Я хотел бы нарисовать строку с путем и центрировать ее внутри прямоугольника.Проблема в том, что я не знаю, как оценить размер / границы пути.Я попытался использовать соответствующий размер той же строки, нарисованной обычным способом (gc.drawString ...) и после использования gc.textExtent (String), но, очевидно, два размера отличаются, поэтому результат не в порядке....

У вас есть идея, как оценить размер пути, чтобы нарисовать его по центру прямоугольника?

Проблема в том, что рисование строки с путем больше, чемрисование строки обычным способом.Вы можете проверить это с помощью этого простого кода.

import org.eclipse.swt.SWT;
import org.eclipse.swt.SWTException;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Path;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;

public class ShapeText 
{
    static Path path=null;
    public static void main(String[] args) 
    {
        final Display display = new Display();
        Font font = new Font(display, "Times", 50, SWT.BOLD);
        final Color blue = display.getSystemColor(SWT.COLOR_BLUE);
        final Color red = display.getSystemColor(SWT.COLOR_RED);

        try {

        } catch (SWTException e) {
            System.out.println(e.getMessage());
            display.dispose();
            return;
        }

        Shell shell = new Shell(display);
        shell.addListener(SWT.Paint, new Listener() 
        {
            public void handleEvent(Event e) 
            {   


                path = new Path(display);
                e.gc.setFont(font);
                path.addString("Path is different", 0, 0, font);
                GC gc = e.gc;
                gc.setAntialias(SWT.ON);
                gc.setTextAntialias(SWT.ON);

                gc.setForeground(blue);
                gc.setBackground(blue);
                //gc.fillPath(path);
                gc.drawPath(path);
                gc.setForeground(red);
                gc.drawString("Path is different", 0, 0,true);
            }
        });

        shell.setSize(530,120);

        shell.open();
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

        path.dispose();
        font.dispose();
        display.dispose();
    }
}

Это результат:

enter image description here

Как вы видите строкунарисованный с помощью Path (синим цветом) длиннее другого (красным) ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...