ReactOS 0.4.16-dev-983-g23ad936
CEnumFonts.cpp
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Font Shell Extension
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: CEnumFonts implementation
5 * COPYRIGHT: Copyright 2019 Mark Jansen <mark.jansen@reactos.org>
6 */
7
8#include "precomp.h"
9
11
13 public CComObjectRootEx<CComMultiThreadModelNoCS>,
14 public IEnumIDList
15{
16private:
19
20public:
22 : m_dwFlags(0)
23 , m_Index(0)
24 {
25 }
26
28 {
30 m_Index = 0;
31 return S_OK;
32 }
33
34 // *** IEnumIDList methods ***
35 STDMETHODIMP Next(ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched) override
36 {
37 if (!rgelt || (!pceltFetched && celt != 1))
38 return E_POINTER;
39
40 HRESULT hr = S_OK;
41 ULONG Fetched = 0;
42
43 while (celt)
44 {
45 celt--;
46
47 if (m_Index < g_FontCache->Size())
48 {
51 if (!item)
52 {
53 hr = Fetched ? S_FALSE : E_OUTOFMEMORY;
54 break;
55 }
56 rgelt[Fetched] = item;
57 m_Index++;
58 Fetched++;
59 }
60 else
61 {
62 hr = S_FALSE;
63 }
64 }
65
66 if (pceltFetched)
67 *pceltFetched = Fetched;
68 return hr;
69 }
70
71 STDMETHODIMP Skip(ULONG celt) override
72 {
73 m_Index += celt;
74 return S_OK;
75 }
76
78 {
79 m_Index = 0;
80 return S_OK;
81 }
82
83 STDMETHODIMP Clone(IEnumIDList **ppenum) override
84 {
85 return E_NOTIMPL;
86 }
87
88public:
91
93 COM_INTERFACE_ENTRY_IID(IID_IEnumIDList, IEnumIDList)
95};
96
98{
99 return ShellObjectCreatorInit<CEnumFonts>(zip, flags, riid, ppvOut);
100}
HRESULT _CEnumFonts_CreateInstance(CFontExt *zip, DWORD flags, REFIID riid, LPVOID *ppvOut)
Definition: CEnumFonts.cpp:97
CFontCache * g_FontCache
Definition: CFontCache.cpp:12
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
Definition: precomp.h:23
#define STDMETHODIMP
Definition: basetyps.h:43
STDMETHODIMP Next(ULONG celt, LPITEMIDLIST *rgelt, ULONG *pceltFetched) override
Definition: CEnumFonts.cpp:35
STDMETHODIMP Reset() override
Definition: CEnumFonts.cpp:77
ULONG m_Index
Definition: CEnumFonts.cpp:18
STDMETHODIMP Clone(IEnumIDList **ppenum) override
Definition: CEnumFonts.cpp:83
DWORD m_dwFlags
Definition: CEnumFonts.cpp:17
HRESULT Initialize(CFontExt *folder, DWORD flags)
Definition: CEnumFonts.cpp:27
STDMETHODIMP Skip(ULONG celt) override
Definition: CEnumFonts.cpp:71
CStringW Name(size_t Index)
Definition: CFontCache.cpp:134
#define E_OUTOFMEMORY
Definition: ddrawi.h:100
#define E_NOTIMPL
Definition: ddrawi.h:99
LPWSTR Name
Definition: desk.c:124
unsigned long DWORD
Definition: ntddk_ex.h:95
LPITEMIDLIST _ILCreate(LPCWSTR lpString, ULONG Index)
Definition: fontpidl.cpp:10
GLbitfield flags
Definition: glext.h:7161
REFIID riid
Definition: atlbase.h:39
#define S_OK
Definition: intsafe.h:52
#define BEGIN_COM_MAP(x)
Definition: atlcom.h:581
#define COM_INTERFACE_ENTRY_IID(iid, x)
Definition: atlcom.h:601
#define DECLARE_PROTECT_FINAL_CONSTRUCT()
Definition: atlcom.h:679
#define DECLARE_NOT_AGGREGATABLE(x)
Definition: atlcom.h:651
#define END_COM_MAP()
Definition: atlcom.h:592
static ATOM item
Definition: dde.c:856
#define REFIID
Definition: guiddef.h:118
HRESULT hr
Definition: shlfolder.c:183
ITEMIDLIST UNALIGNED * LPITEMIDLIST
Definition: shtypes.idl:41
Definition: fci.c:116
uint32_t ULONG
Definition: typedefs.h:59
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
Definition: wdfdevice.h:4533
#define S_FALSE
Definition: winerror.h:2357
#define E_POINTER
Definition: winerror.h:2365