hrev51593 adds 1 changeset to branch 'master'
old head: 83241299cea517176b704bed2220acc16d6db288
new head: cec4fe2f8506dd0bd378cb32a4d23b4ba9549e6a
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=cec4fe2f8506+%5E83241299cea5
----------------------------------------------------------------------------
cec4fe2f8506: app_server: Remove stubbed HTML5 HWInterface.
It was mostly a renamed copy of the remote HWInterface with
beginnings of a webserver and client. It never became actually
functional.
[ Michael Lotz <mmlr@xxxxxxxx> ]
----------------------------------------------------------------------------
Revision: hrev51593
Commit: cec4fe2f8506dd0bd378cb32a4d23b4ba9549e6a
URL: http://cgit.haiku-os.org/haiku/commit/?id=cec4fe2f8506
Author: Michael Lotz <mmlr@xxxxxxxx>
Date: Tue Nov 21 21:39:27 2017 UTC
----------------------------------------------------------------------------
28 files changed, 2 insertions(+), 4773 deletions(-)
src/servers/app/Jamfile | 3 +-
src/servers/app/ScreenManager.cpp | 7 +-
src/servers/app/drawing/interface/Jamfile | 1 -
.../interface/html5/CanvasEventStream.cpp | 218 ----
.../drawing/interface/html5/CanvasEventStream.h | 45 -
.../drawing/interface/html5/CanvasMessage.cpp | 500 --------
.../app/drawing/interface/html5/CanvasMessage.h | 372 ------
.../interface/html5/HTML5DrawingEngine.cpp | 1120 ------------------
.../drawing/interface/html5/HTML5DrawingEngine.h | 180 ---
.../drawing/interface/html5/HTML5HWInterface.cpp | 639 ----------
.../drawing/interface/html5/HTML5HWInterface.h | 136 ---
src/servers/app/drawing/interface/html5/Jamfile | 36 -
.../app/drawing/interface/html5/NetSender.cpp | 75 --
.../app/drawing/interface/html5/NetSender.h | 34 -
.../interface/html5/StreamingRingBuffer.cpp | 176 ---
.../interface/html5/StreamingRingBuffer.h | 47 -
.../app/drawing/interface/html5/WebHandler.cpp | 85 --
.../app/drawing/interface/html5/WebHandler.h | 55 -
.../app/drawing/interface/html5/WebServer.cpp | 155 ---
.../app/drawing/interface/html5/WebServer.h | 47 -
.../app/drawing/interface/html5/WebWorker.cpp | 152 ---
.../app/drawing/interface/html5/WebWorker.h | 39 -
.../app/drawing/interface/html5/base64.cpp | 119 --
src/servers/app/drawing/interface/html5/base64.h | 16 -
.../app/drawing/interface/html5/desktop.html | 29 -
.../app/drawing/interface/html5/desktop.html.h | 30 -
src/servers/app/drawing/interface/html5/haiku.js | 229 ----
.../app/drawing/interface/html5/haiku.js.h | 230 ----
----------------------------------------------------------------------------
diff --git a/src/servers/app/Jamfile b/src/servers/app/Jamfile
index ad0b4bd..d2a9ab7 100644
--- a/src/servers/app/Jamfile
+++ b/src/servers/app/Jamfile
@@ -7,7 +7,6 @@ UseHeaders [ FDirName $(HAIKU_TOP) src servers app drawing ] ;
UseHeaders [ FDirName $(HAIKU_TOP) src servers app drawing Painter ] ;
UseHeaders [ FDirName $(HAIKU_TOP) src servers app drawing interface local ] ;
UseHeaders [ FDirName $(HAIKU_TOP) src servers app drawing interface remote ] ;
-UseHeaders [ FDirName $(HAIKU_TOP) src servers app drawing interface html5 ] ;
UseHeaders [ FDirName $(HAIKU_TOP) src servers app stackandtile ] ;
UseHeaders [ FDirName $(HAIKU_TOP) src servers app decorator ] ;
@@ -107,7 +106,7 @@ Server app_server :
# libraries
:
libtranslation.so libbe.so libbnetapi.so
- libaslocal.a libasremote.a libashtml5.a
+ libaslocal.a libasremote.a
libasdrawing.a libpainter.a libagg.a
[ BuildFeatureAttribute freetype : library ]
[ BuildFeatureAttribute fontconfig : library ]
diff --git a/src/servers/app/ScreenManager.cpp
b/src/servers/app/ScreenManager.cpp
index b70d6e8..0220547 100644
--- a/src/servers/app/ScreenManager.cpp
+++ b/src/servers/app/ScreenManager.cpp
@@ -15,7 +15,6 @@
#include "ServerConfig.h"
#include "RemoteHWInterface.h"
-#include "HTML5HWInterface.h"
#include <Autolock.h>
#include <Entry.h>
@@ -141,13 +140,9 @@ ScreenManager::AcquireScreens(ScreenOwner* owner, int32*
wishList,
// TODO: right now we only support remote screens, but we could
// also target specific accelerants to support other graphics
cards
HWInterface* interface;
- /*
- if (strncmp(target, "vnc:", 4) == 0)
+ /*if (strncmp(target, "vnc:", 4) == 0)
interface = new(nothrow) VNCHWInterface(target);
else*/
- if (strncmp(target, "html5:", 6) == 0)
- interface = new(nothrow) HTML5HWInterface(target);
- else
interface = new(nothrow) RemoteHWInterface(target);
if (interface != NULL) {
screen_item* item = _AddHWInterface(interface);
diff --git a/src/servers/app/drawing/interface/Jamfile
b/src/servers/app/drawing/interface/Jamfile
index c03dad3..4406c0d 100644
--- a/src/servers/app/drawing/interface/Jamfile
+++ b/src/servers/app/drawing/interface/Jamfile
@@ -1,5 +1,4 @@
SubDir HAIKU_TOP src servers app drawing interface ;
-SubInclude HAIKU_TOP src servers app drawing interface html5 ;
SubInclude HAIKU_TOP src servers app drawing interface local ;
SubInclude HAIKU_TOP src servers app drawing interface remote ;
diff --git a/src/servers/app/drawing/interface/html5/CanvasEventStream.cpp
b/src/servers/app/drawing/interface/html5/CanvasEventStream.cpp
deleted file mode 100644
index ec9cc99..0000000
--- a/src/servers/app/drawing/interface/html5/CanvasEventStream.cpp
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright 2009, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- */
-
-#include "CanvasEventStream.h"
-
-#include "CanvasMessage.h"
-#include "StreamingRingBuffer.h"
-
-#include <Autolock.h>
-
-#include <new>
-
-
-CanvasEventStream::CanvasEventStream()
- :
- fEventList(10, true),
- fEventListLocker("canvas event list"),
- fEventNotification(-1),
- fWaitingOnEvent(false),
- fLatestMouseMovedEvent(NULL),
- fMousePosition(0, 0),
- fMouseButtons(0),
- fModifiers(0)
-{
- fEventNotification = create_sem(0, "canvas event notification");
-}
-
-
-CanvasEventStream::~CanvasEventStream()
-{
- delete_sem(fEventNotification);
-}
-
-
-void
-CanvasEventStream::UpdateScreenBounds(BRect bounds)
-{
-}
-
-
-bool
-CanvasEventStream::GetNextEvent(BMessage** _event)
-{
- BAutolock lock(fEventListLocker);
- while (fEventList.CountItems() == 0) {
- fWaitingOnEvent = true;
- lock.Unlock();
-
- status_t result;
- do {
- result = acquire_sem(fEventNotification);
- } while (result == B_INTERRUPTED);
-
- lock.Lock();
- if (!lock.IsLocked())
- return false;
- }
-
- *_event = fEventList.RemoveItemAt(0);
- return true;
-}
-
-
-status_t
-CanvasEventStream::InsertEvent(BMessage* event)
-{
- BAutolock lock(fEventListLocker);
- if (!lock.IsLocked())
- return B_ERROR;
-
- if (!fEventList.AddItem(event))
- return B_ERROR;
-
- if (event->what == B_MOUSE_MOVED)
- fLatestMouseMovedEvent = event;
-
- return B_OK;
-}
-
-
-BMessage*
-CanvasEventStream::PeekLatestMouseMoved()
-{
- return fLatestMouseMovedEvent;
-}
-
-
-bool
-CanvasEventStream::EventReceived(CanvasMessage& message)
-{
- uint16 code = message.Code();
- uint32 what = 0;
- switch (code) {
- case RP_MOUSE_MOVED:
- what = B_MOUSE_MOVED;
- break;
- case RP_MOUSE_DOWN:
- what = B_MOUSE_DOWN;
- break;
- case RP_MOUSE_UP:
- what = B_MOUSE_UP;
- break;
- case RP_MOUSE_WHEEL_CHANGED:
- what = B_MOUSE_WHEEL_CHANGED;
- break;
- case RP_KEY_DOWN:
- what = B_KEY_DOWN;
- break;
- case RP_KEY_UP:
- what = B_KEY_UP;
- break;
- case RP_MODIFIERS_CHANGED:
- what = B_MODIFIERS_CHANGED;
- break;
- }
-
- if (what == 0)
- return false;
-
- BMessage* event = new BMessage(what);
- if (event == NULL)
- return false;
-
- event->AddInt64("when", system_time());
-
- switch (code) {
- case RP_MOUSE_MOVED:
- case RP_MOUSE_DOWN:
- case RP_MOUSE_UP:
- {
- message.Read(fMousePosition);
- if (code != RP_MOUSE_MOVED)
- message.Read(fMouseButtons);
-
- event->AddPoint("where", fMousePosition);
- event->AddInt32("buttons", fMouseButtons);
- event->AddInt32("modifiers", fModifiers);
-
- if (code == RP_MOUSE_DOWN) {
- int32 clicks;
- if (message.Read(clicks) == B_OK)
- event->AddInt32("clicks", clicks);
- }
-
- if (code == RP_MOUSE_MOVED)
- fLatestMouseMovedEvent = event;
- break;
- }
-
- case RP_MOUSE_WHEEL_CHANGED:
- {
- float xDelta, yDelta;
- message.Read(xDelta);
- message.Read(yDelta);
- event->AddFloat("be:wheel_delta_x", xDelta);
- event->AddFloat("be:wheel_delta_y", yDelta);
- break;
- }
-
- case RP_KEY_DOWN:
- case RP_KEY_UP:
- {
- int32 numBytes;
- if (message.Read(numBytes) != B_OK)
- break;
-
- char* bytes = (char*)malloc(numBytes + 1);
- if (bytes == NULL)
- break;
-
- if (message.ReadList(bytes, numBytes) != B_OK) {
- free(bytes);
- break;
- }
-
- for (int32 i = 0; i < numBytes; i++)
- event->AddInt8("byte", (int8)bytes[i]);
-
- bytes[numBytes] = 0;
- event->AddData("bytes", B_STRING_TYPE, bytes, numBytes
+ 1, false);
- event->AddInt32("modifiers", fModifiers);
-
- int32 rawChar;
- if (message.Read(rawChar) == B_OK)
- event->AddInt32("raw_char", rawChar);
-
- int32 key;
- if (message.Read(key) == B_OK)
- event->AddInt32("key", key);
-
- free(bytes);
- break;
- }
-
- case RP_MODIFIERS_CHANGED:
- {
- event->AddInt32("be:old_modifiers", fModifiers);
- message.Read(fModifiers);
- event->AddInt32("modifiers", fModifiers);
- break;
- }
- }
-
- BAutolock lock(fEventListLocker);
- fEventList.AddItem(event);
- if (fWaitingOnEvent) {
- fWaitingOnEvent = false;
- lock.Unlock();
- release_sem(fEventNotification);
- }
-
- return true;
-}
diff --git a/src/servers/app/drawing/interface/html5/CanvasEventStream.h
b/src/servers/app/drawing/interface/html5/CanvasEventStream.h
deleted file mode 100644
index 68d0050..0000000
--- a/src/servers/app/drawing/interface/html5/CanvasEventStream.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright 2009, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- */
-#ifndef CANVAS_EVENT_STREAM_H
-#define CANVAS_EVENT_STREAM_H
-
-#include "EventStream.h"
-
-#include <Locker.h>
-#include <ObjectList.h>
-
-class CanvasMessage;
-
-class CanvasEventStream : public EventStream {
-public:
-
CanvasEventStream();
-virtual
~CanvasEventStream();
-
-virtual bool IsValid() { return
true; }
-virtual void SendQuit() {}
-
-virtual void
UpdateScreenBounds(BRect bounds);
-virtual bool GetNextEvent(BMessage**
_event);
-virtual status_t InsertEvent(BMessage*
event);
-virtual BMessage* PeekLatestMouseMoved();
-
- bool
EventReceived(CanvasMessage& message);
-
-private:
- BObjectList<BMessage> fEventList;
- BLocker fEventListLocker;
- sem_id fEventNotification;
- bool fWaitingOnEvent;
- BMessage* fLatestMouseMovedEvent;
-
- BPoint fMousePosition;
- uint32 fMouseButtons;
- uint32 fModifiers;
-};
-
-#endif // CANVAS_EVENT_STREAM_H
diff --git a/src/servers/app/drawing/interface/html5/CanvasMessage.cpp
b/src/servers/app/drawing/interface/html5/CanvasMessage.cpp
deleted file mode 100644
index 367d0d4..0000000
--- a/src/servers/app/drawing/interface/html5/CanvasMessage.cpp
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
- * Copyright 2009, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- * François Revol <revol@xxxxxxx>
- */
-
-#include "CanvasMessage.h"
-
-#include "DrawState.h"
-#include "ServerBitmap.h"
-#include "ServerCursor.h"
-
-#include <Bitmap.h>
-#include <Font.h>
-#include <View.h>
-
-#include <Gradient.h>
-#include <GradientLinear.h>
-#include <GradientRadial.h>
-#include <GradientRadialFocus.h>
-#include <GradientDiamond.h>
-#include <GradientConic.h>
-
-#include <new>
-
-
-status_t
-CanvasMessage::NextMessage(uint16& code)
-{
- if (fDataLeft > 0) {
- // discard remainder of message
- int32 readSize = fSource->Read(NULL, fDataLeft);
- if (readSize < 0)
- return readSize;
- }
-
- static const uint32 kHeaderSize = sizeof(uint16) + sizeof(uint32);
-
- fDataLeft = kHeaderSize;
- Read(code);
- uint32 dataLeft;
- status_t result = Read(dataLeft);
- if (result != B_OK)
- return result;
-
- if (dataLeft < kHeaderSize)
- return B_ERROR;
-
- fDataLeft = dataLeft - kHeaderSize;
- fCode = code;
- return B_OK;
-}
-
-
-void
-CanvasMessage::Cancel()
-{
- fAvailable += fWriteIndex;
- fWriteIndex = 0;
-}
-
-
-void
-CanvasMessage::AddBitmap(const ServerBitmap& bitmap, bool minimal)
-{
- //TODO:send PNG / as data: or as http: url
- Add(bitmap.Width());
- Add(bitmap.Height());
- Add(bitmap.BytesPerRow());
-
- if (!minimal) {
- Add(bitmap.ColorSpace());
- Add(bitmap.Flags());
- }
-
- uint32 bitsLength = bitmap.BitsLength();
- Add(bitsLength);
-
- if (!_MakeSpace(bitsLength))
- return;
-
- memcpy(fBuffer + fWriteIndex, bitmap.Bits(), bitsLength);
- fWriteIndex += bitsLength;
- fAvailable -= bitsLength;
-}
-
-
-void
-CanvasMessage::AddFont(const ServerFont& font)
-{
- //TODO:Use TTF/WOFF URL
- Add(font.Direction());
- Add((uint8)font.Encoding());
- Add(font.Flags());
- Add((uint8)font.Spacing());
- Add(font.Shear());
- Add(font.Rotation());
- Add(font.FalseBoldWidth());
- Add(font.Size());
- Add(font.Face());
- Add(font.GetFamilyAndStyle());
-}
-
-
-void
-CanvasMessage::AddDrawState(const DrawState& drawState)
-{
- Add(drawState.PenSize());
- Add(drawState.SubPixelPrecise());
- Add(drawState.GetDrawingMode());
- Add(drawState.AlphaSrcMode());
- Add(drawState.AlphaFncMode());
- AddPattern(drawState.GetPattern());
- Add(drawState.LineCapMode());
- Add(drawState.LineJoinMode());
- Add(drawState.MiterLimit());
- Add(drawState.HighColor());
- Add(drawState.LowColor());
-}
-
-
-void
-CanvasMessage::AddArrayLine(const ViewLineArrayInfo& line)
-{
- Add(line.startPoint);
- Add(line.endPoint);
- Add(line.color);
-}
-
-
-void
-CanvasMessage::AddCursor(const ServerCursor& cursor)
-{
- //TODO:send as .cur data:
- Add(cursor.GetHotSpot());
- AddBitmap(cursor);
-}
-
-
-void
-CanvasMessage::AddPattern(const Pattern& pattern)
-{
- Add(pattern.GetPattern());
-}
-
-
-void
-CanvasMessage::AddGradient(const BGradient& gradient)
-{
- Add(gradient.GetType());
-
- switch (gradient.GetType()) {
- case BGradient::TYPE_NONE:
- break;
-
- case BGradient::TYPE_LINEAR:
- {
- const BGradientLinear* linear
- = dynamic_cast<const BGradientLinear
*>(&gradient);
- if (linear == NULL)
- return;
-
- Add(linear->Start());
- Add(linear->End());
- break;
- }
-
- case BGradient::TYPE_RADIAL:
- {
- const BGradientRadial* radial
- = dynamic_cast<const BGradientRadial
*>(&gradient);
- if (radial == NULL)
- return;
-
- Add(radial->Center());
- Add(radial->Radius());
- break;
- }
-
- case BGradient::TYPE_RADIAL_FOCUS:
- {
- const BGradientRadialFocus* radialFocus
- = dynamic_cast<const BGradientRadialFocus
*>(&gradient);
- if (radialFocus == NULL)
- return;
-
- Add(radialFocus->Center());
- Add(radialFocus->Focal());
- Add(radialFocus->Radius());
- break;
- }
-
- case BGradient::TYPE_DIAMOND:
- {
- const BGradientDiamond* diamond
- = dynamic_cast<const BGradientDiamond
*>(&gradient);
- if (diamond == NULL)
- return;
-
- Add(diamond->Center());
- break;
- }
-
- case BGradient::TYPE_CONIC:
- {
- const BGradientConic* conic
- = dynamic_cast<const BGradientConic
*>(&gradient);
- if (conic == NULL)
- return;
-
- Add(conic->Center());
- Add(conic->Angle());
- break;
- }
- }
-
- int32 stopCount = gradient.CountColorStops();
- Add(stopCount);
-
- for (int32 i = 0; i < stopCount; i++) {
- BGradient::ColorStop* stop = gradient.ColorStopAt(i);
- if (stop == NULL)
- return;
-
- Add(stop->color);
- Add(stop->offset);
- }
-}
-
-
-status_t
-CanvasMessage::ReadString(char** _string, size_t& _length)
-{
- uint32 length;
- status_t result = Read(length);
- if (result != B_OK)
- return result;
-
- if (length > fDataLeft)
- return B_ERROR;
-
- char *string = (char *)malloc(length + 1);
- if (string == NULL)
- return B_NO_MEMORY;
-
- int32 readSize = fSource->Read(string, length);
- if (readSize < 0) {
- free(string);
- return readSize;
- }
-
- if ((uint32)readSize != length) {
- free(string);
- return B_ERROR;
- }
-
- fDataLeft -= readSize;
-
- string[length] = 0;
- *_string = string;
- _length = length;
- return B_OK;
-}
-
-
-status_t
-CanvasMessage::ReadBitmap(BBitmap** _bitmap, bool minimal,
- color_space colorSpace, uint32 flags)
-{
- uint32 bitsLength;
- int32 width, height, bytesPerRow;
-
- Read(width);
- Read(height);
- Read(bytesPerRow);
-
- if (!minimal) {
- Read(colorSpace);
- Read(flags);
- }
-
- Read(bitsLength);
-
- if (bitsLength > fDataLeft)
- return B_ERROR;
-
-#ifndef CLIENT_COMPILE
- flags = B_BITMAP_NO_SERVER_LINK;
-#endif
-
- BBitmap *bitmap = new(std::nothrow) BBitmap(
- BRect(0, 0, width - 1, height - 1), flags, colorSpace,
bytesPerRow);
- if (bitmap == NULL)
- return B_NO_MEMORY;
-
- status_t result = bitmap->InitCheck();
- if (result != B_OK) {
- delete bitmap;
- return result;
- }
-
- if (bitmap->BitsLength() < (int32)bitsLength) {
- delete bitmap;
- return B_ERROR;
- }
-
- int32 readSize = fSource->Read(bitmap->Bits(), bitsLength);
- if ((uint32)readSize != bitsLength) {
- delete bitmap;
- return readSize < 0 ? readSize : B_ERROR;
- }
-
- fDataLeft -= readSize;
- *_bitmap = bitmap;
- return B_OK;
-}
-
-
-status_t
-CanvasMessage::ReadFontState(BFont& font)
-{
- uint8 encoding, spacing;
- uint16 face;
- uint32 flags, familyAndStyle;
- font_direction direction;
- float falseBoldWidth, rotation, shear, size;
-
- Read(direction);
- Read(encoding);
- Read(flags);
- Read(spacing);
- Read(shear);
- Read(rotation);
- Read(falseBoldWidth);
- Read(size);
- Read(face);
- status_t result = Read(familyAndStyle);
- if (result != B_OK)
- return result;
-
- font.SetFamilyAndStyle(familyAndStyle);
- font.SetEncoding(encoding);
- font.SetFlags(flags);
- font.SetSpacing(spacing);
- font.SetShear(shear);
- font.SetRotation(rotation);
- font.SetFalseBoldWidth(falseBoldWidth);
- font.SetSize(size);
- font.SetFace(face);
- return B_OK;
-}
-
-
-status_t
-CanvasMessage::ReadViewState(BView& view, ::pattern& pattern)
-{
- bool subPixelPrecise;
- float penSize, miterLimit;
- drawing_mode drawingMode;
- source_alpha sourceAlpha;
- alpha_function alphaFunction;
- cap_mode capMode;
- join_mode joinMode;
- rgb_color highColor, lowColor;
-
- Read(penSize);
- Read(subPixelPrecise);
- Read(drawingMode);
- Read(sourceAlpha);
- Read(alphaFunction);
- Read(pattern);
- Read(capMode);
- Read(joinMode);
- Read(miterLimit);
- Read(highColor);
- status_t result = Read(lowColor);
- if (result != B_OK)
- return result;
-
- uint32 flags = view.Flags() & ~B_SUBPIXEL_PRECISE;
- view.SetFlags(flags | (subPixelPrecise ? B_SUBPIXEL_PRECISE : 0));
- view.SetPenSize(penSize);
- view.SetDrawingMode(drawingMode);
- view.SetBlendingMode(sourceAlpha, alphaFunction);
- view.SetLineMode(capMode, joinMode, miterLimit);
- view.SetHighColor(highColor);
- view.SetLowColor(lowColor);
- return B_OK;
-}
-
-
-status_t
-CanvasMessage::ReadGradient(BGradient** _gradient)
-{
- BGradient::Type type;
- Read(type);
-
- BGradient *gradient = NULL;
- switch (type) {
- case BGradient::TYPE_NONE:
- break;
-
- case BGradient::TYPE_LINEAR:
- {
- BPoint start, end;
-
- Read(start);
- Read(end);
-
- gradient = new(std::nothrow) BGradientLinear(start,
end);
- break;
- }
-
- case BGradient::TYPE_RADIAL:
- {
- BPoint center;
- float radius;
-
- Read(center);
- Read(radius);
-
- gradient = new(std::nothrow) BGradientRadial(center,
radius);
- break;
- }
-
- case BGradient::TYPE_RADIAL_FOCUS:
- {
- BPoint center, focal;
- float radius;
-
- Read(center);
- Read(focal);
- Read(radius);
-
- gradient = new(std::nothrow)
BGradientRadialFocus(center, radius,
- focal);
- break;
- }
-
- case BGradient::TYPE_DIAMOND:
- {
- BPoint center;
-
- Read(center);
-
- gradient = new(std::nothrow) BGradientDiamond(center);
- break;
- }
-
- case BGradient::TYPE_CONIC:
- {
- BPoint center;
- float angle;
-
- Read(center);
- Read(angle);
-
- gradient = new(std::nothrow) BGradientConic(center,
angle);
- break;
- }
- }
-
- if (gradient == NULL)
- return B_NO_MEMORY;
-
- int32 stopCount;
- status_t result = Read(stopCount);
- if (result != B_OK) {
- delete gradient;
- return result;
- }
-
- for (int32 i = 0; i < stopCount; i++) {
- rgb_color color;
- float offset;
-
- Read(color);
- result = Read(offset);
- if (result != B_OK)
- return result;
-
- gradient->AddColor(color, offset);
- }
-
- *_gradient = gradient;
- return B_OK;
-}
-
-
-status_t
-CanvasMessage::ReadArrayLine(BPoint& startPoint, BPoint& endPoint,
- rgb_color& color)
-{
- Read(startPoint);
- Read(endPoint);
- return Read(color);
-}
diff --git a/src/servers/app/drawing/interface/html5/CanvasMessage.h
b/src/servers/app/drawing/interface/html5/CanvasMessage.h
deleted file mode 100644
index 2ea6432..0000000
--- a/src/servers/app/drawing/interface/html5/CanvasMessage.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- * Copyright 2009, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- * François Revol <revol@xxxxxxx>
- */
-#ifndef CANVAS_MESSAGE_H
-#define CANVAS_MESSAGE_H
-
-#include "PatternHandler.h"
-#include <ViewPrivate.h>
-
-#include "StreamingRingBuffer.h"
-#include "base64.h"
-
-#include <GraphicsDefs.h>
-#include <Region.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-class BBitmap;
-class BFont;
-class BGradient;
-class BView;
-class DrawState;
-class Pattern;
-class RemotePainter;
-class ServerBitmap;
-class ServerCursor;
-class ServerFont;
-class ViewLineArrayInfo;
-
-enum {
- RP_INIT_CONNECTION = 1,
- RP_UPDATE_DISPLAY_MODE,
- RP_CLOSE_CONNECTION,
-
- RP_CREATE_STATE = 20,
- RP_DELETE_STATE,
- RP_ENABLE_SYNC_DRAWING,
- RP_DISABLE_SYNC_DRAWING,
- RP_INVALIDATE_RECT,
- RP_INVALIDATE_REGION,
-
- RP_SET_OFFSETS = 40,
- RP_SET_HIGH_COLOR,
- RP_SET_LOW_COLOR,
- RP_SET_PEN_SIZE,
- RP_SET_STROKE_MODE,
- RP_SET_BLENDING_MODE,
- RP_SET_PATTERN,
- RP_SET_DRAWING_MODE,
- RP_SET_FONT,
-
- RP_CONSTRAIN_CLIPPING_REGION = 60,
- RP_COPY_RECT_NO_CLIPPING,
- RP_INVERT_RECT,
- RP_DRAW_BITMAP,
- RP_DRAW_BITMAP_RECTS,
-
- RP_STROKE_ARC = 80,
- RP_STROKE_BEZIER,
- RP_STROKE_ELLIPSE,
- RP_STROKE_POLYGON,
- RP_STROKE_RECT,
- RP_STROKE_ROUND_RECT,
- RP_STROKE_SHAPE,
- RP_STROKE_TRIANGLE,
- RP_STROKE_LINE,
- RP_STROKE_LINE_ARRAY,
-
- RP_FILL_ARC = 100,
- RP_FILL_BEZIER,
- RP_FILL_ELLIPSE,
- RP_FILL_POLYGON,
- RP_FILL_RECT,
- RP_FILL_ROUND_RECT,
- RP_FILL_SHAPE,
- RP_FILL_TRIANGLE,
- RP_FILL_REGION,
-
- RP_FILL_ARC_GRADIENT = 120,
- RP_FILL_BEZIER_GRADIENT,
- RP_FILL_ELLIPSE_GRADIENT,
- RP_FILL_POLYGON_GRADIENT,
- RP_FILL_RECT_GRADIENT,
- RP_FILL_ROUND_RECT_GRADIENT,
- RP_FILL_SHAPE_GRADIENT,
- RP_FILL_TRIANGLE_GRADIENT,
- RP_FILL_REGION_GRADIENT,
-
- RP_STROKE_POINT_COLOR = 140,
- RP_STROKE_LINE_1PX_COLOR,
- RP_STROKE_RECT_1PX_COLOR,
-
- RP_FILL_RECT_COLOR = 160,
- RP_FILL_REGION_COLOR_NO_CLIPPING,
-
- RP_DRAW_STRING = 180,
- RP_DRAW_STRING_WITH_OFFSETS,
- RP_DRAW_STRING_RESULT,
- RP_STRING_WIDTH,
- RP_STRING_WIDTH_RESULT,
- RP_READ_BITMAP,
- RP_READ_BITMAP_RESULT,
-
- RP_SET_CURSOR = 200,
- RP_SET_CURSOR_VISIBLE,
- RP_MOVE_CURSOR_TO,
-
- RP_MOUSE_MOVED = 220,
- RP_MOUSE_DOWN,
- RP_MOUSE_UP,
- RP_MOUSE_WHEEL_CHANGED,
-
- RP_KEY_DOWN = 240,
- RP_KEY_UP,
- RP_UNMAPPED_KEY_DOWN,
- RP_UNMAPPED_KEY_UP,
- RP_MODIFIERS_CHANGED
-};
-
-
-class CanvasMessage {
-public:
-
CanvasMessage(StreamingRingBuffer* source,
-
StreamingRingBuffer *target);
-
~CanvasMessage();
-
- void Start(uint16 code);
- status_t Flush();
- void Cancel();
-
- status_t NextMessage(uint16&
code);
- uint16 Code() { return fCode; }
- uint32 DataLeft() { return
fDataLeft; }
-
- template<typename T>
- void Add(const T& value);
-
- void AddString(const char*
string, size_t length);
- void AddRegion(const
BRegion& region);
- void AddGradient(const
BGradient& gradient);
-
- void AddBitmap(const
ServerBitmap& bitmap,
- bool
minimal = false);
- void AddFont(const
ServerFont& font);
- void AddPattern(const
Pattern& pattern);
- void AddDrawState(const
DrawState& drawState);
- void AddArrayLine(const
ViewLineArrayInfo& line);
- void AddCursor(const
ServerCursor& cursor);
-
- template<typename T>
- void AddList(const T* array,
int32 count);
-
- template<typename T>
- status_t Read(T& value);
-
- status_t ReadRegion(BRegion&
region);
- status_t ReadFontState(BFont&
font);
- // sets
font state
- status_t ReadViewState(BView&
view, ::pattern& pattern);
- // sets
viewstate and returns pattern
-
- status_t ReadString(char**
_string, size_t& length);
- status_t ReadBitmap(BBitmap**
_bitmap,
- bool
minimal = false,
-
color_space colorSpace = B_RGB32,
- uint32
flags = 0);
- status_t
ReadGradient(BGradient** _gradient);
- status_t ReadArrayLine(BPoint&
startPoint,
- BPoint&
endPoint, rgb_color& color);
-
- template<typename T>
- status_t ReadList(T* array,
int32 count);
-
-private:
- bool _MakeSpace(size_t size);
-
- StreamingRingBuffer* fSource;
- StreamingRingBuffer* fTarget;
-
- uint8* fBuffer;
- size_t fAvailable;
- size_t fWriteIndex;
- uint32 fDataLeft;
- uint16 fCode;
-};
-
-
-inline
-CanvasMessage::CanvasMessage(StreamingRingBuffer* source,
- StreamingRingBuffer* target)
- :
- fSource(source),
- fTarget(target),
- fBuffer(NULL),
- fAvailable(0),
- fWriteIndex(0),
- fDataLeft(0),
- fCode(0)
-{
-}
-
-
-inline
-CanvasMessage::~CanvasMessage()
-{
- if (fWriteIndex > 0)
- Flush();
- free(fBuffer);
-}
-
-
-inline void
-CanvasMessage::Start(uint16 code)
-{
- if (fWriteIndex > 0)
- Flush();
-
- Add(code);
-
-// uint32 sizeDummy;
-// Add(sizeDummy);
-}
-
-
-inline status_t
-CanvasMessage::Flush()
-{
- if (fWriteIndex == 0)
- return B_NO_INIT;
-
- // end by the multipart boundary
- static const char boundary[] = "--x\r\n\r\n";
- AddString(boundary, sizeof(boundary) - 1);
-
- uint32 length = fWriteIndex;
- fAvailable += fWriteIndex;
- fWriteIndex = 0;
-
-// memcpy(fBuffer + sizeof(uint16) * 2, &length, sizeof(uint32));
- return fTarget->Write(fBuffer, length);
-}
-
-
-template<typename T>
-inline void
-CanvasMessage::Add(const T& value)
-{
- ssize_t done;
-
- if (!_MakeSpace(sizeof(T) * 2)) // 4/3 actually
- return;
-
- //memcpy(fBuffer + fWriteIndex, &value, sizeof(T));
- done = encode_base64((char *)fBuffer + fWriteIndex, (const char
*)(&value),
- sizeof(T));
- fWriteIndex += done;
- fAvailable -= done;
-}
-
-
-inline void
-CanvasMessage::AddString(const char* string, size_t length)
-{
- Add(length);
- if (length > fAvailable && !_MakeSpace(length))
- return;
-
- memcpy(fBuffer + fWriteIndex, string, length);
- fWriteIndex += length;
- fAvailable -= length;
-}
-
-
-inline void
-CanvasMessage::AddRegion(const BRegion& region)
-{
- int32 rectCount = region.CountRects();
- Add(rectCount);
-
- for (int32 i = 0; i < rectCount; i++)
- Add(region.RectAt(i));
-}
-
-
-template<typename T>
-inline void
-CanvasMessage::AddList(const T* array, int32 count)
-{
- for (int32 i = 0; i < count; i++)
- Add(array[i]);
-}
-
-
-template<typename T>
-inline status_t
-CanvasMessage::Read(T& value)
-{
- //TODO
- if (fDataLeft < sizeof(T))
- return B_ERROR;
-
- int32 readSize = fSource->Read(&value, sizeof(T));
- if (readSize < 0)
- return readSize;
-
- if (readSize != sizeof(T))
- return B_ERROR;
-
- fDataLeft -= sizeof(T);
- return B_OK;
-}
-
-
-inline status_t
-CanvasMessage::ReadRegion(BRegion& region)
-{
- region.MakeEmpty();
-
- int32 rectCount;
- Read(rectCount);
-
- for (int32 i = 0; i < rectCount; i++) {
- BRect rect;
- status_t result = Read(rect);
- if (result != B_OK)
- return result;
-
- region.Include(rect);
- }
-
- return B_OK;
-}
-
-
-template<typename T>
-inline status_t
-CanvasMessage::ReadList(T* array, int32 count)
-{
- for (int32 i = 0; i < count; i++) {
- status_t result = Read(array[i]);
- if (result != B_OK)
- return result;
- }
-
- return B_OK;
-}
-
-
-inline bool
-CanvasMessage::_MakeSpace(size_t size)
-{
- if (fAvailable >= size)
- return true;
-
- size_t extraSize = size + 20;
- uint8 *newBuffer = (uint8*)realloc(fBuffer, fWriteIndex + extraSize);
- if (newBuffer == NULL)
- return false;
-
- fAvailable = extraSize;
- fBuffer = newBuffer;
- return true;
-}
-
-#endif // CANVAS_MESSAGE_H
diff --git a/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.cpp
b/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.cpp
deleted file mode 100644
index 15f2190..0000000
--- a/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.cpp
+++ /dev/null
@@ -1,1120 +0,0 @@
-/*
- * Copyright 2009-2010, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- * François Revol <revol@xxxxxxx>
- */
-
-#include "HTML5DrawingEngine.h"
-#include "CanvasMessage.h"
-
-#include "BitmapDrawingEngine.h"
-#include "DrawState.h"
-
-#include <Bitmap.h>
-#include <utf8_functions.h>
-
-#include <new>
-
-
-HTML5DrawingEngine::HTML5DrawingEngine(HTML5HWInterface* interface)
- :
- DrawingEngine(interface),
- fHWInterface(interface),
- fToken((addr_t)this),
- fExtendWidth(0),
- fCallbackAdded(false),
- fResultNotify(-1),
- fStringWidthResult(0.0f),
- fReadBitmapResult(NULL),
- fBitmapDrawingEngine(NULL)
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_CREATE_STATE);
- message.Add(fToken);
-}
-
-
-HTML5DrawingEngine::~HTML5DrawingEngine()
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_DELETE_STATE);
- message.Add(fToken);
- message.Flush();
-
- delete fBitmapDrawingEngine;
-
- if (fCallbackAdded)
- fHWInterface->RemoveCallback(fToken);
- if (fResultNotify >= 0)
- delete_sem(fResultNotify);
-}
-
-
-// #pragma mark -
-
-
-void
-HTML5DrawingEngine::FrameBufferChanged()
-{
- // Not allowed
-}
-
-
-// #pragma mark -
-
-
-void
-HTML5DrawingEngine::SetCopyToFrontEnabled(bool enabled)
-{
- DrawingEngine::SetCopyToFrontEnabled(enabled);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(enabled ? RP_ENABLE_SYNC_DRAWING :
RP_DISABLE_SYNC_DRAWING);
- message.Add(fToken);
-}
-
-
-// #pragma mark -
-
-
-//! the HTML5DrawingEngine needs to be locked!
-void
-HTML5DrawingEngine::ConstrainClippingRegion(const BRegion* region)
-{
- if (fClippingRegion == *region)
- return;
-
- fClippingRegion = *region;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_CONSTRAIN_CLIPPING_REGION);
- message.Add(fToken);
- message.AddRegion(*region);
-}
-
-
-void
-HTML5DrawingEngine::SetDrawState(const DrawState* state, int32 xOffset,
- int32 yOffset)
-{
- SetPenSize(state->PenSize());
- SetDrawingMode(state->GetDrawingMode());
- SetBlendingMode(state->AlphaSrcMode(), state->AlphaFncMode());
- SetPattern(state->GetPattern().GetPattern());
- SetStrokeMode(state->LineCapMode(), state->LineJoinMode(),
- state->MiterLimit());
- SetHighColor(state->HighColor());
- SetLowColor(state->LowColor());
- SetFont(state->Font());
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_OFFSETS);
- message.Add(fToken);
- message.Add(xOffset);
- message.Add(yOffset);
-}
-
-
-void
-HTML5DrawingEngine::SetHighColor(const rgb_color& color)
-{
- if (fState.HighColor() == color)
- return;
-
- fState.SetHighColor(color);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_HIGH_COLOR);
- message.Add(fToken);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::SetLowColor(const rgb_color& color)
-{
- if (fState.LowColor() == color)
- return;
-
- fState.SetLowColor(color);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_LOW_COLOR);
- message.Add(fToken);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::SetPenSize(float size)
-{
- if (fState.PenSize() == size)
- return;
-
- fState.SetPenSize(size);
- fExtendWidth = -(size / 2);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_PEN_SIZE);
- message.Add(fToken);
- message.Add(size);
-}
-
-
-void
-HTML5DrawingEngine::SetStrokeMode(cap_mode lineCap, join_mode joinMode,
- float miterLimit)
-{
- if (fState.LineCapMode() == lineCap && fState.LineJoinMode() == joinMode
- && fState.MiterLimit() == miterLimit)
- return;
-
- fState.SetLineCapMode(lineCap);
- fState.SetLineJoinMode(joinMode);
- fState.SetMiterLimit(miterLimit);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_STROKE_MODE);
- message.Add(fToken);
- message.Add(lineCap);
- message.Add(joinMode);
- message.Add(miterLimit);
-}
-
-
-void
-HTML5DrawingEngine::SetBlendingMode(source_alpha sourceAlpha,
- alpha_function alphaFunc)
-{
- if (fState.AlphaSrcMode() == sourceAlpha
- && fState.AlphaFncMode() == alphaFunc)
- return;
-
- fState.SetBlendingMode(sourceAlpha, alphaFunc);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_BLENDING_MODE);
- message.Add(fToken);
- message.Add(sourceAlpha);
- message.Add(alphaFunc);
-}
-
-
-void
-HTML5DrawingEngine::SetPattern(const struct pattern& pattern)
-{
- if (fState.GetPattern() == pattern)
- return;
-
- fState.SetPattern(pattern);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_PATTERN);
- message.Add(fToken);
- message.Add(pattern);
-}
-
-
-void
-HTML5DrawingEngine::SetDrawingMode(drawing_mode mode)
-{
- if (fState.GetDrawingMode() == mode)
- return;
-
- fState.SetDrawingMode(mode);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_DRAWING_MODE);
- message.Add(fToken);
- message.Add(mode);
-}
-
-
-void
-HTML5DrawingEngine::SetDrawingMode(drawing_mode mode, drawing_mode& oldMode)
-{
- oldMode = fState.GetDrawingMode();
- SetDrawingMode(mode);
-}
-
-
-void
-HTML5DrawingEngine::SetFont(const ServerFont& font)
-{
- if (fState.Font() == font)
- return;
-
- fState.SetFont(font);
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_SET_FONT);
- message.Add(fToken);
- message.AddFont(font);
-}
-
-
-void
-HTML5DrawingEngine::SetFont(const DrawState* state)
-{
- SetFont(state->Font());
-}
-
-
-// #pragma mark -
-
-
-BRect
-HTML5DrawingEngine::CopyRect(BRect rect, int32 xOffset, int32 yOffset) const
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_COPY_RECT_NO_CLIPPING);
- message.Add(xOffset);
- message.Add(yOffset);
- message.Add(rect);
- return rect.OffsetBySelf(xOffset, yOffset);
-}
-
-
-void
-HTML5DrawingEngine::InvertRect(BRect rect)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_INVERT_RECT);
- message.Add(fToken);
- message.Add(rect);
-}
-
-
-void
-HTML5DrawingEngine::DrawBitmap(ServerBitmap* bitmap, const BRect& _bitmapRect,
- const BRect& _viewRect, uint32 options)
-{
- BRect bitmapRect = _bitmapRect;
- BRect viewRect = _viewRect;
- double xScale = (bitmapRect.Width() + 1) / (viewRect.Width() + 1);
- double yScale = (bitmapRect.Height() + 1) / (viewRect.Height() + 1);
-
- // constrain rect to passed bitmap bounds
- // and transfer the changes to the viewRect with the right scale
- BRect actualBitmapRect = bitmap->Bounds();
- if (bitmapRect.left < actualBitmapRect.left) {
- float diff = actualBitmapRect.left - bitmapRect.left;
- viewRect.left += diff / xScale;
- bitmapRect.left = actualBitmapRect.left;
- }
- if (bitmapRect.top < actualBitmapRect.top) {
- float diff = actualBitmapRect.top - bitmapRect.top;
- viewRect.top += diff / yScale;
- bitmapRect.top = actualBitmapRect.top;
- }
- if (bitmapRect.right > actualBitmapRect.right) {
- float diff = bitmapRect.right - actualBitmapRect.right;
- viewRect.right -= diff / xScale;
- bitmapRect.right = actualBitmapRect.right;
- }
- if (bitmapRect.bottom > actualBitmapRect.bottom) {
- float diff = bitmapRect.bottom - actualBitmapRect.bottom;
- viewRect.bottom -= diff / yScale;
- bitmapRect.bottom = actualBitmapRect.bottom;
- }
-
- BRegion clippedRegion(viewRect);
- clippedRegion.IntersectWith(&fClippingRegion);
-
- int32 rectCount = clippedRegion.CountRects();
- if (rectCount == 0)
- return;
-
- if (rectCount > 1 || (rectCount == 1 && clippedRegion.RectAt(0) !=
viewRect)
- || viewRect.Width() < bitmapRect.Width()
- || viewRect.Height() < bitmapRect.Height()) {
- UtilityBitmap** bitmaps;
- if (_ExtractBitmapRegions(*bitmap, options, bitmapRect,
viewRect,
- xScale, yScale, clippedRegion, bitmaps) !=
B_OK) {
- return;
- }
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_DRAW_BITMAP_RECTS);
- message.Add(fToken);
- message.Add(options);
- message.Add(bitmap->ColorSpace());
- message.Add(bitmap->Flags());
- message.Add(rectCount);
-
- for (int32 i = 0; i < rectCount; i++) {
- message.Add(clippedRegion.RectAt(i));
- message.AddBitmap(*bitmaps[i], true);
- delete bitmaps[i];
- }
-
- free(bitmaps);
- return;
- }
-
- // TODO: we may want to cache/checksum bitmaps
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_DRAW_BITMAP);
- message.Add(fToken);
- message.Add(bitmapRect);
- message.Add(viewRect);
- message.Add(options);
- message.AddBitmap(*bitmap);
-}
-
-
-void
-HTML5DrawingEngine::DrawArc(BRect rect, const float& angle, const float& span,
- bool filled)
-{
- BRect bounds = rect;
- if (!filled)
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_ARC : RP_STROKE_ARC);
- message.Add(fToken);
- message.Add(rect);
- message.Add(angle);
- message.Add(span);
-}
-
-void
-HTML5DrawingEngine::FillArc(BRect rect, const float& angle, const float& span,
- const BGradient& gradient)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_ARC_GRADIENT);
- message.Add(fToken);
- message.Add(rect);
- message.Add(angle);
- message.Add(span);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::DrawBezier(BPoint* points, bool filled)
-{
- BRect bounds = _BuildBounds(points, 4);
- if (!filled)
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_BEZIER : RP_STROKE_BEZIER);
- message.Add(fToken);
- message.AddList(points, 4);
-}
-
-
-void
-HTML5DrawingEngine::FillBezier(BPoint* points, const BGradient& gradient)
-{
- BRect bounds = _BuildBounds(points, 4);
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_BEZIER_GRADIENT);
- message.Add(fToken);
- message.AddList(points, 4);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::DrawEllipse(BRect rect, bool filled)
-{
- BRect bounds = rect;
- if (!filled)
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_ELLIPSE : RP_STROKE_ELLIPSE);
- message.Add(fToken);
- message.Add(rect);
-}
-
-
-void
-HTML5DrawingEngine::FillEllipse(BRect rect, const BGradient& gradient)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_ELLIPSE_GRADIENT);
- message.Add(fToken);
- message.Add(rect);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::DrawPolygon(BPoint* pointList, int32 numPoints,
- BRect bounds, bool filled, bool closed)
-{
- BRect clipBounds = bounds;
- if (!filled)
- clipBounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(clipBounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_POLYGON : RP_STROKE_POLYGON);
- message.Add(fToken);
- message.Add(bounds);
- message.Add(closed);
- message.Add(numPoints);
- for (int32 i = 0; i < numPoints; i++)
- message.Add(pointList[i]);
-}
-
-
-void
-HTML5DrawingEngine::FillPolygon(BPoint* pointList, int32 numPoints,
- BRect bounds, const BGradient& gradient, bool closed)
-{
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_POLYGON_GRADIENT);
- message.Add(fToken);
- message.Add(bounds);
- message.Add(closed);
- message.Add(numPoints);
- for (int32 i = 0; i < numPoints; i++)
- message.Add(pointList[i]);
- message.AddGradient(gradient);
-}
-
-
-// #pragma mark - rgb_color versions
-
-
-void
-HTML5DrawingEngine::StrokePoint(const BPoint& point, const rgb_color& color)
-{
- BRect bounds(point, point);
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_POINT_COLOR);
- message.Add(fToken);
- message.Add(point);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::StrokeLine(const BPoint& start, const BPoint& end,
- const rgb_color& color)
-{
- BPoint points[2] = { start, end };
- BRect bounds = _BuildBounds(points, 2);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_LINE_1PX_COLOR);
- message.Add(fToken);
- message.AddList(points, 2);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::StrokeRect(BRect rect, const rgb_color &color)
-{
- BRect bounds = rect;
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_RECT_1PX_COLOR);
- message.Add(fToken);
- message.Add(rect);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::FillRect(BRect rect, const rgb_color& color)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_RECT_COLOR);
- message.Add(fToken);
- message.Add(rect);
- message.Add(color);
-}
-
-
-void
-HTML5DrawingEngine::FillRegion(BRegion& region, const rgb_color& color)
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_REGION_COLOR_NO_CLIPPING);
- message.AddRegion(region);
- message.Add(color);
-}
-
-
-// #pragma mark - DrawState versions
-
-
-void
-HTML5DrawingEngine::StrokeRect(BRect rect)
-{
- BRect bounds = rect;
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_RECT);
- message.Add(fToken);
- message.Add(rect);
-}
-
-
-void
-HTML5DrawingEngine::FillRect(BRect rect)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_RECT);
- message.Add(fToken);
- message.Add(rect);
-}
-
-
-void
-HTML5DrawingEngine::FillRect(BRect rect, const BGradient& gradient)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_RECT_GRADIENT);
- message.Add(fToken);
- message.Add(rect);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::FillRegion(BRegion& region)
-{
- BRegion clippedRegion = region;
- clippedRegion.IntersectWith(&fClippingRegion);
- if (clippedRegion.CountRects() == 0)
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_REGION);
- message.Add(fToken);
- message.AddRegion(clippedRegion.CountRects() < region.CountRects()
- ? clippedRegion : region);
-}
-
-
-void
-HTML5DrawingEngine::FillRegion(BRegion& region, const BGradient& gradient)
-{
- BRegion clippedRegion = region;
- clippedRegion.IntersectWith(&fClippingRegion);
- if (clippedRegion.CountRects() == 0)
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_REGION_GRADIENT);
- message.Add(fToken);
- message.AddRegion(clippedRegion.CountRects() < region.CountRects()
- ? clippedRegion : region);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::DrawRoundRect(BRect rect, float xRadius, float yRadius,
- bool filled)
-{
- BRect bounds = rect;
- if (!filled)
- bounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_ROUND_RECT : RP_STROKE_ROUND_RECT);
- message.Add(fToken);
- message.Add(rect);
- message.Add(xRadius);
- message.Add(yRadius);
-}
-
-
-void
-HTML5DrawingEngine::FillRoundRect(BRect rect, float xRadius, float yRadius,
- const BGradient& gradient)
-{
- if (!fClippingRegion.Intersects(rect))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_ROUND_RECT_GRADIENT);
- message.Add(fToken);
- message.Add(rect);
- message.Add(xRadius);
- message.Add(yRadius);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::DrawShape(const BRect& bounds, int32 opCount,
- const uint32* opList, int32 pointCount, const BPoint* pointList,
- bool filled, const BPoint& viewToScreenOffset, float viewScale)
-{
- BRect clipBounds = bounds;
- if (!filled)
- clipBounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(clipBounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_SHAPE : RP_STROKE_SHAPE);
- message.Add(fToken);
- message.Add(bounds);
- message.Add(opCount);
- message.AddList(opList, opCount);
- message.Add(pointCount);
- message.AddList(pointList, pointCount);
- message.Add(viewToScreenOffset);
- message.Add(viewScale);
-}
-
-
-void
-HTML5DrawingEngine::FillShape(const BRect& bounds, int32 opCount,
- const uint32* opList, int32 pointCount, const BPoint* pointList,
- const BGradient& gradient, const BPoint& viewToScreenOffset,
- float viewScale)
-{
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_SHAPE_GRADIENT);
- message.Add(fToken);
- message.Add(bounds);
- message.Add(opCount);
- message.AddList(opList, opCount);
- message.Add(pointCount);
- message.AddList(pointList, pointCount);
- message.AddGradient(gradient);
- message.Add(viewToScreenOffset);
- message.Add(viewScale);
-}
-
-
-void
-HTML5DrawingEngine::DrawTriangle(BPoint* points, const BRect& bounds,
- bool filled)
-{
- BRect clipBounds = bounds;
- if (!filled)
- clipBounds.InsetBy(fExtendWidth, fExtendWidth);
-
- if (!fClippingRegion.Intersects(clipBounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(filled ? RP_FILL_TRIANGLE : RP_STROKE_TRIANGLE);
- message.Add(fToken);
- message.AddList(points, 3);
- message.Add(bounds);
-}
-
-
-void
-HTML5DrawingEngine::FillTriangle(BPoint* points, const BRect& bounds,
- const BGradient& gradient)
-{
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_FILL_TRIANGLE_GRADIENT);
- message.Add(fToken);
- message.Add(points[0]);
- message.Add(points[1]);
- message.Add(points[2]);
- message.Add(bounds);
- message.AddGradient(gradient);
-}
-
-
-void
-HTML5DrawingEngine::StrokeLine(const BPoint &start, const BPoint &end)
-{
- BPoint points[2] = { start, end };
- BRect bounds = _BuildBounds(points, 2);
-
- if (!fClippingRegion.Intersects(bounds))
- return;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_LINE);
- message.Add(fToken);
- message.AddList(points, 2);
-}
-
-
-void
-HTML5DrawingEngine::StrokeLineArray(int32 numLines,
- const ViewLineArrayInfo *lineData)
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
- message.Start(RP_STROKE_LINE_ARRAY);
- message.Add(fToken);
- message.Add(numLines);
- for (int32 i = 0; i < numLines; i++)
- message.AddArrayLine(lineData[i]);
-}
-
-
-// #pragma mark - string functions
-
-
-BPoint
-HTML5DrawingEngine::DrawString(const char* string, int32 length,
- const BPoint& point, escapement_delta* delta)
-{
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
-
- message.Start(RP_DRAW_STRING);
- message.Add(fToken);
- message.Add(point);
- message.AddString(string, length);
- message.Add(delta != NULL);
- if (delta != NULL)
- message.AddList(delta, length);
-
- status_t result = _AddCallback();
- if (message.Flush() != B_OK)
- return point;
-
- if (result != B_OK)
- return point;
-
- do {
- result = acquire_sem_etc(fResultNotify, 1, B_RELATIVE_TIMEOUT,
- 1 * 1000 * 1000);
- } while (result == B_INTERRUPTED);
-
- if (result != B_OK)
- return point;
-
- return fDrawStringResult;
-}
-
-
-BPoint
-HTML5DrawingEngine::DrawString(const char* string, int32 length,
- const BPoint* offsets)
-{
- // Guaranteed to have at least one point.
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
-
- message.Start(RP_DRAW_STRING_WITH_OFFSETS);
- message.Add(fToken);
- message.AddString(string, length);
- message.AddList(offsets, UTF8CountChars(string, length));
-
- status_t result = _AddCallback();
- if (message.Flush() != B_OK)
- return offsets[0];
-
- if (result != B_OK)
- return offsets[0];
-
- do {
- result = acquire_sem_etc(fResultNotify, 1, B_RELATIVE_TIMEOUT,
- 1 * 1000 * 1000);
- } while (result == B_INTERRUPTED);
-
- if (result != B_OK)
- return offsets[0];
-
- return fDrawStringResult;
-}
-
-
-float
-HTML5DrawingEngine::StringWidth(const char* string, int32 length,
- escapement_delta* delta)
-{
- // TODO: decide if really needed and use callback if so
- return fState.Font().StringWidth(string, length, delta);
-}
-
-
-// #pragma mark -
-
-
-status_t
-HTML5DrawingEngine::ReadBitmap(ServerBitmap* bitmap, bool drawCursor,
- BRect bounds)
-{
- if (_AddCallback() != B_OK)
- return B_UNSUPPORTED;
-
- CanvasMessage message(NULL, fHWInterface->SendBuffer());
-
- message.Start(RP_READ_BITMAP);
- message.Add(fToken);
- message.Add(bounds);
- message.Add(drawCursor);
- if (message.Flush() != B_OK)
- return B_UNSUPPORTED;
-
- status_t result;
- do {
- result = acquire_sem_etc(fResultNotify, 1, B_RELATIVE_TIMEOUT,
- 100 * 1000 * 1000);
- } while (result == B_INTERRUPTED);
-
- if (result != B_OK)
- return result;
-
- BBitmap* read = fReadBitmapResult;
- if (read == NULL)
- return B_UNSUPPORTED;
-
- result = bitmap->ImportBits(read->Bits(), read->BitsLength(),
- read->BytesPerRow(), read->ColorSpace());
- delete read;
- return result;
-}
-
-
-// #pragma mark -
-
-
-status_t
-HTML5DrawingEngine::_AddCallback()
-{
- if (fCallbackAdded)
- return B_OK;
-
- if (fResultNotify < 0)
- fResultNotify = create_sem(0, "drawing engine result");
- if (fResultNotify < 0)
- return fResultNotify;
-
- status_t result = fHWInterface->AddCallback(fToken,
&_DrawingEngineResult,
- this);
-
- fCallbackAdded = result == B_OK;
- return result;
-}
-
-
-bool
-HTML5DrawingEngine::_DrawingEngineResult(void* cookie, CanvasMessage& message)
-{
- HTML5DrawingEngine* engine = (HTML5DrawingEngine*)cookie;
-
- switch (message.Code()) {
- case RP_DRAW_STRING_RESULT:
- if (message.Read(engine->fDrawStringResult) != B_OK)
- return false;
- break;
-
- case RP_STRING_WIDTH_RESULT:
- if (message.Read(engine->fStringWidthResult) != B_OK)
- return false;
- break;
-
- case RP_READ_BITMAP_RESULT:
- if (message.ReadBitmap(&engine->fReadBitmapResult) !=
B_OK)
- return false;
- break;
-
- default:
- return false;
- }
-
- release_sem(engine->fResultNotify);
- return true;
-}
-
-
-BRect
-HTML5DrawingEngine::_BuildBounds(BPoint* points, int32 pointCount)
-{
- BRect bounds(1000000, 1000000, 0, 0);
- for (int32 i = 0; i < pointCount; i++) {
- bounds.left = min_c(bounds.left, points[i].x);
- bounds.top = min_c(bounds.top, points[i].y);
- bounds.right = max_c(bounds.right, points[i].x);
- bounds.bottom = max_c(bounds.bottom, points[i].y);
- }
-
- return bounds;
-}
-
-
-status_t
-HTML5DrawingEngine::_ExtractBitmapRegions(ServerBitmap& bitmap, uint32 options,
- const BRect& bitmapRect, const BRect& viewRect, double xScale,
- double yScale, BRegion& region, UtilityBitmap**& bitmaps)
-{
- int32 rectCount = region.CountRects();
- bitmaps = (UtilityBitmap**)malloc(rectCount * sizeof(UtilityBitmap*));
- if (bitmaps == NULL)
- return B_NO_MEMORY;
-
- for (int32 i = 0; i < rectCount; i++) {
- BRect sourceRect =
region.RectAt(i).OffsetByCopy(-viewRect.LeftTop());
- int32 targetWidth = (int32)(sourceRect.Width() + 1.5);
- int32 targetHeight = (int32)(sourceRect.Height() + 1.5);
-
- if (xScale != 1.0) {
- sourceRect.left = (int32)(sourceRect.left * xScale +
0.5);
- sourceRect.right = (int32)(sourceRect.right * xScale +
0.5);
- if (xScale < 1.0)
- targetWidth = (int32)(sourceRect.Width() + 1.5);
- }
-
- if (yScale != 1.0) {
- sourceRect.top = (int32)(sourceRect.top * yScale + 0.5);
- sourceRect.bottom = (int32)(sourceRect.bottom * yScale
+ 0.5);
- if (yScale < 1.0)
- targetHeight = (int32)(sourceRect.Height() +
1.5);
- }
-
- sourceRect.OffsetBy(bitmapRect.LeftTop());
- // sourceRect is now the part of the bitmap we want
copied
-
- status_t result = B_OK;
- if ((xScale > 1.0 || yScale > 1.0)
- && (targetWidth * targetHeight <
(int32)(sourceRect.Width() + 1.5)
- * (int32)(sourceRect.Height() + 1.5))) {
- // the target bitmap is smaller than the source, scale
it locally
- // and send over the smaller version to avoid sending
any extra data
- if (fBitmapDrawingEngine == NULL) {
- fBitmapDrawingEngine
- = new(std::nothrow)
BitmapDrawingEngine(B_RGBA32);
- if (fBitmapDrawingEngine == NULL)
- result = B_NO_MEMORY;
- }
-
- if (result == B_OK) {
- result =
fBitmapDrawingEngine->SetSize(targetWidth,
- targetHeight);
- }
-
- if (result == B_OK) {
- fBitmapDrawingEngine->SetDrawingMode(B_OP_COPY);
-
- switch (bitmap.ColorSpace()) {
- case B_RGBA32:
- case B_RGBA32_BIG:
- case B_RGBA15:
- case B_RGBA15_BIG:
- break;
-
- default:
- {
- // we need to clear the
background if there may be
- // transparency through
transparent magic (we use
- // B_OP_COPY when we draw alpha
enabled bitmaps, so we
- // don't need to clear there)
- // TODO: this is not actually
correct, as we're going to
- // loose the transparency with
the conversion to the
- // original non-alpha
colorspace happening in
- // ExportToBitmap
- rgb_color background = { 0, 0,
0, 0 };
- fBitmapDrawingEngine->FillRect(
- BRect(0, 0, targetWidth
- 1, targetHeight -1),
- background);
-
fBitmapDrawingEngine->SetDrawingMode(B_OP_OVER);
- break;
- }
- }
-
- fBitmapDrawingEngine->DrawBitmap(&bitmap,
sourceRect,
- BRect(0, 0, targetWidth - 1,
targetHeight - 1), options);
- bitmaps[i] =
fBitmapDrawingEngine->ExportToBitmap(targetWidth,
- targetHeight, bitmap.ColorSpace());
- if (bitmaps[i] == NULL)
- result = B_NO_MEMORY;
- }
- } else {
- // source is smaller or equal target, extract the
relevant rects
- // directly without any scaling and conversion
- targetWidth = (int32)(sourceRect.Width() + 1.5);
- targetHeight = (int32)(sourceRect.Height() + 1.5);
-
- bitmaps[i] = new(std::nothrow) UtilityBitmap(
- BRect(0, 0, targetWidth - 1, targetHeight - 1),
- bitmap.ColorSpace(), 0);
-
- if (bitmaps[i] == NULL) {
- result = B_NO_MEMORY;
- } else {
- result = bitmaps[i]->ImportBits(bitmap.Bits(),
bitmap.BitsLength(),
- bitmap.BytesPerRow(),
bitmap.ColorSpace(), sourceRect.LeftTop(),
- BPoint(0, 0), targetWidth,
targetHeight);
-
- if (result != B_OK)
- delete bitmaps[i];
- }
- }
-
- if (result != B_OK) {
- for (int32 j = 0; j < i; j++)
- delete bitmaps[j];
- free(bitmaps);
- return result;
- }
- }
-
- return B_OK;
-}
diff --git a/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.h
b/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.h
deleted file mode 100644
index 5273c60..0000000
--- a/src/servers/app/drawing/interface/html5/HTML5DrawingEngine.h
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
- * Copyright 2009, Haiku, Inc.
- * Distributed under the terms of the MIT License.
- *
- * Authors:
- * Michael Lotz <mmlr@xxxxxxxx>
- * François Revol <revol@xxxxxxx>
- */
-#ifndef HTML5_DRAWING_ENGINE_H
-#define HTML5_DRAWING_ENGINE_H
-
-#include "DrawingEngine.h"
-#include "DrawState.h"
-#include "HTML5HWInterface.h"
-#include "ServerFont.h"
-
-class BPoint;
-class BRect;
-class BRegion;
-
-class BitmapDrawingEngine;
-class ServerBitmap;
-
-class HTML5DrawingEngine : public DrawingEngine {
-public:
-
HTML5DrawingEngine(
-
HTML5HWInterface* interface);
- virtual ~HTML5DrawingEngine();
-
- // HWInterfaceListener interface
- virtual void FrameBufferChanged();
-
- virtual void SetCopyToFrontEnabled(bool
enabled);
-
- // for screen shots
- virtual status_t ReadBitmap(ServerBitmap* bitmap,
- bool
drawCursor, BRect bounds);
-
- // clipping for all drawing functions, passing a NULL region
- // will remove any clipping (drawing allowed everywhere)
- virtual void ConstrainClippingRegion(const
BRegion* region);
-
- virtual void SetDrawState(const DrawState*
state,
- int32
xOffset = 0, int32 yOffset = 0);
-
- virtual void SetHighColor(const rgb_color&
color);
- virtual void SetLowColor(const rgb_color&
color);
- virtual void SetPenSize(float size);
- virtual void SetStrokeMode(cap_mode lineCap,
-
join_mode joinMode, float miterLimit);
- virtual void SetPattern(const struct
pattern& pattern);
- virtual void SetDrawingMode(drawing_mode
mode);
- virtual void SetDrawingMode(drawing_mode
mode,
-
drawing_mode& oldMode);
- virtual void SetBlendingMode(source_alpha
srcAlpha,
-
alpha_function alphaFunc);
- virtual void SetFont(const ServerFont& font);
- virtual void SetFont(const DrawState* state);
-
- // drawing functions
- virtual void InvertRect(BRect rect);
-
- virtual void DrawBitmap(ServerBitmap* bitmap,
- const
BRect& bitmapRect,
- const
BRect& viewRect, uint32 options = 0);
-
- // drawing primitives
- virtual void DrawArc(BRect rect, const
float& angle,
- const
float& span, bool filled);
- virtual void FillArc(BRect rect, const
float& angle,
- const
float& span,
- const
BGradient& gradient);
-
- virtual void DrawBezier(BPoint* points, bool
filled);
- virtual void FillBezier(BPoint* points,
- const
BGradient& gradient);
-
- virtual void DrawEllipse(BRect rect, bool
filled);
- virtual void FillEllipse(BRect rect,
- const
BGradient& gradient);
-
- virtual void DrawPolygon(BPoint* pointList,
int32 numPoints,
- BRect
bounds, bool filled, bool closed);
- virtual void FillPolygon(BPoint* pointList,
int32 numPoints,
- BRect
bounds, const BGradient& gradient,
- bool
closed);
-
- // these rgb_color versions are used internally by the server
- virtual void StrokePoint(const BPoint& point,
- const
rgb_color& color);
- virtual void StrokeRect(BRect rect, const
rgb_color &color);
- virtual void FillRect(BRect rect, const
rgb_color &color);
- virtual void FillRegion(BRegion& region,
- const
rgb_color& color);
-
- virtual void StrokeRect(BRect rect);
- virtual void FillRect(BRect rect);
- virtual void FillRect(BRect rect, const
BGradient& gradient);
-
- virtual void FillRegion(BRegion& region);
- virtual void FillRegion(BRegion& region,
- const
BGradient& gradient);
-
- virtual void DrawRoundRect(BRect rect, float
xRadius,
- float
yRadius, bool filled);
- virtual void FillRoundRect(BRect rect, float
xRadius,
- float
yRadius, const BGradient& gradient);
-
- virtual void DrawShape(const BRect& bounds,
- int32
opCount, const uint32* opList,
- int32
pointCount, const BPoint* pointList,
- bool
filled,
- const
BPoint& viewToScreenOffset,
- float
viewScale);
- virtual void FillShape(const BRect& bounds,
- int32
opCount, const uint32* opList,
- int32
pointCount, const BPoint* pointList,
- const
BGradient& gradient,
- const
BPoint& viewToScreenOffset,
- float
viewScale);
-
- virtual void DrawTriangle(BPoint* points,
- const
BRect& bounds, bool filled);
- virtual void FillTriangle(BPoint* points,
- const
BRect& bounds,
- const
BGradient& gradient);
-
- // these versions are used by the Decorator
- virtual void StrokeLine(const BPoint& start,
- const
BPoint& end, const rgb_color& color);
- virtual void StrokeLine(const BPoint& start,
- const
BPoint& end);
- virtual void StrokeLineArray(int32 numlines,
- const
ViewLineArrayInfo* data);
-
- // returns the pen position behind the (virtually) drawn string
- virtual BPoint DrawString(const char* string,
int32 length,
- const
BPoint& point,
-
escapement_delta* delta = NULL);
-virtual BPoint DrawString(const char*
string, int32 length,
- const
BPoint* offsets);
-
- virtual float StringWidth(const char* string,
int32 length,
-
escapement_delta* delta = NULL);
-
- // software rendering backend invoked by CopyRegion() for the sorted
- // individual rects
- virtual BRect CopyRect(BRect rect, int32
xOffset,
- int32
yOffset) const;
-
-private:
[ *** diff truncated: 2472 lines dropped *** ]