Search in sources :

Example 6 with EditorModel

use of org.signal.imageeditor.core.model.EditorModel in project Signal-Android by signalapp.

the class MainActivity method onCreate.

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main_activity);
    Toolbar toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(R.string.app_name_short);
    setSupportActionBar(toolbar);
    imageEditorView = findViewById(R.id.image_editor);
    imageEditorView.setUndoRedoStackListener((undoAvailable, redoAvailable) -> {
        Log.d("ALAN", String.format("Undo/Redo available: %s, %s", undoAvailable ? "Y" : "N", redoAvailable ? "Y" : "N"));
        if (menu == null)
            return;
        MenuItem undo = menu.findItem(R.id.action_undo);
        MenuItem redo = menu.findItem(R.id.action_redo);
        if (undo != null)
            undo.setVisible(undoAvailable);
        if (redo != null)
            redo.setVisible(redoAvailable);
    });
    EditorModel model = null;
    if (savedInstanceState != null) {
        model = savedInstanceState.getParcelable("MODEL");
        Log.d("ALAN", "Restoring instance " + (model != null ? model.hashCode() : 0));
    }
    if (model == null) {
        model = initialModel();
        Log.d("ALAN", "New instance created " + model.hashCode());
    }
    imageEditorView.setModel(model);
    imageEditorView.setTapListener(new ImageEditorView.TapListener() {

        @Override
        public void onEntityDown(@Nullable EditorElement editorElement) {
            Log.d("ALAN", "Entity down " + editorElement);
        }

        @Override
        public void onEntitySingleTap(@Nullable EditorElement editorElement) {
            Log.d("ALAN", "Entity single tapped " + editorElement);
        }

        @Override
        public void onEntityDoubleTap(@NonNull EditorElement editorElement) {
            Log.d("ALAN", "Entity double tapped " + editorElement);
            if (editorElement.getRenderer() instanceof MultiLineTextRenderer) {
                imageEditorView.startTextEditing(editorElement);
            } else {
                imageEditorView.deleteElement(editorElement);
            }
        }
    });
}
Also used : EditorModel(org.signal.imageeditor.core.model.EditorModel) MultiLineTextRenderer(org.signal.imageeditor.core.renderers.MultiLineTextRenderer) EditorElement(org.signal.imageeditor.core.model.EditorElement) MenuItem(android.view.MenuItem) ImageEditorView(org.signal.imageeditor.core.ImageEditorView) Toolbar(androidx.appcompat.widget.Toolbar)

Example 7 with EditorModel

use of org.signal.imageeditor.core.model.EditorModel in project Signal-Android by signalapp.

the class MainActivity method initialModel.

private static EditorModel initialModel() {
    EditorModel model = EditorModel.create();
    EditorElement image = new EditorElement(new UrlRenderer("https://cdn.aarp.net/content/dam/aarp/home-and-family/your-home/2018/06/1140-house-inheriting.imgcache.rev68c065601779c5d76b913cf9ec3a977e.jpg"));
    image.getFlags().setSelectable(false).persist();
    model.addElement(image);
    EditorElement elementC = new EditorElement(new UrlRenderer("https://upload.wikimedia.org/wikipedia/commons/thumb/e/e0/SNice.svg/220px-SNice.svg.png"));
    elementC.getLocalMatrix().postScale(0.2f, 0.2f);
    // elementC.getLocalMatrix().postRotate(30);
    model.addElement(elementC);
    EditorElement elementE = new EditorElement(new UrlRenderer("https://www.vitalessentialsraw.com/assets/images/background-images/laying-grey-cat.png"));
    elementE.getLocalMatrix().postScale(0.2f, 0.2f);
    // elementE.getLocalMatrix().postRotate(60);
    model.addElement(elementE);
    EditorElement elementD = new EditorElement(new UrlRenderer("https://petspluslubbocktx.com/files/2016/11/DC-Cat-Weight-Management.png"));
    elementD.getLocalMatrix().postScale(0.2f, 0.2f);
    // elementD.getLocalMatrix().postRotate(60);
    model.addElement(elementD);
    EditorElement elementF = new EditorElement(new UrlRenderer("https://purepng.com/public/uploads/large/purepng.com-black-top-hathatsstandard-sizeblacktop-14215263591972x0zh.png"));
    elementF.getLocalMatrix().postScale(0.2f, 0.2f);
    // elementF.getLocalMatrix().postRotatF(60);
    model.addElement(elementF);
    EditorElement elementG = new EditorElement(new UriRenderer(Uri.parse("file:///android_asset/food/apple.png")));
    elementG.getLocalMatrix().postScale(0.2f, 0.2f);
    // elementG.getLocalMatrix().postRotatG(60);
    model.addElement(elementG);
    EditorElement elementH = new EditorElement(new MultiLineTextRenderer("Hello, World!", 0xff0000ff, MultiLineTextRenderer.Mode.REGULAR));
    // elementH.getLocalMatrix().postScale(0.2f, 0.2f);
    model.addElement(elementH);
    EditorElement elementH2 = new EditorElement(new MultiLineTextRenderer("Hello, World 2!", 0xff0000ff, MultiLineTextRenderer.Mode.REGULAR));
    // elementH.getLocalMatrix().postScale(0.2f, 0.2f);
    model.addElement(elementH2);
    return model;
}
Also used : EditorModel(org.signal.imageeditor.core.model.EditorModel) MultiLineTextRenderer(org.signal.imageeditor.core.renderers.MultiLineTextRenderer) EditorElement(org.signal.imageeditor.core.model.EditorElement) UrlRenderer(org.signal.imageeditor.app.renderers.UrlRenderer) UriRenderer(org.signal.imageeditor.app.renderers.UriRenderer)

