diff --git a/atom/browser/api/atom_api_text_field.cc b/atom/browser/api/atom_api_text_field.cc new file mode 100644 index 000000000000..2eb927591eca --- /dev/null +++ b/atom/browser/api/atom_api_text_field.cc @@ -0,0 +1,57 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#include "atom/browser/api/atom_api_text_field.h" + +#include "atom/common/api/constructor.h" +#include "native_mate/dictionary.h" +#include "ui/views/controls/textfield/textfield.h" + +#include "atom/common/node_includes.h" + +namespace atom { + +namespace api { + +TextField::TextField() : View(new views::Textfield()) { + view()->set_owned_by_client(); +} + +TextField::~TextField() {} + +// static +mate::WrappableBase* TextField::New(mate::Arguments* args) { + // Constructor call. + auto* view = new TextField(); + view->InitWith(args->isolate(), args->GetThis()); + return view; +} + +// static +void TextField::BuildPrototype(v8::Isolate* isolate, + v8::Local prototype) { + prototype->SetClassName(mate::StringToV8(isolate, "TextField")); +} + +} // namespace api + +} // namespace atom + +namespace { + +using atom::api::TextField; + +void Initialize(v8::Local exports, + v8::Local unused, + v8::Local context, + void* priv) { + v8::Isolate* isolate = context->GetIsolate(); + mate::Dictionary dict(isolate, exports); + dict.Set("TextField", mate::CreateConstructor( + isolate, base::Bind(&TextField::New))); +} + +} // namespace + +NODE_BUILTIN_MODULE_CONTEXT_AWARE(atom_browser_text_field, Initialize) diff --git a/atom/browser/api/atom_api_text_field.h b/atom/browser/api/atom_api_text_field.h new file mode 100644 index 000000000000..c7dfa0c9cea0 --- /dev/null +++ b/atom/browser/api/atom_api_text_field.h @@ -0,0 +1,34 @@ +// Copyright (c) 2018 GitHub, Inc. +// Use of this source code is governed by the MIT license that can be +// found in the LICENSE file. + +#ifndef ATOM_BROWSER_API_ATOM_API_TEXT_FIELD_H_ +#define ATOM_BROWSER_API_ATOM_API_TEXT_FIELD_H_ + +#include "atom/browser/api/atom_api_view.h" +#include "native_mate/handle.h" + +namespace atom { + +namespace api { + +class TextField : public View { + public: + static mate::WrappableBase* New(mate::Arguments* args); + + static void BuildPrototype(v8::Isolate* isolate, + v8::Local prototype); + + private: + TextField(); + ~TextField() override; + + private: + DISALLOW_COPY_AND_ASSIGN(TextField); +}; + +} // namespace api + +} // namespace atom + +#endif // ATOM_BROWSER_API_ATOM_API_TEXT_FIELD_H_ diff --git a/atom/common/node_bindings.cc b/atom/common/node_bindings.cc index 6976687047b4..f8c455b63a16 100644 --- a/atom/common/node_bindings.cc +++ b/atom/common/node_bindings.cc @@ -66,7 +66,8 @@ #define ELECTRON_VIEW_MODULES(V) \ V(atom_browser_box_layout) \ - V(atom_browser_layout_manager) + V(atom_browser_layout_manager) \ + V(atom_browser_text_field) #define ELECTRON_DESKTOP_CAPTURER_MODULE(V) V(atom_browser_desktop_capturer) diff --git a/filenames.gypi b/filenames.gypi index 284c82ae6f93..2956a9c12832 100644 --- a/filenames.gypi +++ b/filenames.gypi @@ -785,12 +785,15 @@ 'js_sources': [ 'lib/browser/api/box-layout.js', 'lib/browser/api/layout-manager.js', + 'lib/browser/api/text-field.js', ], 'lib_sources': [ 'atom/browser/api/atom_api_box_layout.cc', 'atom/browser/api/atom_api_box_layout.h', 'atom/browser/api/atom_api_layout_manager.cc', 'atom/browser/api/atom_api_layout_manager.h', + 'atom/browser/api/atom_api_text_field.cc', + 'atom/browser/api/atom_api_text_field.h', ], }], # enable_view_api ['mas_build==1', { diff --git a/lib/browser/api/module-list.js b/lib/browser/api/module-list.js index 663da97c3e6f..1da7668b98ba 100644 --- a/lib/browser/api/module-list.js +++ b/lib/browser/api/module-list.js @@ -21,6 +21,7 @@ module.exports = [ {name: 'screen', file: 'screen'}, {name: 'session', file: 'session'}, {name: 'systemPreferences', file: 'system-preferences'}, + {name: 'TextField', file: 'text-field'}, {name: 'TopLevelWindow', file: 'top-level-window'}, {name: 'TouchBar', file: 'touch-bar'}, {name: 'Tray', file: 'tray'}, diff --git a/lib/browser/api/text-field.js b/lib/browser/api/text-field.js new file mode 100644 index 000000000000..4b96ce27ea78 --- /dev/null +++ b/lib/browser/api/text-field.js @@ -0,0 +1,15 @@ +'use strict' + +const electron = require('electron') + +const {View} = electron +const {TextField} = process.atomBinding('text_field') + +Object.setPrototypeOf(TextField.prototype, View.prototype) + +TextField.prototype._init = function () { + // Call parent class's _init. + View.prototype._init.call(this) +} + +module.exports = TextField