a whole bunch of OSX tweaks
diff --git a/Mac/Tools/IDE/Wtext.py b/Mac/Tools/IDE/Wtext.py
index 0d9203d..183f4d8 100644
--- a/Mac/Tools/IDE/Wtext.py
+++ b/Mac/Tools/IDE/Wtext.py
@@ -1,6 +1,8 @@
from Carbon import Evt, Events, Fm, Fonts
from Carbon import Qd, Res, Scrap
from Carbon import TE, TextEdit, Win
+from Carbon import App
+from Carbon.Appearance import kThemeStateActive, kThemeStateInactive
import waste
import WASTEconst
import Wbase
@@ -55,25 +57,29 @@
class _ScrollWidget:
# to be overridden
- def getscrollbarvalues(self):
+ def getscrollrects(self):
+ """Return (destrect, viewrect)."""
return None, None
# internal method
- def updatescrollbars(self):
- vx, vy = self.getscrollbarvalues()
- if self._parent._barx:
- if vx <> None:
- self._parent._barx.enable(1)
- self._parent._barx.set(vx)
- else:
- self._parent._barx.enable(0)
- if self._parent._bary:
- if vy <> None:
- self._parent._bary.enable(1)
- self._parent._bary.set(vy)
- else:
- self._parent._bary.enable(0)
+ def updatescrollbars(self):
+ (dl, dt, dr, db), (vl, vt, vr, vb) = self.getscrollrects()
+ if self._parent._barx:
+ viewwidth = vr - vl
+ destwidth = dr - dl
+ bar = self._parent._barx
+ bar.setmax(destwidth - viewwidth)
+ bar.setviewsize(viewwidth)
+ bar.set(vl - dl)
+ if self._parent._bary:
+ viewheight = vb - vt
+ destheight = db - dt
+ bar = self._parent._bary
+ bar.setmax(destheight - viewheight)
+ bar.setviewsize(viewheight)
+ bar.set(vt - dt)
+
UNDOLABELS = [ # Indexed by WEGetUndoInfo() value
None, "", "typing", "Cut", "Paste", "Clear", "Drag", "Style",
@@ -373,6 +379,7 @@
if self._selected and self._activated:
self.drawselframe(1)
Qd.FrameRect(self._bounds)
+ #App.DrawThemeEditTextFrame(self._bounds, kThemeStateActive)
# scrolling
def scrollpageup(self):
@@ -385,13 +392,13 @@
def scrolltop(self):
if self._parent._bary and self._parent._bary._enabled:
- self.vscroll(0)
+ self.vscroll(self._parent._bary.getmin())
if self._parent._barx and self._parent._barx._enabled:
- self.hscroll(0)
+ self.hscroll(self._parent._barx.getmin())
def scrollbottom(self):
if self._parent._bary and self._parent._bary._enabled:
- self.vscroll(32767)
+ self.vscroll(self._parent._bary.getmax())
# menu handlers
def domenu_copy(self, *args):
@@ -469,20 +476,15 @@
self.selectall()
# private
- def getscrollbarvalues(self):
- dr = self.ted.WEGetDestRect()
- vr = self.ted.WEGetViewRect()
- vx = Wcontrols._scalebarvalue(dr[0], dr[2], vr[0], vr[2])
- vy = Wcontrols._scalebarvalue(dr[1], dr[3], vr[1], vr[3])
- return vx, vy
+ def getscrollrects(self):
+ return self.ted.WEGetDestRect(), self.ted.WEGetViewRect()
def vscroll(self, value):
lineheight = self.ted.WEGetHeight(0, 1)
dr = self.ted.WEGetDestRect()
vr = self.ted.WEGetViewRect()
- destheight = dr[3] - dr[1]
viewheight = vr[3] - vr[1]
- viewoffset = maxdelta = vr[1] - dr[1]
+ maxdelta = vr[1] - dr[1]
mindelta = vr[3] - dr[3]
if value == "+":
delta = lineheight
@@ -493,11 +495,7 @@
elif value == "--":
delta = lineheight - viewheight
else: # in thumb
- cur = (32767L * viewoffset) / (destheight - viewheight)
- delta = (cur-value)*(destheight - viewheight)/32767
- if abs(delta - viewoffset) <=2:
- # compensate for irritating rounding error
- delta = viewoffset
+ delta = vr[1] - dr[1] - value
delta = min(maxdelta, delta)
delta = max(mindelta, delta)
self.ted.WEScroll(0, delta)
@@ -519,11 +517,12 @@
elif value == "--":
delta = 0.5 * (vr[0] - vr[2])
else: # in thumb
- cur = (32767 * viewoffset) / (destwidth - viewwidth)
- delta = (cur-value)*(destwidth - viewwidth)/32767
- if abs(delta - viewoffset) <=2:
- # compensate for irritating rounding error
- delta = viewoffset
+ delta = vr[0] - dr[0] - value
+ #cur = (32767 * viewoffset) / (destwidth - viewwidth)
+ #delta = (cur-value)*(destwidth - viewwidth)/32767
+ #if abs(delta - viewoffset) <=2:
+ # # compensate for irritating rounding error
+ # delta = viewoffset
delta = min(maxdelta, delta)
delta = max(mindelta, delta)
self.ted.WEScroll(delta, 0)
@@ -923,6 +922,7 @@
if autoscroll:
self.ted.WEFeatureFlag(WASTEconst.weFAutoScroll, 0)
self.ted.WESetSelection(count, count + 1)
+ Qd.QDFlushPortBuffer(self._parentwindow.wid, None) # needed under OSX
time.sleep(0.2)
self.ted.WESetSelection(selstart, selend)
if autoscroll: