/* //device/libs/android_runtime/GraphicsExternGlue.h
**
** Copyright 2006, The Android Open Source Project
**
** Licensed under the Apache License, Version 2.0 (the "License"); 
** you may not use this file except in compliance with the License. 
** You may obtain a copy of the License at 
**
**     http://www.apache.org/licenses/LICENSE-2.0 
**
** Unless required by applicable law or agreed to in writing, software 
** distributed under the License is distributed on an "AS IS" BASIS, 
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
** See the License for the specific language governing permissions and 
** limitations under the License.
*/

extern void register_android_Paint();
extern void register_android_Canvas();
extern void register_android_ColorFilter();
extern void register_android_Matrix();
extern void register_android_Path();
extern void register_android_PorterDuff();
extern void register_android_Rasterizer();
extern void register_android_Xfermode();
