]> git.saurik.com Git - wxWidgets.git/blobdiff - src/stc/scintilla/include/Platform.h
more GTK-ish toolbar drawing
[wxWidgets.git] / src / stc / scintilla / include / Platform.h
index 3a5e9816dc72b52027e43e955aeb8993c239ef96..48f337a16a700173959828403acbacbdba3b8a16 100644 (file)
@@ -1,18 +1,21 @@
 // Scintilla source code edit control
-// Platform.h - interface to platform facilities
-// Also includes some basic utilities
-// Implemented in PlatGTK.cxx for GTK+/Linux, PlatWin.cxx for Windows, and PlatWX.cxx for wxWindows
-// Copyright 1998-2000 by Neil Hodgson <neilh@scintilla.org>
+/** @file Platform.h
+ ** Interface to platform facilities. Also includes some basic utilities.
+ ** Implemented in PlatGTK.cxx for GTK+/Linux, PlatWin.cxx for Windows, and PlatWX.cxx for wxWindows.
+ **/
+// Copyright 1998-2001 by Neil Hodgson <neilh@scintilla.org>
 // The License.txt file describes the conditions under which this software may be distributed.
 
 #ifndef PLATFORM_H
 #define PLATFORM_H
 
-// PLAT_GTK = GTK+ on Linux, PLAT_WIN = Win32 API on Win32 OS
+// PLAT_GTK = GTK+ on Linux or Win32
+// PLAT_GTK_WIN32 is defined additionally when running PLAT_GTK under Win32
+// PLAT_WIN = Win32 API on Win32 OS
 // PLAT_WX is wxWindows on any supported platform
-// Could also have PLAT_GTKWIN = GTK+ on Win32 OS in future
 
 #define PLAT_GTK 0
+#define PLAT_GTK_WIN32 0
 #define PLAT_WIN 0
 #define PLAT_WX  0
 
 #undef PLAT_GTK
 #define PLAT_GTK 1
 
+#ifdef _MSC_VER
+#undef PLAT_GTK_WIN32
+#define PLAT_GTK_WIN32 1
+#endif
+
 #else
 #undef PLAT_WIN
 #define PLAT_WIN 1
@@ -34,6 +42,9 @@
 // Include the main header for each platform
 
 #if PLAT_GTK
+#ifdef _MSC_VER
+#pragma warning(disable: 4505 4514 4710 4800)
+#endif
 #include <gtk/gtk.h>
 #include <gdk/gdkkeysyms.h>
 #endif
 #define _WIN32_WINNT  0x0400 // Otherwise some required stuff gets ifdef'd out
 // Vassili Bourdo: shut up annoying Visual C++ warnings:
 #ifdef _MSC_VER
-#pragma warning(disable: 4800 4244 4309)
+#pragma warning(disable: 4244 4309 4710 4800)
 #endif
 #include <windows.h>
+#include <commctrl.h>
 #include <richedit.h>
 #endif
 
 #include <wx/wx.h>
 #endif
 
+#define ColourID        scColourID
+#define FontID          scFontID
+#define SurfaceID       scSurfaceID
+#define WindowID        scWindowID
+#define MenuID          scMenuID
+#define Point           scPoint
+#define PRectangle      scPRectangle
+#define Colour          scColour
+#define ColourPair      scColourPair
+#define Window          scWindow
+#define Palette         scPalette
+#define Font            scFont
+#define Surface         scSurface
+#define Window          scWindow
+#define ListBox         scListBox
+#define Menu            scMenu
+#define Platform        scPlatform
+#define TextRange       scTextRange
+#define KeyMap          scKeyMap
+#define Style           scStyle
+
+
 // Underlying the implementation of the platform classes are platform specific types.
 // Sometimes these need to be passed around by client code so they are defined here
 
@@ -79,29 +113,28 @@ typedef wxWindow* WindowID;
 typedef wxMenu* MenuID;
 #endif
 
-#if PLAT_GTK || PLAT_WX
-#define SHIFT_PRESSED 1
-#define LEFT_CTRL_PRESSED 2
-#define LEFT_ALT_PRESSED 4
-#endif
-
-// Point is exactly the same as the Win32 POINT and GTK+ GdkPoint so can be used interchangeably
-
+/**
+ * A geometric point class.
+ * Point is exactly the same as the Win32 POINT and GTK+ GdkPoint so can be used interchangeably.
+ */
 class Point {
 public:
        int x;
        int y;
-       
+
        Point(int x_=0, int y_=0) : x(x_), y(y_) {
        }
 
        // Other automatically defined methods (assignment, copy constructor, destructor) are fine
-       
+
        static Point FromLong(long lpoint);
 };
 
