Пример #1
0
  /** Render immediately */
  private void renderSync() {
    GraphicalEditorPart editor = mCanvas.getEditorDelegate().getGraphicalEditor();
    if (editor.getReadyLayoutLib(false /*displayError*/) == null) {
      // Don't attempt to render when there is no ready layout library: most likely
      // the targets are loading/reloading.
      return;
    }

    disposeThumbnail();

    Configuration configuration =
        mAlternateInput != null && mAlternateConfiguration != null
            ? mAlternateConfiguration
            : mConfiguration;
    ResourceResolver resolver = getResourceResolver(configuration);
    RenderService renderService = RenderService.create(editor, configuration, resolver);

    if (mIncludedWithin != null) {
      renderService.setIncludedWithin(mIncludedWithin);
    }

    if (mAlternateInput != null) {
      IAndroidTarget target = editor.getRenderingTarget();
      AndroidTargetData data = null;
      if (target != null) {
        Sdk sdk = Sdk.getCurrent();
        if (sdk != null) {
          data = sdk.getTargetData(target);
        }
      }

      // Construct UI model from XML
      DocumentDescriptor documentDescriptor;
      if (data == null) {
        documentDescriptor = new DocumentDescriptor("temp", null); // $NON-NLS-1$
      } else {
        documentDescriptor = data.getLayoutDescriptors().getDescriptor();
      }
      UiDocumentNode model = (UiDocumentNode) documentDescriptor.createUiNode();
      model.setEditor(mCanvas.getEditorDelegate().getEditor());
      model.setUnknownDescriptorProvider(editor.getModel().getUnknownDescriptorProvider());

      Document document = DomUtilities.getDocument(mAlternateInput);
      if (document == null) {
        mError = "No document";
        createErrorThumbnail();
        return;
      }
      model.loadFromXmlNode(document);
      renderService.setModel(model);
    } else {
      renderService.setModel(editor.getModel());
    }
    RenderLogger log = new RenderLogger(getDisplayName());
    renderService.setLog(log);
    RenderSession session = renderService.createRenderSession();
    Result render = session.render(1000);

    if (DUMP_RENDER_DIAGNOSTICS) {
      if (log.hasProblems() || !render.isSuccess()) {
        AdtPlugin.log(
            IStatus.ERROR,
            "Found problems rendering preview "
                + getDisplayName()
                + ": "
                + render.getErrorMessage()
                + " : "
                + log.getProblems(false));
        Throwable exception = render.getException();
        if (exception != null) {
          AdtPlugin.log(exception, "Failure rendering preview " + getDisplayName());
        }
      }
    }

    if (render.isSuccess()) {
      mError = null;
    } else {
      mError = render.getErrorMessage();
      if (mError == null) {
        mError = "";
      }
    }

    if (render.getStatus() == Status.ERROR_TIMEOUT) {
      // TODO: Special handling? schedule update again later
      return;
    }
    if (render.isSuccess()) {
      BufferedImage image = session.getImage();
      if (image != null) {
        createThumbnail(image);
      }
    }

    if (mError != null) {
      createErrorThumbnail();
    }
  }