00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
#if !defined(_TTransparentEditText_h_)
00011 #define _TTransparentEditText_h_
00012
00013
#include "TViewNoCompositingCompatible.h"
00014
#include "TUnicodeTextStorage.h"
00015
00016
enum {
00019
kTransparentEditTextCFStringTag = kControlEditTextCFStringTag,
00020
00023
kTransparentEditTextFontStyleTag = kControlFontStyleTag,
00024
00028
kTransparentEditTextKeyFilterTag = kControlEditTextKeyFilterTag,
00029
00031
kTransparentEditTextSelectionTag = kControlEditTextSelectionTag,
00032
00035
kTransparentEditTextLockedTag = kControlEditTextLockedTag,
00036
00045
kTransparentEditTextFocusCGImageRefTag = FOUR_CHAR_CODE('Fimg'),
00046
00054
kTransparentEditTextFocusImageURLTag = FOUR_CHAR_CODE('Furl'),
00055
00058
kTransparentEditTextNextKeyboardFocusControlIDTag = FOUR_CHAR_CODE('NFID'),
00059
00062
kTransparentEditTextNextKeyboardFocusControlRefTag = FOUR_CHAR_CODE('NFCR'),
00063
00065
kTransparentEditTextNextKeyboardFocusPartTag = FOUR_CHAR_CODE('NFPC'),
00066
00068
kTransparentEditTextBackgroundImageTag = FOUR_CHAR_CODE('BKIM'),
00069
00071
kTransparentEditTextFontATSUStyleTag = FOUR_CHAR_CODE('ATSU')
00072
00073 };
00074
00083 class TTransparentEditText :
public TViewNoCompositingCompatible
00084 {
00085
friend class TViewNoCompositingCompatible;
00086
public:
00087 static CFStringRef
GetControlName() {
return CFSTR(
"edittext"); }
00088
protected:
00089
00090
TTransparentEditText(HIViewRef inControl);
00091
virtual ~TTransparentEditText();
00092
00093
virtual ControlKind
GetKind();
00094
00095 virtual bool UseNonblockingTracking() {
return true; }
00096
00098
00099
virtual OSStatus Initialize(TCarbonEvent& inEvent);
00100
virtual void TitleChanged();
00101
virtual void ActiveStateChanged();
00102
virtual OSStatus SetFocusPart(ControlPartCode inDesiredFocus, Boolean inFocusEverything, ControlPartCode* outActualFocus);
00103
virtual OSStatus BoundsChanged(UInt32 inOptions,
const HIRect& inOriginalBounds,
const HIRect& inCurrentBounds, RgnHandle inInvalRgn);
00104
virtual ControlPartCode HitTest(
const HIPoint& inWhere);
00105
virtual OSStatus StillTracking(TCarbonEvent& inEvent, HIPoint& from);
00106
virtual OSStatus StartTracking(TCarbonEvent& inEvent, HIPoint& from);
00107
virtual void DrawStaticBackground(RgnHandle inLimitRgn, CGContextRef inContext,
bool inCompositing );
00108
virtual void CompatibleDraw(RgnHandle inLimitRgn, CGContextRef inContext,
bool inCompositing);
00109
virtual OSStatus GetRegion(ControlPartCode inPart, RgnHandle outRgn );
00110 virtual UInt32
GetBehaviors() {
return TViewNoCompositingCompatible::GetBehaviors() | kControlSupportsEmbedding | kControlSupportsFocus | kControlGetsFocusOnClick; }
00111
virtual OSStatus SetData(OSType inTag, ControlPartCode inPart, Size inSize,
const void* inPtr);
00112
virtual OSStatus GetData(OSType inTag, ControlPartCode inPart, Size inSize, Size* outSize,
void* inPtr);
00113
virtual OSStatus TextInput(TCarbonEvent& inEvent);
00115
00117
virtual void ProcessTextInput(UniChar* text, uint32_t count, uint32_t modifiers);
00118
00119
private:
00120 ATSUStyle mTextStyle;
00121 ATSUTextLayout mTextLayout;
00122
TUnicodeTextStorage mTextStorage;
00123
float mTextInset;
00124
bool mIsActive;
00125
bool mIsFocused;
00126
bool mDrawFrame;
00127 uint32_t mSelectionStart;
00128 uint32_t mSelectionEnd;
00129
bool mSelectionIsLeading;
00130 CFRunLoopTimerRef mCaretUpdateTimer;
00131
bool mCaretIsVisible;
00132 uint32_t mSelectionAnchor;
00133 EventTime mLastClickTime;
00134 HIPoint mLastClickPoint;
00135
int mClickCount;
00136 CGImageRef mFocusImage;
00137 CGImageRef mBackImage;
00138
bool mIsLocked;
00139 ControlKeyFilterProcPtr mKeyFilter;
00140 ControlRef mNextFocusControl;
00141 ControlPartCode mNextFocusPart;
00142
00143
void UpdateTextLayout();
00144
void GetLineHeight(uint32_t lineStartOffset,
float* outAscent,
float* outDescent);
00145
float GetBaselineForLine(uint32_t lineStartOffset);
00146
void FindWordAtOffset(uint32_t offset, uint32_t* wordStart, uint32_t* wordEnd);
00147
00148
void ForceRedraw();
00149
00150
void InstallCaretUpdateTimer();
00151
void RemoveCaretUpdateTimer();
00152
00153
void UpdateCaret();
00154
00155
static void CaretUpdateTimerCallback(CFRunLoopTimerRef timer,
void *info);
00156 };
00157
00158
#endif //_TTransparentEditText_h_