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);
}
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);
}
}
Aggregations