Blender  V3.3
GHOST_SystemPathsWin32.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Copyright 2011 Blender Foundation. All rights reserved. */
3 
9 #include "GHOST_Debug.h"
10 
11 #ifndef _WIN32_IE
12 # define _WIN32_IE 0x0501
13 #endif
14 #include "utfconv.h"
15 #include <shlobj.h>
16 
18 {
19 }
20 
22 {
23 }
24 
25 const char *GHOST_SystemPathsWin32::getSystemDir(int, const char *versionstr) const
26 {
27  /* 1 utf-16 might translate into 3 utf-8. 2 utf-16 translates into 4 utf-8. */
28  static char knownpath[MAX_PATH * 3 + 128] = {0};
29  PWSTR knownpath_16 = NULL;
30 
31  HRESULT hResult = SHGetKnownFolderPath(
32  FOLDERID_ProgramData, KF_FLAG_DEFAULT, NULL, &knownpath_16);
33 
34  if (hResult == S_OK) {
35  conv_utf_16_to_8(knownpath_16, knownpath, MAX_PATH * 3);
36  CoTaskMemFree(knownpath_16);
37  strcat(knownpath, "\\Blender Foundation\\Blender\\");
38  strcat(knownpath, versionstr);
39  return knownpath;
40  }
41 
42  return NULL;
43 }
44 
45 const char *GHOST_SystemPathsWin32::getUserDir(int, const char *versionstr) const
46 {
47  static char knownpath[MAX_PATH * 3 + 128] = {0};
48  PWSTR knownpath_16 = NULL;
49 
50  HRESULT hResult = SHGetKnownFolderPath(
51  FOLDERID_RoamingAppData, KF_FLAG_DEFAULT, NULL, &knownpath_16);
52 
53  if (hResult == S_OK) {
54  conv_utf_16_to_8(knownpath_16, knownpath, MAX_PATH * 3);
55  CoTaskMemFree(knownpath_16);
56  strcat(knownpath, "\\Blender Foundation\\Blender\\");
57  strcat(knownpath, versionstr);
58  return knownpath;
59  }
60 
61  return NULL;
62 }
63 
65 {
66  GUID folderid;
67 
68  switch (type) {
70  folderid = FOLDERID_Desktop;
71  break;
73  folderid = FOLDERID_Documents;
74  break;
76  folderid = FOLDERID_Downloads;
77  break;
79  folderid = FOLDERID_Music;
80  break;
82  folderid = FOLDERID_Pictures;
83  break;
85  folderid = FOLDERID_Videos;
86  break;
88  folderid = FOLDERID_LocalAppData;
89  break;
90  default:
92  false,
93  "GHOST_SystemPathsWin32::getUserSpecialDir(): Invalid enum value for type parameter");
94  return NULL;
95  }
96 
97  static char knownpath[MAX_PATH * 3] = {0};
98  PWSTR knownpath_16 = NULL;
99  HRESULT hResult = SHGetKnownFolderPath(folderid, KF_FLAG_DEFAULT, NULL, &knownpath_16);
100 
101  if (hResult == S_OK) {
102  conv_utf_16_to_8(knownpath_16, knownpath, MAX_PATH * 3);
103  CoTaskMemFree(knownpath_16);
104  return knownpath;
105  }
106 
107  CoTaskMemFree(knownpath_16);
108  return NULL;
109 }
110 
112 {
113  static char fullname[MAX_PATH * 3] = {0};
114  wchar_t fullname_16[MAX_PATH * 3];
115 
116  if (GetModuleFileNameW(0, fullname_16, MAX_PATH)) {
117  conv_utf_16_to_8(fullname_16, fullname, MAX_PATH * 3);
118  return fullname;
119  }
120 
121  return NULL;
122 }
123 
124 void GHOST_SystemPathsWin32::addToSystemRecentFiles(const char *filename) const
125 {
126  /* SHARD_PATH resolves to SHARD_PATHA for non-UNICODE build */
127  UTF16_ENCODE(filename);
128  SHAddToRecentDocs(SHARD_PATHW, filename_16);
129  UTF16_UN_ENCODE(filename);
130 }
#define GHOST_ASSERT(x, info)
Definition: GHOST_Debug.h:54
GHOST_TUserSpecialDirTypes
Definition: GHOST_Types.h:562
@ GHOST_kUserSpecialDirDesktop
Definition: GHOST_Types.h:563
@ GHOST_kUserSpecialDirMusic
Definition: GHOST_Types.h:566
@ GHOST_kUserSpecialDirPictures
Definition: GHOST_Types.h:567
@ GHOST_kUserSpecialDirVideos
Definition: GHOST_Types.h:568
@ GHOST_kUserSpecialDirDownloads
Definition: GHOST_Types.h:565
@ GHOST_kUserSpecialDirCaches
Definition: GHOST_Types.h:569
@ GHOST_kUserSpecialDirDocuments
Definition: GHOST_Types.h:564
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
const char * getSystemDir(int version, const char *versionstr) const
const char * getBinaryDir() const
const char * getUserSpecialDir(GHOST_TUserSpecialDirTypes type) const
const char * getUserDir(int version, const char *versionstr) const
void addToSystemRecentFiles(const char *filename) const
int conv_utf_16_to_8(const wchar_t *in16, char *out8, size_t size8)
Definition: utfconv.c:115
#define UTF16_ENCODE(in8str)
Definition: utfconv.h:83
#define UTF16_UN_ENCODE(in8str)
Definition: utfconv.h:87