-// PRectangle is exactly the same as the Win32 RECT so can be used interchangeably
-// PRectangles contain their top and left sides, but not their right and bottom sides
+/**
+ * A geometric rectangle class.
+ * PRectangle is exactly the same as the Win32 RECT so can be used interchangeably.
+ * PRectangles contain their top and left sides, but not their right and bottom sides.
+ */
 class PRectangle {
 public:
        int left;
@@ -115,6 +148,10 @@ public:
 
        // Other automatically defined methods (assignment, copy constructor, destructor) are fine
 
+       bool operator==(PRectangle &rc) {
+               return (rc.left == left) && (rc.right == right) &&
+                       (rc.top == top) && (rc.bottom == bottom);
+       }
        bool Contains(Point pt) {
                return (pt.x >= left) && (pt.x <= right) &&
                        (pt.y >= top) && (pt.y <= bottom);
@@ -136,6 +173,9 @@ wxRect wxRectFromPRectangle(PRectangle prc);
 PRectangle PRectangleFromwxRect(wxRect rc);
 #endif
 
+/**
+ * A colour class.
+ */
 class Colour {
        ColourID co;
 public:
@@ -146,15 +186,17 @@ public:
        unsigned int GetRed();
        unsigned int GetGreen();
        unsigned int GetBlue();
-       
+
        friend class Surface;
        friend class Palette;
 };
 
-// Colour pairs hold a desired colour and the colour that the graphics engine
-// allocates to approximate the desired colour.
-// To make palette management more automatic, ColourPairs could register at 
-// construction time with a palette management object.
+/**
+ * Colour pairs hold a desired colour and the colour that the graphics engine
+ * allocates to approximate the desired colour.
+ * To make palette management more automatic, ColourPairs could register at
+ * construction time with a palette management object.
+ */
 struct ColourPair {
        Colour desired;
        Colour allocated;
@@ -167,6 +209,9 @@ struct ColourPair {
 
 class Window;  // Forward declaration for Palette
 
+/**
+ * Colour palette management.
+ */
 class Palette {
        int used;
        enum {numEntries = 100};
@@ -181,23 +226,29 @@ class Palette {
 #endif
 public:
        bool allowRealization;
-       
+
        Palette();
        ~Palette();
 
        void Release();
-       
-       // This method either adds a colour to the list of wanted colours (want==true)
-       // or retrieves the allocated colour back to the ColourPair.
-       // This is one method to make it easier to keep the code for wanting and retrieving in sync.
+
+       /**
+        * This method either adds a colour to the list of wanted colours (want==true)
+        * or retrieves the allocated colour back to the ColourPair.
+        * This is one method to make it easier to keep the code for wanting and retrieving in sync.
+        */
        void WantFind(ColourPair &cp, bool want);
 
        void Allocate(Window &w);
-       
+
        friend class Surface;
 };
 
+/**
+ * Font management.
+ */
 class Font {
+protected:
        FontID id;
 #if PLAT_WX
        int ascent;
@@ -207,18 +258,23 @@ class Font {
        Font &operator=(const Font &) { id=0; return *this; }
 public:
        Font();
-       ~Font();
+       virtual ~Font();
 
-       void Create(const char *faceName, int size, bool bold=false, bool italic=false);
-       void Release();
+       virtual void Create(const char *faceName, int characterSet, int size, bool bold, bool italic);
+       virtual void Release();
 
        FontID GetID() { return id; }
+       // Alias another font - caller guarantees not to Release
+       void SetID(FontID id_) { id = id_; }
        friend class Surface;
 };
 
-// A surface abstracts a place to draw
+/**
+ * A surface abstracts a place to draw.
+ */
 class Surface {
 private:
+       bool unicodeMode;
 #if PLAT_GTK
        GdkDrawable *drawable;
        GdkGC *gc;
@@ -257,7 +313,7 @@ private:
 public:
        Surface();
        ~Surface();
-       
+
        void Init();
        void Init(SurfaceID hdc_);
        void InitPixMap(int width, int height, Surface *surface_);
@@ -266,6 +322,7 @@ public:
        bool Initialised();
        void PenColour(Colour fore);
        int LogPixelsY();
+       int DeviceHeightFont(int points);
        void MoveTo(int x_, int y_);
        void LineTo(int x_, int y_);
        void Polygon(Point *pts, int npts, Colour fore, Colour back);
@@ -287,19 +344,27 @@ public:
        int ExternalLeading(Font &font_);
        int Height(Font &font_);
        int AverageCharWidth(Font &font_);
-       
+
        int SetPalette(Palette *pal, bool inBackGround);
        void SetClip(PRectangle rc);
+       void FlushCachedState();
+
+       void SetUnicodeMode(bool unicodeMode_) {
+               unicodeMode=unicodeMode_;
+       }
 };
 
-// Class to hide the details of window manipulation
-// Does not own the window which will normally have a longer life than this object
+/**
+ * Class to hide the details of window manipulation.
+ * Does not own the window which will normally have a longer life than this object.
+ */
 class Window {
        friend class ListBox;
 protected:
        WindowID id;
 public:
        Window() : id(0) {}
+       Window(const Window &source) : id(source.id) {}
        virtual ~Window();
        Window &operator=(WindowID id_) {
                id = id_;
@@ -316,7 +381,7 @@ public:
        void Show(bool show=true);
        void InvalidateAll();
        void InvalidateRectangle(PRectangle rc);
-       void SetFont(Font &font);
+       virtual void SetFont(Font &font);
        enum Cursor { cursorText, cursorArrow, cursorUp, cursorWait, cursorHoriz, cursorVert, cursorReverseArrow };
        void SetCursor(Cursor curs);
        void SetTitle(const char *s);
@@ -327,20 +392,26 @@ public:
 #endif
 };
 
+/**
+ * Listbox management.
+ */
 class ListBox : public Window {
 #if PLAT_GTK
        WindowID list;
        WindowID scroller;
        int current;
 #endif
+       int desiredVisibleRows;
+       unsigned int maxItemCharacters;
+       unsigned int aveCharWidth;
 public:
        ListBox();
        virtual ~ListBox();
-       ListBox &operator=(WindowID id_) {
-               id = id_;
-               return *this;
-       }
        void Create(Window &parent, int ctrlID);
+       virtual void SetFont(Font &font);
+       void SetAverageCharWidth(int width);
+       void SetVisibleRows(int rows);
+       PRectangle GetDesiredRect();
        void Clear();
        void Append(char *s);
        int Length();
@@ -351,6 +422,9 @@ public:
        void Sort();
 };
 
+/**
+ * Menu management.
+ */
 class Menu {
        MenuID id;
 public:
@@ -361,8 +435,10 @@ public:
        void Show(Point pt, Window &w);
 };
 
-// Platform class used to retrieve system wide parameters such as double click speed
-// and chrome colour. Not a creatable object, more of a module with several functions.
+/**
+ * Platform class used to retrieve system wide parameters such as double click speed
+ * and chrome colour. Not a creatable object, more of a module with several functions.
+ */
 class Platform {
        // Private so Platform objects can not be copied
        Platform(const Platform &) {}
@@ -381,12 +457,30 @@ public:
        static bool IsKeyDown(int key);
        static long SendScintilla(
                WindowID w, unsigned int msg, unsigned long wParam=0, long lParam=0);
-       
+
        // These are utility functions not really tied to a platform
        static int Minimum(int a, int b);
        static int Maximum(int a, int b);
+       // Next three assume 16 bit shorts and 32 bit longs
+       static long LongFromTwoShorts(short a,short b) {
+               return (a) | ((b) << 16);
+       }
+       static short HighShortFromLong(long x) {
+               return static_cast<short>(x >> 16);
+       }
+       static short LowShortFromLong(long x) {
+               return static_cast<short>(x & 0xffff);
+       }
        static void DebugPrintf(const char *format, ...);
+       static bool ShowAssertionPopUps(bool assertionPopUps_);
+       static void Assert(const char *c, const char *file, int line);
        static int Clamp(int val, int minVal, int maxVal);
 };
 
+#ifdef  NDEBUG
+#define PLATFORM_ASSERT(c) ((void)0)
+#else
+#define PLATFORM_ASSERT(c) ((c) ? (void)(0) : Platform::Assert(#c, __FILE__, __LINE__))
+#endif
+
 #endif