📄 bridge.c
字号:
/**/class Body { public: void Ref(); void Unref(); int RefCount(); private:};class Handle { public: Handle& operator=(const Handle& other); private: Body* _body;};/**/Handle& Handle::operator= (const Handle& other) { other._body->Ref(); _body->Unref(); if (_body->RefCount() == 0) { delete _body; } _body = other._body; return *this;}/**/#include "Geom.H"#include "math.h"class Window;class View { public: DrawOn(Window*);};class WindowImp;struct Display;typedef unsigned int Drawable;typedef struct XXX { int y; } *GC;extern XDrawRectangle( Display*, Drawable, GC, int, int, unsigned int, unsigned int);struct PPOINTL { Coord x; Coord y;};const int GPI_ERROR = 1;typedef int HPS;int GpiBeginPath(HPS, unsigned long);int GpiSetCurrentPosition(HPS, PPOINTL*);int GpiPolyLine(HPS, unsigned long, PPOINTL*);int GpiEndPath(HPS);void ReportError();void GpiStrokePath(HPS, unsigned long, unsigned long);class WindowSystemFactory { public: static WindowSystemFactory* Instance(); WindowImp* MakeWindowImp();};/**/class Window {public: Window(View* contents); // requests handled by window virtual void DrawContents();/**/ virtual void Open(); virtual void Close(); virtual void Iconify(); virtual void Deiconify();/**/ // requests forwarded to implementation virtual void SetOrigin(const Point& at); virtual void SetExtent(const Point& extent); virtual void Raise(); virtual void Lower();/**/ virtual void DrawLine(const Point&, const Point&); virtual void DrawRect(const Point&, const Point&); virtual void DrawPolygon(const Point[], int n); virtual void DrawText(const char*, const Point&);/**/protected: WindowImp* GetWindowImp(); View* GetView();/**/private: WindowImp* _imp; View* _contents; // the window's contents};/**/class WindowImp {public: virtual void ImpTop() = 0; virtual void ImpBottom() = 0; virtual void ImpSetExtent(const Point&) = 0; virtual void ImpSetOrigin(const Point&) = 0;/**/ virtual void DeviceRect(Coord, Coord, Coord, Coord) = 0; virtual void DeviceText(const char*, Coord, Coord) = 0; virtual void DeviceBitmap(const char*, Coord, Coord) = 0; // lots more functions for drawing on windows...protected: WindowImp();};/**/class ApplicationWindow : public Window {public: // ... virtual void DrawContents();};void ApplicationWindow::DrawContents () { GetView()->DrawOn(this);}/**/class IconWindow : public Window {public: // ... virtual void DrawContents();private: const char* _bitmapName;};/**/void IconWindow::DrawContents() { WindowImp* imp = GetWindowImp(); if (imp != 0) { imp->DeviceBitmap(_bitmapName, 0.0, 0.0); }}/**/void Window::DrawRect (const Point& p1, const Point& p2) { WindowImp* imp = GetWindowImp(); imp->DeviceRect(p1.X(), p1.Y(), p2.X(), p2.Y());}/**/class XWindowImp : public WindowImp {public: XWindowImp(); virtual void DeviceRect(Coord, Coord, Coord, Coord); // remainder of public interface...private: // lots of X window system-specific state, including: Display* _dpy; Drawable _winid; // window id GC _gc; // window graphic context};/**/class PMWindowImp : public WindowImp {public: PMWindowImp(); virtual void DeviceRect(Coord, Coord, Coord, Coord); // remainder of public interface...private: // lots of PM window system-specific state, including: HPS _hps;};/**/void XWindowImp::DeviceRect ( Coord x0, Coord y0, Coord x1, Coord y1) { int x = round(min(x0, x1)); int y = round(min(y0, y1)); int w = round(abs(x0 - x1)); int h = round(abs(y0 - y1)); XDrawRectangle(_dpy, _winid, _gc, x, y, w, h);}/**/void PMWindowImp::DeviceRect ( Coord x0, Coord y0, Coord x1, Coord y1) { Coord left = min(x0, x1); Coord right = max(x0, x1); Coord bottom = min(y0, y1); Coord top = max(y0, y1);/**/ PPOINTL point[4];/**/ point[0].x = left; point[0].y = top; point[1].x = right; point[1].y = top; point[2].x = right; point[2].y = bottom; point[3].x = left; point[3].y = bottom;/**/ if ( (GpiBeginPath(_hps, 1L) == false) || (GpiSetCurrentPosition(_hps, &point[3]) == false) || (GpiPolyLine(_hps, 4L, point) == GPI_ERROR) || (GpiEndPath(_hps) == false) ) { // report error/**/ } else { GpiStrokePath(_hps, 1L, 0L); }}/**/WindowImp* Window::GetWindowImp () { if (_imp == 0) { _imp = WindowSystemFactory::Instance()->MakeWindowImp(); } return _imp;}/**/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -