DimSurface.java revision 29735689cea7bf52998c1911542dcfdd1c1d9628
1/* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.wm; 18 19import android.graphics.PixelFormat; 20import android.util.Slog; 21import android.view.Surface; 22import android.view.SurfaceSession; 23 24import java.io.PrintWriter; 25 26class DimSurface { 27 Surface mDimSurface; 28 boolean mDimShown = false; 29 int mDimColor = 0; 30 int mLayer = -1; 31 int mLastDimWidth, mLastDimHeight; 32 33 DimSurface(SurfaceSession session) { 34 if (mDimSurface == null) { 35 if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " 36 + mDimSurface + ": CREATE"); 37 try { 38 mDimSurface = new Surface(session, 0, 39 "DimSurface", 40 -1, 16, 16, PixelFormat.OPAQUE, 41 Surface.FX_SURFACE_DIM); 42 mDimSurface.setAlpha(0.0f); 43 } catch (Exception e) { 44 Slog.e(WindowManagerService.TAG, "Exception creating Dim surface", e); 45 } 46 } 47 } 48 49 /** 50 * Show the dim surface. 51 */ 52 void show(int dw, int dh, int layer, int color) { 53 if (!mDimShown) { 54 if (WindowManagerService.SHOW_TRANSACTIONS) Slog.i(WindowManagerService.TAG, " DIM " + mDimSurface + ": SHOW pos=(0,0) (" + 55 dw + "x" + dh + ")"); 56 mDimShown = true; 57 try { 58 mLastDimWidth = dw; 59 mLastDimHeight = dh; 60 mDimSurface.setPosition(0, 0); 61 mDimSurface.setSize(dw, dh); 62 mDimSurface.show(); 63 } catch (RuntimeException e) { 64 Slog.w(WindowManagerService.TAG, "Failure showing dim surface", e); 65 } 66 } else if (mLastDimWidth != dw || mLastDimHeight != dh || mDimColor != color 67 || mLayer != layer) { 68 mLastDimWidth = dw; 69 mLastDimHeight = dh; 70 mLayer = layer; 71 mDimColor = color; 72 mDimSurface.setSize(dw, dh); 73 mDimSurface.setLayer(layer); 74 mDimSurface.setAlpha(((color>>24)&0xff)/255.0f); 75 } 76 } 77 78 void hide() { 79 if (mDimShown) { 80 mDimShown = false; 81 try { 82 mDimSurface.hide(); 83 } catch (RuntimeException e) { 84 Slog.w(WindowManagerService.TAG, "Illegal argument exception hiding dim surface"); 85 } 86 } 87 } 88 89 public void printTo(String prefix, PrintWriter pw) { 90 pw.print(prefix); pw.print("mDimSurface="); pw.println(mDimSurface); 91 pw.print(prefix); pw.print("mDimShown="); pw.print(mDimShown); 92 pw.print(" mLayer="); pw.print(mLayer); 93 pw.print(" mDimColor=0x"); pw.println(Integer.toHexString(mDimColor)); 94 pw.print(prefix); pw.print("mLastDimWidth="); pw.print(mLastDimWidth); 95 pw.print(" mLastDimWidth="); pw.println(mLastDimWidth); 96 } 97} 98