diff options
-rw-r--r-- | cocoa/PlatCocoa.mm | 38 | ||||
-rw-r--r-- | cocoa/ScintillaCocoa.mm | 28 | ||||
-rw-r--r-- | win32/PlatWin.cxx | 57 |
3 files changed, 64 insertions, 59 deletions
diff --git a/cocoa/PlatCocoa.mm b/cocoa/PlatCocoa.mm index fce8fad3e..6905a8009 100644 --- a/cocoa/PlatCocoa.mm +++ b/cocoa/PlatCocoa.mm @@ -70,20 +70,6 @@ inline CGRect PRectangleToCGRect(PRectangle &rc) { return CGRectMake(rc.left, rc.top, rc.Width(), rc.Height()); } -//-------------------------------------------------------------------------------------------------- - -/** - * Converts a Quartz-style rectangle to a PRectangle structure as used by Scintilla. - */ -inline PRectangle CGRectToPRectangle(const CGRect &rect) { - PRectangle rc; - rc.left = (int)(rect.origin.x + 0.5); - rc.top = (int)(rect.origin.y + 0.5); - rc.right = (int)(rect.origin.x + rect.size.width + 0.5); - rc.bottom = (int)(rect.origin.y + rect.size.height + 0.5); - return rc; -} - //----------------- Font --------------------------------------------------------------------------- Font::Font(): fid(0) { @@ -293,7 +279,7 @@ void SurfaceImpl::FillColour(const ColourDesired &back) { CGImageRef SurfaceImpl::GetImage() { // For now, assume that GetImage can only be called on PixMap surfaces. if (!bitmapData) - return nullptr; + return NULL; CGContextFlush(gc); @@ -302,8 +288,8 @@ CGImageRef SurfaceImpl::GetImage() { if (colorSpace == NULL) return NULL; - const int bitmapBytesPerRow = ((int) bitmapWidth * BYTES_PER_PIXEL); - const int bitmapByteCount = (bitmapBytesPerRow * (int) bitmapHeight); + const int bitmapBytesPerRow = bitmapWidth * BYTES_PER_PIXEL; + const int bitmapByteCount = bitmapBytesPerRow * bitmapHeight; // Make a copy of the bitmap data for the image creation and divorce it // From the SurfaceImpl lifetime @@ -668,8 +654,8 @@ static CGImageRef ImageCreateFromRGBA(int width, int height, const unsigned char // Create an RGB color space. CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); if (colorSpace) { - const int bitmapBytesPerRow = ((int) width * 4); - const int bitmapByteCount = (bitmapBytesPerRow * (int) height); + const int bitmapBytesPerRow = width * 4; + const int bitmapByteCount = bitmapBytesPerRow * height; // Create a data provider. CGDataProviderRef dataProvider = 0; @@ -739,8 +725,8 @@ void SurfaceImpl::CopyImageRectangle(Surface &surfaceSource, PRectangle srcRect, CGRect dst = PRectangleToCGRect(dstRect); /* source from QuickDrawToQuartz2D.pdf on developer.apple.com */ - float w = (float) CGImageGetWidth(image); - float h = (float) CGImageGetHeight(image); + const float w = static_cast<float>(CGImageGetWidth(image)); + const float h = static_cast<float>(CGImageGetHeight(image)); CGRect drawRect = CGRectMake(0, 0, w, h); if (!CGRectEqualToRect(src, dst)) { CGFloat sx = CGRectGetWidth(dst) / CGRectGetWidth(src); @@ -988,7 +974,7 @@ XYPOSITION SurfaceImpl::AverageCharWidth(Font &font_) { const int sizeStringLength = ELEMENTS(sizeString); XYPOSITION width = WidthText(font_, sizeString, sizeStringLength); - return (int)((width / (float) sizeStringLength) + 0.5); + return round(width / sizeStringLength); } void SurfaceImpl::SetClip(PRectangle rc) { @@ -1596,7 +1582,7 @@ void ListBoxImpl::SetList(const char *list, char separator, char typesep) { size_t count = strlen(list) + 1; std::vector<char> words(list, list+count); char *startword = words.data(); - char *numword = NULL; + char *numword = nullptr; int i = 0; for (; words[i]; i++) { if (words[i] == separator) { @@ -1605,7 +1591,7 @@ void ListBoxImpl::SetList(const char *list, char separator, char typesep) { *numword = '\0'; Append(startword, numword?atoi(numword + 1):-1); startword = words.data() + i + 1; - numword = NULL; + numword = nullptr; } else if (words[i] == typesep) { numword = words.data() + i; } @@ -1887,11 +1873,11 @@ void Platform::Assert(const char *c, const char *file, int line) { * Implements the platform specific part of library loading. * * @param modulePath The path to the module to load. - * @return A library instance or NULL if the module could not be found or another problem occurred. + * @return A library instance or nullptr if the module could not be found or another problem occurred. */ DynamicLibrary *DynamicLibrary::Load(const char * /* modulePath */) { // Not implemented. - return NULL; + return nullptr; } //-------------------------------------------------------------------------------------------------- diff --git a/cocoa/ScintillaCocoa.mm b/cocoa/ScintillaCocoa.mm index a7e2cff65..1572d53ed 100644 --- a/cocoa/ScintillaCocoa.mm +++ b/cocoa/ScintillaCocoa.mm @@ -2267,6 +2267,20 @@ void ScintillaCocoa::SetDocPointer(Document *document) { //-------------------------------------------------------------------------------------------------- /** + * Convert NSEvent timestamp NSTimeInterval into unsigned int milliseconds wanted by Editor methods. + */ + +namespace { + +unsigned int TimeOfEvent(NSEvent *event) { + return static_cast<unsigned int>(event.timestamp * 1000); +} + +} + +//-------------------------------------------------------------------------------------------------- + +/** * Called by the owning view when the mouse pointer enters the control. */ void ScintillaCocoa::MouseEntered(NSEvent *event) { @@ -2276,7 +2290,7 @@ void ScintillaCocoa::MouseEntered(NSEvent *event) { // Mouse location is given in screen coordinates and might also be outside of our bounds. Point location = ConvertPoint(event.locationInWindow); ButtonMoveWithModifiers(location, - (int)(event.timestamp * 1000), + TimeOfEvent(event), TranslateModifierFlags(event.modifierFlags)); } } @@ -2292,14 +2306,14 @@ void ScintillaCocoa::MouseExited(NSEvent * /* event */) { void ScintillaCocoa::MouseDown(NSEvent *event) { Point location = ConvertPoint(event.locationInWindow); ButtonDownWithModifiers(location, - (int)(event.timestamp * 1000), + TimeOfEvent(event), TranslateModifierFlags(event.modifierFlags)); } void ScintillaCocoa::RightMouseDown(NSEvent *event) { Point location = ConvertPoint(event.locationInWindow); RightButtonDownWithModifiers(location, - (int)(event.timestamp * 1000), + TimeOfEvent(event), TranslateModifierFlags(event.modifierFlags)); } @@ -2309,7 +2323,7 @@ void ScintillaCocoa::MouseMove(NSEvent *event) { lastMouseEvent = event; ButtonMoveWithModifiers(ConvertPoint(event.locationInWindow), - (int)(event.timestamp * 1000), + TimeOfEvent(event), TranslateModifierFlags(event.modifierFlags)); } @@ -2317,7 +2331,7 @@ void ScintillaCocoa::MouseMove(NSEvent *event) { void ScintillaCocoa::MouseUp(NSEvent *event) { ButtonUpWithModifiers(ConvertPoint(event.locationInWindow), - (int)(event.timestamp * 1000), + TimeOfEvent(event), TranslateModifierFlags(event.modifierFlags)); } @@ -2330,9 +2344,9 @@ void ScintillaCocoa::MouseWheel(NSEvent *event) { // In order to make scrolling with larger offset smoother we scroll less lines the larger the // delta value is. if (event.deltaY < 0) - dY = -(int) sqrt(-10.0 * event.deltaY); + dY = -static_cast<int>(sqrt(-10.0 * event.deltaY)); else - dY = (int) sqrt(10.0 * event.deltaY); + dY = static_cast<int>(sqrt(10.0 * event.deltaY)); if (command) { // Zoom! We play with the font sizes in the styles. diff --git a/win32/PlatWin.cxx b/win32/PlatWin.cxx index 71e31e59d..57ef26e6c 100644 --- a/win32/PlatWin.cxx +++ b/win32/PlatWin.cxx @@ -1787,23 +1787,31 @@ Surface *Surface::Allocate(int technology) { #endif } +namespace { + +HWND HwndFromWindowID(WindowID wid) { + return static_cast<HWND>(wid); +} + +} + Window::~Window() { } void Window::Destroy() { if (wid) - ::DestroyWindow(static_cast<HWND>(wid)); - wid = 0; + ::DestroyWindow(HwndFromWindowID(wid)); + wid = nullptr; } PRectangle Window::GetPosition() { RECT rc; - ::GetWindowRect(static_cast<HWND>(wid), &rc); + ::GetWindowRect(HwndFromWindowID(wid), &rc); return PRectangle::FromInts(rc.left, rc.top, rc.right, rc.bottom); } void Window::SetPosition(PRectangle rc) { - ::SetWindowPos(static_cast<HWND>(wid), + ::SetWindowPos(HwndFromWindowID(wid), 0, static_cast<int>(rc.left), static_cast<int>(rc.top), static_cast<int>(rc.Width()), static_cast<int>(rc.Height()), SWP_NOZORDER | SWP_NOACTIVATE); } @@ -1829,10 +1837,10 @@ static RECT RectFromMonitor(HMONITOR hMonitor) { } void Window::SetPositionRelative(PRectangle rc, Window relativeTo) { - const LONG style = ::GetWindowLong(static_cast<HWND>(wid), GWL_STYLE); + const LONG style = ::GetWindowLong(HwndFromWindowID(wid), GWL_STYLE); if (style & WS_POPUP) { POINT ptOther = {0, 0}; - ::ClientToScreen(static_cast<HWND>(relativeTo.GetID()), &ptOther); + ::ClientToScreen(HwndFromWindowID(relativeTo.GetID()), &ptOther); rc.Move(static_cast<XYPOSITION>(ptOther.x), static_cast<XYPOSITION>(ptOther.y)); const RECT rcMonitor = RectFromPRectangle(rc); @@ -1862,28 +1870,28 @@ void Window::SetPositionRelative(PRectangle rc, Window relativeTo) { PRectangle Window::GetClientPosition() { RECT rc={0,0,0,0}; if (wid) - ::GetClientRect(static_cast<HWND>(wid), &rc); + ::GetClientRect(HwndFromWindowID(wid), &rc); return PRectangle::FromInts(rc.left, rc.top, rc.right, rc.bottom); } void Window::Show(bool show) { if (show) - ::ShowWindow(static_cast<HWND>(wid), SW_SHOWNOACTIVATE); + ::ShowWindow(HwndFromWindowID(wid), SW_SHOWNOACTIVATE); else - ::ShowWindow(static_cast<HWND>(wid), SW_HIDE); + ::ShowWindow(HwndFromWindowID(wid), SW_HIDE); } void Window::InvalidateAll() { - ::InvalidateRect(static_cast<HWND>(wid), NULL, FALSE); + ::InvalidateRect(HwndFromWindowID(wid), NULL, FALSE); } void Window::InvalidateRectangle(PRectangle rc) { const RECT rcw = RectFromPRectangle(rc); - ::InvalidateRect(static_cast<HWND>(wid), &rcw, FALSE); + ::InvalidateRect(HwndFromWindowID(wid), &rcw, FALSE); } void Window::SetFont(Font &font) { - ::SendMessage(static_cast<HWND>(wid), WM_SETFONT, + ::SendMessage(HwndFromWindowID(wid), WM_SETFONT, reinterpret_cast<WPARAM>(font.GetID()), 0); } @@ -2128,7 +2136,7 @@ void ListBoxX::Create(Window &parent_, int ctrlID_, Point location_, int lineHei lineHeight = lineHeight_; unicodeMode = unicodeMode_; technology = technology_; - HWND hwndParent = static_cast<HWND>(parent->GetID()); + HWND hwndParent = HwndFromWindowID(parent->GetID()); HINSTANCE hinstanceParent = GetWindowInstance(hwndParent); // Window created as popup so not clipped within parent client area wid = ::CreateWindowEx( @@ -2169,7 +2177,7 @@ int ListBoxX::GetVisibleRows() const { } HWND ListBoxX::GetHWND() const { - return static_cast<HWND>(GetID()); + return HwndFromWindowID(GetID()); } PRectangle ListBoxX::GetDesiredRect() { @@ -2610,11 +2618,9 @@ void ListBoxX::OnSelChange() { } POINT ListBoxX::GetClientExtent() const { - Window win = *this; // Copy HWND to avoid const problems - const PRectangle rc = win.GetPosition(); - POINT ret; - ret.x = static_cast<LONG>(rc.Width()); - ret.y = static_cast<LONG>(rc.Height()); + RECT rc; + ::GetWindowRect(HwndFromWindowID(wid), &rc); + POINT ret { rc.right - rc.left, rc.bottom - rc.top }; return ret; } @@ -2655,6 +2661,7 @@ void ListBoxX::Paint(HDC hDC) { LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { try { + ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd))); switch (iMessage) { case WM_ERASEBKGND: return TRUE; @@ -2662,9 +2669,9 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, case WM_PAINT: { PAINTSTRUCT ps; HDC hDC = ::BeginPaint(hWnd, &ps); - ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd))); - if (lbx) + if (lbx) { lbx->Paint(hDC); + } ::EndPaint(hWnd, &ps); } return 0; @@ -2680,7 +2687,6 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, const int item = LOWORD(lResult); if (HIWORD(lResult) == 0 && item >= 0) { ::SendMessage(hWnd, LB_SETCURSEL, item, 0); - ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd))); if (lbx) { lbx->OnSelChange(); } @@ -2692,7 +2698,6 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, return 0; case WM_LBUTTONDBLCLK: { - ListBoxX *lbx = static_cast<ListBoxX *>(PointerFromWindow(::GetParent(hWnd))); if (lbx) { lbx->OnDoubleClick(); } @@ -2718,7 +2723,7 @@ LRESULT PASCAL ListBoxX::ControlWndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LRESULT ListBoxX::WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam) { switch (iMessage) { case WM_CREATE: { - HINSTANCE hinstanceParent = GetWindowInstance(static_cast<HWND>(parent->GetID())); + HINSTANCE hinstanceParent = GetWindowInstance(HwndFromWindowID(parent->GetID())); // Note that LBS_NOINTEGRALHEIGHT is specified to fix cosmetic issue when resizing the list // but has useful side effect of speeding up list population significantly lb = ::CreateWindowEx( @@ -2754,7 +2759,7 @@ LRESULT ListBoxX::WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam case WM_COMMAND: // This is not actually needed now - the registered double click action is used // directly to action a choice from the list. - ::SendMessage(static_cast<HWND>(parent->GetID()), iMessage, wParam, lParam); + ::SendMessage(HwndFromWindowID(parent->GetID()), iMessage, wParam, lParam); break; case WM_MEASUREITEM: { @@ -2905,7 +2910,7 @@ void Menu::Destroy() { void Menu::Show(Point pt, Window &w) { ::TrackPopupMenu(static_cast<HMENU>(mid), TPM_RIGHTBUTTON, static_cast<int>(pt.x - 4), static_cast<int>(pt.y), 0, - static_cast<HWND>(w.GetID()), NULL); + HwndFromWindowID(w.GetID()), NULL); Destroy(); } |