Example 8 with EditorModel

use of org.signal.imageeditor.core.model.EditorModel in project Signal-Android by WhisperSystems.

the class WallpaperCropActivity method setWallpaper.

private void setWallpaper() {
    EditorModel model = imageEditor.getModel();
    Point size = new Point(imageEditor.getWidth(), imageEditor.getHeight());
    AlertDialog dialog = SimpleProgressDialog.show(this);
    viewModel.render(this, model, size, new AsynchronousCallback.MainThread<ChatWallpaper, WallpaperCropViewModel.Error>() {

        @Override
        public void onComplete(@Nullable ChatWallpaper result) {
            dialog.dismiss();
            setResult(RESULT_OK, new Intent().putExtra(ChatWallpaperPreviewActivity.EXTRA_CHAT_WALLPAPER, result));
            finish();
        }

        @Override
        public void onError(@Nullable WallpaperCropViewModel.Error error) {
            dialog.dismiss();
            Toast.makeText(WallpaperCropActivity.this, R.string.WallpaperCropActivity__error_setting_wallpaper, Toast.LENGTH_SHORT).show();
        }
    }.toWorkerCallback());
}
Also used : AlertDialog(androidx.appcompat.app.AlertDialog) EditorModel(org.signal.imageeditor.core.model.EditorModel) ChatWallpaper(org.thoughtcrime.securesms.wallpaper.ChatWallpaper) Intent(android.content.Intent) Point(android.graphics.Point) Nullable(androidx.annotation.Nullable)

Example 9 with EditorModel

use of org.signal.imageeditor.core.model.EditorModel in project Signal-Android by WhisperSystems.

the class WallpaperCropActivity method setupImageEditor.

private void setupImageEditor(@NonNull Uri imageUri) {
    DisplayMetrics displayMetrics = new DisplayMetrics();
    getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
    int height = displayMetrics.heightPixels;
    int width = displayMetrics.widthPixels;
    float ratio = width / (float) height;
    EditorModel editorModel = EditorModel.createForWallpaperEditing(ratio);
    EditorElement image = new EditorElement(new UriGlideRenderer(imageUri, true, width, height, UriGlideRenderer.WEAK_BLUR));
    image.getFlags().setSelectable(false).persist();
    editorModel.addElement(image);
    imageEditor.setModel(editorModel);
    imageEditor.setSizeChangedListener((newWidth, newHeight) -> {
        float newRatio = newWidth / (float) newHeight;
        Log.i(TAG, String.format(Locale.US, "Output size (%d, %d) (ratio %.2f)", newWidth, newHeight, newRatio));
        editorModel.setFixedRatio(newRatio);
    });
}
Also used : UriGlideRenderer(org.thoughtcrime.securesms.scribbles.UriGlideRenderer) EditorModel(org.signal.imageeditor.core.model.EditorModel) EditorElement(org.signal.imageeditor.core.model.EditorElement) DisplayMetrics(android.util.DisplayMetrics) Point(android.graphics.Point)

Example 10 with EditorModel

use of org.signal.imageeditor.core.model.EditorModel in project Signal-Android by WhisperSystems.

the class AvatarSelectionActivity method handleSave.

private void handleSave() {
    ImageEditorFragment fragment = (ImageEditorFragment) getSupportFragmentManager().findFragmentByTag(IMAGE_EDITOR);
    if (fragment == null) {
        throw new AssertionError();
    }
    ImageEditorFragment.Data data = (ImageEditorFragment.Data) fragment.saveState();
    EditorModel model = data.readModel();
    if (model == null) {
        throw new AssertionError();
    }
    MediaRepository.transformMedia(this, Collections.singletonList(currentMedia), Collections.singletonMap(currentMedia, new ImageEditorModelRenderMediaTransform(model, AVATAR_DIMENSIONS)), output -> {
        Media transformed = output.get(currentMedia);
        Intent result = new Intent();
        result.putExtra(EXTRA_MEDIA, transformed);
        setResult(RESULT_OK, result);
        finish();
    });
}
Also used : EditorModel(org.signal.imageeditor.core.model.EditorModel) LiveData(androidx.lifecycle.LiveData) DefaultValueLiveData(org.thoughtcrime.securesms.util.DefaultValueLiveData) Intent(android.content.Intent) ImageEditorFragment(org.thoughtcrime.securesms.scribbles.ImageEditorFragment)

Aggregations

EditorModel (org.signal.imageeditor.core.model.EditorModel)16 EditorElement (org.signal.imageeditor.core.model.EditorElement)10 Point (android.graphics.Point)8 Intent (android.content.Intent)4 AlertDialog (androidx.appcompat.app.AlertDialog)4 MultiLineTextRenderer (org.signal.imageeditor.core.renderers.MultiLineTextRenderer)4 Bitmap (android.graphics.Bitmap)2 Matrix (android.graphics.Matrix)2 Paint (android.graphics.Paint)2 DisplayMetrics (android.util.DisplayMetrics)2 MenuItem (android.view.MenuItem)2 Nullable (androidx.annotation.Nullable)2 Toolbar (androidx.appcompat.widget.Toolbar)2 LiveData (androidx.lifecycle.LiveData)2 UriRenderer (org.signal.imageeditor.app.renderers.UriRenderer)2 UrlRenderer (org.signal.imageeditor.app.renderers.UrlRenderer)2 ImageEditorView (org.signal.imageeditor.core.ImageEditorView)2 ImageEditorFragment (org.thoughtcrime.securesms.scribbles.ImageEditorFragment)2 UriGlideRenderer (org.thoughtcrime.securesms.scribbles.UriGlideRenderer)2 DefaultValueLiveData (org.thoughtcrime.securesms.util.DefaultValueLiveData)2