I am currently working on my Cornowser web browser, which uses the Crosswalk engine, and I ran into a problem. I want to implement color modes like in UltimateBrowserProject.
But color filters are not applied. I tried to set the type of the layer and pass Paint using a color filter.
Here is the source code:
// Handle color modes public void drawWithColorMode() { Logging.logd("Applying web render color mode..."); RenderColorMode.ColorMode cm = CornBrowser.getBrowserStorage().getColorMode(); Paint paint = new Paint(); final float[] negativeColor = { -1.0f, 0, 0, 0, 255, // Red 0, -1.0f, 0, 0, 255, // Green 0, 0, -1.0f, 0, 255, // Blue 0, 0, 0, 1.0f, 0 // Alpha }; final float[] darkColor = { 1f, 0, 0, 0, -255, 0, 1f, 0, 0, -255, 0, 0, 1f, 0, -255, 0, 0, 0, 1f, 0 }; final float[] invertColor = { -1f, 0, 0, 0, 0, 0, -1f, 0, 0, 0, 0, 0, -1f, 0, 0, 0, 0, 0, 1f, 0 }; Logging.logd("Found color mode: " + cm.mode); switch(cm.mode) { case RenderColorMode.ColorMode.NORMAL: Logging.logd("Applying normal color mode"); paint.setColorFilter(null); break; case RenderColorMode.ColorMode.DARK: Logging.logd("Applying dark mode"); paint.setColorFilter(new ColorMatrixColorFilter(darkColor)); break; case RenderColorMode.ColorMode.NEGATIVE: Logging.logd("Applying negative mode"); paint.setColorFilter(new ColorMatrixColorFilter(negativeColor)); break; case RenderColorMode.ColorMode.INVERT: Logging.logd("Applying inverted mode"); paint.setColorFilter(new ColorMatrixColorFilter(invertColor)); break; case RenderColorMode.ColorMode.GREYSCALE: Logging.logd("Applying greyscale"); ColorMatrix m = new ColorMatrix(); m.setSaturation(0); paint.setColorFilter(new ColorMatrixColorFilter(m)); break; default: Logging.logd("Warning: Unknown color mode " + cm.mode + "."); break; } Logging.logd("Setting layer type..."); setLayerType(LAYER_TYPE_HARDWARE, paint); }
I also tried it, overriding draw(canvas) , but getting the same result.
Does anyone know how to set a color filter for XWalkView?
Thanks in advance!
UPDATE:
SurfaceView doesn't seem to support color filters. How to do it anyway?
UPDATE 2: It seems that this question does not have much attention ... I edited the source code, how it should work, but it does not work, please check it, logcat gives me the following output:
D/Cornowser: Applying web render color mode... D/Cornowser: Found color mode: 2 D/Cornowser: Applying negative mode D/Cornowser: Setting layer type...
Final update: I actually worked using JavaScript. If you want to know how I solved it, look here .