mirror of
https://github.com/notepad-plus-plus/notepad-plus-plus.git
synced 2025-07-31 01:34:58 +02:00
Release 5.5.2 ( https://www.scintilla.org/scintilla552.zip ) Released 21 August 2024. Add SCI_SETCOPYSEPARATOR for separator between parts of a multiple selection when copied to the clipboard. Feature #1530. Add SCI_GETUNDOSEQUENCE to determine whether an undo sequence is active and its nesting depth. Add SCI_STYLESETSTRETCH to support condensed and expanded text styles. Add SCI_LINEINDENT and SCI_LINEDEDENT. Feature #1524. Fix bug on Cocoa where double-click stopped working when system had been running for a long time. On Cocoa implement more values of font weight and stretch. Release 5.4.0 ( https://www.scintilla.org/lexilla540.zip ) Released 21 August 2024. Inside Lexilla, LexerModule instances are now const. This will require changes to applications that modify Lexilla.cxx, which may be done to add custom lexers. Lexer added for TOML "toml". Bash: Handle backslash in heredoc delimiter. Issue #257. Progress: Fix lexing of nested comments. Pull request #258. Force lower-casing of case-insensitive keyword lists so keywords match in some lexers. Issue #259. Close #15564
143 lines
5.7 KiB
Objective-C
143 lines
5.7 KiB
Objective-C
|
|
/**
|
|
* Copyright 2009 Sun Microsystems, Inc. All rights reserved.
|
|
* This file is dual licensed under LGPL v2.1 and the Scintilla license (http://www.scintilla.org/License.txt).
|
|
* @file PlatCocoa.h
|
|
*/
|
|
|
|
#ifndef PLATCOCOA_H
|
|
#define PLATCOCOA_H
|
|
|
|
#include <cstdlib>
|
|
#include <cassert>
|
|
#include <cstring>
|
|
#include <cstdio>
|
|
|
|
#include <Cocoa/Cocoa.h>
|
|
|
|
#include "ScintillaTypes.h"
|
|
#include "ScintillaMessages.h"
|
|
|
|
#include "Debugging.h"
|
|
#include "Geometry.h"
|
|
#include "Platform.h"
|
|
|
|
#include "DictionaryForCF.h"
|
|
#include "QuartzTextLayout.h"
|
|
|
|
NSRect PRectangleToNSRect(const Scintilla::Internal::PRectangle &rc);
|
|
Scintilla::Internal::PRectangle NSRectToPRectangle(const NSRect &rc);
|
|
CFStringEncoding EncodingFromCharacterSet(bool unicode, Scintilla::CharacterSet characterSet);
|
|
|
|
@interface ScintillaContextMenu : NSMenu {
|
|
Scintilla::Internal::ScintillaCocoa *owner;
|
|
}
|
|
- (void) handleCommand: (NSMenuItem *) sender;
|
|
- (void) setOwner: (Scintilla::Internal::ScintillaCocoa *) newOwner;
|
|
|
|
@end
|
|
|
|
namespace Scintilla::Internal {
|
|
|
|
// A class to do the actual text rendering for us using Quartz 2D.
|
|
class SurfaceImpl : public Surface {
|
|
private:
|
|
SurfaceMode mode;
|
|
|
|
CGContextRef gc;
|
|
|
|
/** If the surface is a bitmap context, contains a reference to the bitmap data. */
|
|
std::unique_ptr<uint8_t[]> bitmapData;
|
|
/** If the surface is a bitmap context, stores the dimensions of the bitmap. */
|
|
int bitmapWidth;
|
|
int bitmapHeight;
|
|
|
|
/** Set the CGContext's fill colour to the specified desired colour. */
|
|
void FillColour(ColourRGBA fill);
|
|
|
|
void PenColourAlpha(ColourRGBA fore);
|
|
|
|
void SetFillStroke(FillStroke fillStroke);
|
|
|
|
// 24-bit RGB+A bitmap data constants
|
|
static const int BITS_PER_COMPONENT = 8;
|
|
static const int BITS_PER_PIXEL = BITS_PER_COMPONENT * 4;
|
|
static const int BYTES_PER_PIXEL = BITS_PER_PIXEL / 8;
|
|
|
|
bool UnicodeMode() const noexcept;
|
|
void Clear();
|
|
|
|
public:
|
|
SurfaceImpl();
|
|
SurfaceImpl(const SurfaceImpl *surface, int width, int height);
|
|
~SurfaceImpl() override;
|
|
|
|
void Init(WindowID wid) override;
|
|
void Init(SurfaceID sid, WindowID wid) override;
|
|
std::unique_ptr<Surface> AllocatePixMap(int width, int height) override;
|
|
std::unique_ptr<SurfaceImpl> AllocatePixMapImplementation(int width, int height);
|
|
CGContextRef GetContext() { return gc; }
|
|
|
|
void SetMode(SurfaceMode mode) override;
|
|
|
|
void Release() noexcept override;
|
|
int SupportsFeature(Scintilla::Supports feature) noexcept override;
|
|
bool Initialised() override;
|
|
|
|
/** Returns a CGImageRef that represents the surface. Returns NULL if this is not possible. */
|
|
CGImageRef CreateImage();
|
|
void CopyImageRectangle(SurfaceImpl *source, PRectangle srcRect, PRectangle dstRect);
|
|
|
|
int LogPixelsY() override;
|
|
int PixelDivisions() override;
|
|
int DeviceHeightFont(int points) override;
|
|
void LineDraw(Point start, Point end, Stroke stroke) override;
|
|
void PolyLine(const Point *pts, size_t npts, Stroke stroke) override;
|
|
void Polygon(const Scintilla::Internal::Point *pts, size_t npts, FillStroke fillStroke) override;
|
|
void RectangleDraw(PRectangle rc, FillStroke fillStroke) override;
|
|
void RectangleFrame(PRectangle rc, Stroke stroke) override;
|
|
void FillRectangle(PRectangle rc, Fill fill) override;
|
|
void FillRectangleAligned(PRectangle rc, Fill fill) override;
|
|
void FillRectangle(PRectangle rc, Surface &surfacePattern) override;
|
|
void RoundedRectangle(PRectangle rc, FillStroke fillStroke) override;
|
|
void AlphaRectangle(PRectangle rc, XYPOSITION cornerSize, FillStroke fillStroke) override;
|
|
void GradientRectangle(PRectangle rc, const std::vector<ColourStop> &stops, GradientOptions options) override;
|
|
void DrawRGBAImage(PRectangle rc, int width, int height, const unsigned char *pixelsImage) override;
|
|
void Ellipse(PRectangle rc, FillStroke fillStroke) override;
|
|
void Stadium(PRectangle rc, FillStroke fillStroke, Ends ends) override;
|
|
void Copy(PRectangle rc, Scintilla::Internal::Point from, Surface &surfaceSource) override;
|
|
std::unique_ptr<IScreenLineLayout> Layout(const IScreenLine *screenLine) override;
|
|
|
|
void DrawTextNoClip(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
|
|
ColourRGBA back) override;
|
|
void DrawTextClipped(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
|
|
ColourRGBA back) override;
|
|
void DrawTextTransparent(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore) override;
|
|
void MeasureWidths(const Font *font_, std::string_view text, XYPOSITION *positions) override;
|
|
XYPOSITION WidthText(const Font *font_, std::string_view text) override;
|
|
|
|
void DrawTextNoClipUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
|
|
ColourRGBA back) override;
|
|
void DrawTextClippedUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore,
|
|
ColourRGBA back) override;
|
|
void DrawTextTransparentUTF8(PRectangle rc, const Font *font_, XYPOSITION ybase, std::string_view text, ColourRGBA fore) override;
|
|
void MeasureWidthsUTF8(const Font *font_, std::string_view text, XYPOSITION *positions) override;
|
|
XYPOSITION WidthTextUTF8(const Font *font_, std::string_view text) override;
|
|
|
|
XYPOSITION Ascent(const Font *font_) override;
|
|
XYPOSITION Descent(const Font *font_) override;
|
|
XYPOSITION InternalLeading(const Font *font_) override;
|
|
XYPOSITION Height(const Font *font_) override;
|
|
XYPOSITION AverageCharWidth(const Font *font_) override;
|
|
|
|
void SetClip(PRectangle rc) override;
|
|
void PopClip() override;
|
|
void FlushCachedState() override;
|
|
void FlushDrawing() override;
|
|
|
|
}; // SurfaceImpl class
|
|
|
|
} // Scintilla namespace
|
|
|
|
#endif
|