mirror of
https://github.com/aseprite/aseprite.git
synced 2025-03-19 10:20:57 +00:00
Add --disable-wintab CLI option
This can be used to avoid loading wintab32.dll which sometimes locks Aseprite loading.
This commit is contained in:
parent
db2e582f23
commit
a96a9e9868
@ -146,6 +146,11 @@ App::App()
|
|||||||
|
|
||||||
void App::initialize(const AppOptions& options)
|
void App::initialize(const AppOptions& options)
|
||||||
{
|
{
|
||||||
|
#ifdef _WIN32
|
||||||
|
if (options.disableWintab())
|
||||||
|
she::instance()->useWintabAPI(false);
|
||||||
|
#endif
|
||||||
|
|
||||||
m_isGui = options.startUI() && !options.previewCLI();
|
m_isGui = options.startUI() && !options.previewCLI();
|
||||||
m_isShell = options.startShell();
|
m_isShell = options.startShell();
|
||||||
m_coreModules = new CoreModules;
|
m_coreModules = new CoreModules;
|
||||||
|
@ -70,6 +70,9 @@ AppOptions::AppOptions(int argc, const char* argv[])
|
|||||||
, m_oneFrame(m_po.add("oneframe").description("Load just the first frame"))
|
, m_oneFrame(m_po.add("oneframe").description("Load just the first frame"))
|
||||||
, m_verbose(m_po.add("verbose").mnemonic('v').description("Explain what is being done"))
|
, m_verbose(m_po.add("verbose").mnemonic('v').description("Explain what is being done"))
|
||||||
, m_debug(m_po.add("debug").description("Extreme verbose mode and\ncopy log to desktop"))
|
, m_debug(m_po.add("debug").description("Extreme verbose mode and\ncopy log to desktop"))
|
||||||
|
#ifdef _WIN32
|
||||||
|
, m_disableWintab(m_po.add("disable-wintab").description("Don't load wintab32.dll library"))
|
||||||
|
#endif
|
||||||
, m_help(m_po.add("help").mnemonic('?').description("Display this help and exits"))
|
, m_help(m_po.add("help").mnemonic('?').description("Display this help and exits"))
|
||||||
, m_version(m_po.add("version").description("Output version information and exit"))
|
, m_version(m_po.add("version").description("Output version information and exit"))
|
||||||
{
|
{
|
||||||
@ -109,4 +112,11 @@ bool AppOptions::hasExporterParams() const
|
|||||||
m_po.enabled(m_sheet);
|
m_po.enabled(m_sheet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool AppOptions::disableWintab() const
|
||||||
|
{
|
||||||
|
return m_po.enabled(m_disableWintab);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -84,6 +84,9 @@ public:
|
|||||||
const Option& oneFrame() const { return m_oneFrame; }
|
const Option& oneFrame() const { return m_oneFrame; }
|
||||||
|
|
||||||
bool hasExporterParams() const;
|
bool hasExporterParams() const;
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool disableWintab() const;
|
||||||
|
#endif
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::string m_exeName;
|
std::string m_exeName;
|
||||||
@ -140,6 +143,9 @@ private:
|
|||||||
|
|
||||||
Option& m_verbose;
|
Option& m_verbose;
|
||||||
Option& m_debug;
|
Option& m_debug;
|
||||||
|
#ifdef _WIN32
|
||||||
|
Option& m_disableWintab;
|
||||||
|
#endif
|
||||||
Option& m_help;
|
Option& m_help;
|
||||||
Option& m_version;
|
Option& m_version;
|
||||||
|
|
||||||
|
@ -37,6 +37,9 @@ public:
|
|||||||
CommonSystem()
|
CommonSystem()
|
||||||
: m_nativeDialogs(nullptr)
|
: m_nativeDialogs(nullptr)
|
||||||
, m_menus(nullptr) {
|
, m_menus(nullptr) {
|
||||||
|
#ifdef _WIN32
|
||||||
|
m_useWintabAPI = true;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
~CommonSystem() {
|
~CommonSystem() {
|
||||||
@ -48,6 +51,18 @@ public:
|
|||||||
delete this;
|
delete this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void useWintabAPI(bool state) override {
|
||||||
|
#ifdef _WIN32
|
||||||
|
m_useWintabAPI = state;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool useWintabAPI() const {
|
||||||
|
return m_useWintabAPI;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
Logger* logger() override {
|
Logger* logger() override {
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
return getOsxLogger();
|
return getOsxLogger();
|
||||||
@ -114,6 +129,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
#ifdef _WIN32
|
||||||
|
bool m_useWintabAPI;
|
||||||
|
#endif
|
||||||
NativeDialogs* m_nativeDialogs;
|
NativeDialogs* m_nativeDialogs;
|
||||||
Menus* m_menus;
|
Menus* m_menus;
|
||||||
base::UniquePtr<ft::Lib> m_ft;
|
base::UniquePtr<ft::Lib> m_ft;
|
||||||
|
@ -37,6 +37,12 @@ namespace she {
|
|||||||
virtual void activateApp() = 0;
|
virtual void activateApp() = 0;
|
||||||
virtual void finishLaunching() = 0;
|
virtual void finishLaunching() = 0;
|
||||||
virtual Capabilities capabilities() const = 0;
|
virtual Capabilities capabilities() const = 0;
|
||||||
|
|
||||||
|
// Disables loading wintab32.dll (sometimes a program can be
|
||||||
|
// locked when we load the wintab32.dll, so we need a way to
|
||||||
|
// opt-out loading this library.)
|
||||||
|
virtual void useWintabAPI(bool enable) = 0;
|
||||||
|
|
||||||
virtual Logger* logger() = 0;
|
virtual Logger* logger() = 0;
|
||||||
virtual Menus* menus() = 0;
|
virtual Menus* menus() = 0;
|
||||||
virtual NativeDialogs* nativeDialogs() = 0;
|
virtual NativeDialogs* nativeDialogs() = 0;
|
||||||
|
@ -372,10 +372,10 @@ LRESULT WinWindow::wndProc(UINT msg, WPARAM wparam, LPARAM lparam)
|
|||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
LOG("WIN: Creating window %p\n", m_hwnd);
|
LOG("WIN: Creating window %p\n", m_hwnd);
|
||||||
|
|
||||||
|
if (system()->useWintabAPI()) {
|
||||||
// Attach Wacom context
|
// Attach Wacom context
|
||||||
m_hpenctx =
|
m_hpenctx = system()->penApi().open(m_hwnd);
|
||||||
static_cast<WindowSystem*>(she::instance())
|
}
|
||||||
->penApi().open(m_hwnd);
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
@ -383,8 +383,7 @@ LRESULT WinWindow::wndProc(UINT msg, WPARAM wparam, LPARAM lparam)
|
|||||||
m_hwnd, m_hpenctx);
|
m_hwnd, m_hpenctx);
|
||||||
|
|
||||||
if (m_hpenctx) {
|
if (m_hpenctx) {
|
||||||
static_cast<WindowSystem*>(she::instance())
|
system()->penApi().close(m_hpenctx);
|
||||||
->penApi().close(m_hpenctx);
|
|
||||||
m_hpenctx = nullptr;
|
m_hpenctx = nullptr;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -781,7 +780,7 @@ LRESULT WinWindow::wndProc(UINT msg, WPARAM wparam, LPARAM lparam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case WT_CSRCHANGE: { // From Wintab 1.1
|
case WT_CSRCHANGE: { // From Wintab 1.1
|
||||||
auto& api = static_cast<WindowSystem*>(she::instance())->penApi();
|
auto& api = system()->penApi();
|
||||||
UINT serial = wparam;
|
UINT serial = wparam;
|
||||||
HCTX ctx = (HCTX)lparam;
|
HCTX ctx = (HCTX)lparam;
|
||||||
PACKET packet;
|
PACKET packet;
|
||||||
@ -810,7 +809,7 @@ LRESULT WinWindow::wndProc(UINT msg, WPARAM wparam, LPARAM lparam)
|
|||||||
}
|
}
|
||||||
|
|
||||||
case WT_PACKET: {
|
case WT_PACKET: {
|
||||||
auto& api = static_cast<WindowSystem*>(she::instance())->penApi();
|
auto& api = system()->penApi();
|
||||||
UINT serial = wparam;
|
UINT serial = wparam;
|
||||||
HCTX ctx = (HCTX)lparam;
|
HCTX ctx = (HCTX)lparam;
|
||||||
PACKET packet;
|
PACKET packet;
|
||||||
@ -938,4 +937,10 @@ LRESULT CALLBACK WinWindow::staticWndProc(HWND hwnd, UINT msg, WPARAM wparam, LP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// static
|
||||||
|
WindowSystem* WinWindow::system()
|
||||||
|
{
|
||||||
|
return static_cast<WindowSystem*>(she::instance());
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace she
|
} // namespace she
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
namespace she {
|
namespace she {
|
||||||
class Event;
|
class Event;
|
||||||
class Surface;
|
class Surface;
|
||||||
|
class WindowSystem;
|
||||||
|
|
||||||
class WinWindow {
|
class WinWindow {
|
||||||
public:
|
public:
|
||||||
@ -62,6 +63,8 @@ namespace she {
|
|||||||
static HWND createHwnd(WinWindow* self, int width, int height);
|
static HWND createHwnd(WinWindow* self, int width, int height);
|
||||||
static LRESULT CALLBACK staticWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
|
static LRESULT CALLBACK staticWndProc(HWND hwnd, UINT msg, WPARAM wparam, LPARAM lparam);
|
||||||
|
|
||||||
|
static WindowSystem* system();
|
||||||
|
|
||||||
mutable HWND m_hwnd;
|
mutable HWND m_hwnd;
|
||||||
HCURSOR m_hcursor;
|
HCURSOR m_hcursor;
|
||||||
gfx::Size m_clientSize;
|
gfx::Size m_clientSize;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user