1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_canvas.hxx"
26 
27 #include <osl/mutex.hxx>
28 
29 #include "dx_winstuff.hxx"
30 #include "dx_gdiplususer.hxx"
31 
32 
33 namespace dxcanvas
34 {
35     namespace
36     {
37         ::osl::Mutex* 	p_gdiPlusUsageCountMutex( osl::Mutex::getGlobalMutex() );
38         int				n_gdiPlusUsageCount( 0 );
39 
40         ULONG_PTR		a_GdiPlusToken;		// GDI+ handle. Owned by this object
41     }
42 
43     GDIPlusUserSharedPtr GDIPlusUser::createInstance()
44     {
45         return GDIPlusUserSharedPtr( new GDIPlusUser() );
46     }
47 
48     GDIPlusUser::~GDIPlusUser()
49     {
50         ::osl::MutexGuard aGuard( *p_gdiPlusUsageCountMutex );
51 
52         --n_gdiPlusUsageCount;
53 
54         if( n_gdiPlusUsageCount == 0 )
55             Gdiplus::GdiplusShutdown( a_GdiPlusToken );
56     }
57 
58     GDIPlusUser::GDIPlusUser()
59     {
60         ::osl::MutexGuard aGuard( *p_gdiPlusUsageCountMutex );
61 
62         if( n_gdiPlusUsageCount == 0 )
63         {
64             // Setup GDI+
65 
66             // No extras here, simply taking GdiplusStartupInput's
67             // default constructor
68             Gdiplus::GdiplusStartupInput gdiPlusStartupInput;
69 
70             Gdiplus::GdiplusStartup( &a_GdiPlusToken,
71                                      &gdiPlusStartupInput,
72                                      NULL );
73         }
74 
75         ++n_gdiPlusUsageCount;
76     }
77 }
78