Search in sources :

Example 1 with Canvas

use of com.google.gwt.canvas.client.Canvas in project openremote by openremote.

the class DatapointBrowser method createChart.

protected void createChart() {
    addLabel(environment.getMessages().historicalData());
    Canvas canvas = Canvas.createIfSupported();
    if (canvas == null) {
        add(new Label(environment.getMessages().canvasNotSupported()));
        return;
    }
    canvas.getCanvasElement().setWidth(width);
    canvas.getCanvasElement().setHeight(height);
    FlowPanel canvasContainer = new FlowPanel();
    canvasContainer.setWidth(width + "px");
    canvasContainer.setHeight(height + "px");
    canvasContainer.getElement().getStyle().setProperty("margin", "0 auto");
    canvasContainer.add(canvas);
    add(canvasContainer);
    Form controlForm = new Form();
    controlForm.getElement().getStyle().setWidth(width, PX);
    controlForm.getElement().getStyle().setMarginTop(0.4, EM);
    controlForm.getElement().getStyle().setProperty("margin", "0 auto");
    add(controlForm);
    FormGroup controlFormGroup = new FormGroup();
    controlForm.add(controlFormGroup);
    FormLabel controlFormLabel = new FormLabel(environment.getMessages().showChartAggregatedFor());
    controlFormLabel.addStyleName("end-justified");
    controlFormGroup.setFormLabel(controlFormLabel);
    FormField controlFormField = new FormField();
    controlFormGroup.setFormField(controlFormField);
    intervalListBox = new FormValueListBox<>(new AbstractRenderer<DatapointInterval>() {

        @Override
        public String render(DatapointInterval interval) {
            return environment.getMessages().datapointInterval(interval.name());
        }
    });
    intervalListBox.addValueChangeHandler(event -> refresh(timestamp));
    intervalListBox.setValue(interval);
    intervalListBox.setAcceptableValues(Arrays.asList(DatapointInterval.values()));
    intervalListBox.setEnabled(true);
    controlFormField.add(intervalListBox);
    timeOutput = new FormOutputText();
    timeOutput.addStyleName("flex");
    timeOutput.getElement().getStyle().setFontSize(0.8, EM);
    controlFormField.add(timeOutput);
    FormGroupActions controlFormActions = new FormGroupActions();
    controlFormGroup.setFormGroupActions(controlFormActions);
    FormButton previousButton = new FormButton();
    previousButton.setIcon("arrow-circle-left");
    previousButton.setText(environment.getMessages().previous());
    previousButton.addClickHandler(event -> refresh(calculateTimestamp(true)));
    controlFormActions.add(previousButton);
    nextButton = new FormButton();
    nextButton.setIcon("arrow-circle-right");
    nextButton.setText(environment.getMessages().next());
    nextButton.addClickHandler(event -> refresh(calculateTimestamp(false)));
    controlFormActions.add(nextButton);
    chart = ChartUtil.createLineChart(canvas.getContext2d());
    // TODO: Ugly, sometimes the chart is not ready (chart == undefined but !null in Java...) so we wait a bit
    Browser.getWindow().setTimeout(() -> refresh(timestamp), 50);
}
Also used : DatapointInterval(org.openremote.model.datapoint.DatapointInterval) Canvas(com.google.gwt.canvas.client.Canvas) Label(com.google.gwt.user.client.ui.Label) AbstractRenderer(com.google.gwt.text.shared.AbstractRenderer) FlowPanel(com.google.gwt.user.client.ui.FlowPanel)

Example 2 with Canvas

use of com.google.gwt.canvas.client.Canvas in project rstudio by rstudio.

the class FontDetector method isFontSupported.

public static boolean isFontSupported(String fontName) {
    SimplePanel panel = null;
    try {
        // default font name as a reference point
        final String defaultFontName = "Arial";
        if (defaultFontName.equals(fontName))
            return true;
        // make sure canvas is supported
        if (!Canvas.isSupported())
            return false;
        // add a temporary div to the dom
        panel = new SimplePanel();
        panel.setHeight("200px");
        panel.getElement().getStyle().setVisibility(Visibility.HIDDEN);
        panel.getElement().getStyle().setOverflow(Overflow.SCROLL);
        RootPanel.get().add(panel, -2000, -2000);
        // add a canvas element to the div and get the 2d drawing context
        final Canvas canvas = Canvas.createIfSupported();
        canvas.setWidth("512px");
        canvas.setHeight("64px");
        canvas.getElement().getStyle().setLeft(400, Unit.PX);
        canvas.getElement().getStyle().setBackgroundColor("#ffe");
        panel.add(canvas);
        final Context2d ctx = canvas.getContext2d();
        ctx.setFillStyle("#000000");
        // closure to generate a hash for a font
        class HashGenerator {

            public String getHash(String fontName) {
                ctx.setFont("57px " + fontName + ", " + defaultFontName);
                int width = canvas.getOffsetWidth();
                int height = canvas.getOffsetHeight();
                ctx.clearRect(0, 0, width, height);
                ctx.fillText("TheQuickBrownFox", 2, 50);
                return canvas.toDataUrl();
            }
        }
        ;
        // get hashes and compare them
        HashGenerator hashGenerator = new HashGenerator();
        String defaultHash = hashGenerator.getHash(defaultFontName);
        String fontHash = hashGenerator.getHash(fontName);
        return !defaultHash.equals(fontHash);
    } catch (Exception ex) {
        Debug.log(ex.toString());
        return false;
    } finally {
        if (panel != null)
            RootPanel.get().remove(panel);
    }
}
Also used : Context2d(com.google.gwt.canvas.dom.client.Context2d) Canvas(com.google.gwt.canvas.client.Canvas) SimplePanel(com.google.gwt.user.client.ui.SimplePanel)

Aggregations

Canvas (com.google.gwt.canvas.client.Canvas)2 Context2d (com.google.gwt.canvas.dom.client.Context2d)1 AbstractRenderer (com.google.gwt.text.shared.AbstractRenderer)1 FlowPanel (com.google.gwt.user.client.ui.FlowPanel)1 Label (com.google.gwt.user.client.ui.Label)1 SimplePanel (com.google.gwt.user.client.ui.SimplePanel)1 DatapointInterval (org.openremote.model.datapoint.DatapointInterval)1