some more ipad fixed

This commit is contained in:
Fabian Jakobs 2011-02-02 08:02:16 +01:00
commit aed8ec2580
7 changed files with 36 additions and 14 deletions

View file

@ -253,8 +253,7 @@ canon.addCommand({
canon.addCommand({ canon.addCommand({
name: "inserttext", name: "inserttext",
exec: function(env, args, request) { exec: function(env, args, request) {
env.editor.insert(lang.stringRepeat(args.text || "", env.editor.insert(lang.stringRepeat(args.text || "", args.times || 1));
args.times || 1));
} }
}); });

View file

@ -76,10 +76,13 @@
.ace_editor textarea { .ace_editor textarea {
position: fixed; position: fixed;
z-index: -1; z-index: -1;
width: 10px; padding: 0;
margin: 0;
width: 60px;
height: 30px; height: 30px;
opacity: 0; opacity: 0;
background: transparent; background: transparent;
webkit-appearance: none;
appearance: none; appearance: none;
border: none; border: none;
resize: none; resize: none;
@ -97,7 +100,6 @@
} }
.ace_text-layer { .ace_text-layer {
font-family: Monaco, "Courier New", monospace;
color: black; color: black;
} }

View file

@ -45,8 +45,10 @@ require("pilot/fixoldbrowsers");
var oop = require("pilot/oop"); var oop = require("pilot/oop");
var event = require("pilot/event"); var event = require("pilot/event");
var lang = require("pilot/lang"); var lang = require("pilot/lang");
var useragent = require("pilot/useragent");
var TextInput = require("ace/keyboard/textinput").TextInput; var TextInput = require("ace/keyboard/textinput").TextInput;
var MouseHandler = require("ace/mouse_handler").MouseHandler; var MouseHandler = require("ace/mouse_handler").MouseHandler;
var TouchHandler = require("ace/touch_handler").TouchHandler;
var KeyBinding = require("ace/keyboard/keybinding").KeyBinding; var KeyBinding = require("ace/keyboard/keybinding").KeyBinding;
var EditSession = require("ace/edit_session").EditSession; var EditSession = require("ace/edit_session").EditSession;
var Search = require("ace/search").Search; var Search = require("ace/search").Search;
@ -62,7 +64,11 @@ var Editor =function(renderer, session) {
this.textInput = new TextInput(renderer.getTextAreaContainer(), this); this.textInput = new TextInput(renderer.getTextAreaContainer(), this);
this.keyBinding = new KeyBinding(this); this.keyBinding = new KeyBinding(this);
this.$mouseHandler = new MouseHandler(this); // TODO detect touch event support
if (useragent.isIPad)
this.$mouseHandler = new TouchHandler(this);
else
this.$mouseHandler = new MouseHandler(this);
this.$selectionMarker = null; this.$selectionMarker = null;
this.$highlightLineMarker = null; this.$highlightLineMarker = null;
@ -242,11 +248,13 @@ var Editor =function(renderer, session) {
this.onFocus = function() { this.onFocus = function() {
this.renderer.showCursor(); this.renderer.showCursor();
this.renderer.visualizeFocus(); this.renderer.visualizeFocus();
this._dispatchEvent("focus");
}; };
this.onBlur = function() { this.onBlur = function() {
this.renderer.hideCursor(); this.renderer.hideCursor();
this.renderer.visualizeBlur(); this.renderer.visualizeBlur();
this._dispatchEvent("blur");
}; };
this.onDocumentChange = function(e) { this.onDocumentChange = function(e) {

View file

@ -39,6 +39,7 @@
define(function(require, exports, module) { define(function(require, exports, module) {
var dom = require("pilot/dom"); var dom = require("pilot/dom");
var useragent = require("pilot/useragent");
var Cursor = function(parentEl) { var Cursor = function(parentEl) {
this.element = document.createElement("div"); this.element = document.createElement("div");
@ -78,7 +79,9 @@ var Cursor = function(parentEl) {
this.showCursor = function() { this.showCursor = function() {
this.isVisible = true; this.isVisible = true;
this.element.appendChild(this.cursor);
if (!useragent.isIPad)
this.element.appendChild(this.cursor);
var cursor = this.cursor; var cursor = this.cursor;
cursor.style.visibility = "visible"; cursor.style.visibility = "visible";
@ -132,7 +135,7 @@ var Cursor = function(parentEl) {
this.cursor.style.width = config.characterWidth + "px"; this.cursor.style.width = config.characterWidth + "px";
this.cursor.style.height = config.lineHeight + "px"; this.cursor.style.height = config.lineHeight + "px";
if (this.isVisible) { if (this.isVisible && !useragent.isIPad) {
this.element.appendChild(this.cursor); this.element.appendChild(this.cursor);
} }
this.restartTimer(); this.restartTimer();

View file

@ -93,7 +93,8 @@ var Text = function(parentEl) {
}, },
this.$measureSizes = function() { this.$measureSizes = function() {
var n = 1000; var n = 500;
var probe = "Xy";
if (!this.$measureNode) { if (!this.$measureNode) {
var measureNode = this.$measureNode = document.createElement("div"); var measureNode = this.$measureNode = document.createElement("div");
var style = measureNode.style; var style = measureNode.style;
@ -109,7 +110,7 @@ var Text = function(parentEl) {
// in FF 3.6 monospace fonts can have a fixed sub pixel width. // in FF 3.6 monospace fonts can have a fixed sub pixel width.
// that's why we have to measure many characters // that's why we have to measure many characters
// Note: characterWidth can be a float! // Note: characterWidth can be a float!
measureNode.innerHTML = lang.stringRepeat("Xy", n); dom.setInnerText(measureNode, lang.stringRepeat(probe, n));
document.body.insertBefore(measureNode, document.body.firstChild); document.body.insertBefore(measureNode, document.body.firstChild);
} }
@ -119,9 +120,10 @@ var Text = function(parentEl) {
style[prop] = value; style[prop] = value;
} }
//console.log(this.$measureNode.offsetWidth / (n * probe.length))
var size = { var size = {
height: this.$measureNode.offsetHeight, height: this.$measureNode.offsetHeight,
width: this.$measureNode.offsetWidth / (n * 2) width: this.$measureNode.offsetWidth / (n * probe.length)
}; };
return size; return size;
}; };

View file

@ -313,8 +313,16 @@ var VirtualRenderer = function(container, theme) {
var bounds = this.content.getBoundingClientRect(); var bounds = this.content.getBoundingClientRect();
var offset = (this.layerConfig && this.layerConfig.offset) || 0; var offset = (this.layerConfig && this.layerConfig.offset) || 0;
textarea.style.left = (bounds.left + pos.left + this.$padding) + "px"; var left = bounds.left + pos.left + this.$padding;
textarea.style.top = (bounds.top + pos.top - this.scrollTop + offset) + "px"; var top = bounds.top + pos.top - this.scrollTop + offset;
if (useragent.isIPad) {
left -= 3;
top -= 0;
}
textarea.style.left = left + "px";
textarea.style.top = top + "px";
}; };
this.getFirstVisibleRow = function() { this.getFirstVisibleRow = function() {