Quite a cleanup action to avoid polluting the global namespace with private
BTextView classes: * Declared the directly used BTextView helper classes as private BTextView classes and changed all affected files. * Realized that Tracker's BPoseView was (accidentally?) using what used to be _BWidthBuffer_. It had declared it's own class with the same name and same members/size in headers/private/tracker/TextViewSupport.h, but the implementation was nowhere to be found. I can only explain this that the BTextView implementation was then actually linked and used. But the big problem was that it was used without locking (unlike in BTextView)! When many Tracker windows opened during system startup or later and they happened to each request characters not yet in the cache, I imagine things could have gone bad and corrupted memory. Anyways, since I can see the usefulness of the cache, BPoseView uses BTextView::WidthBuffer on purpose now. And I moved the locking inside BTextView::WidthBuffer::StringWidth(). * Adjusted InterfaceDefs.cpp accordingly. * TODO: Move subsequent classes into BTextView namespace as well, ie derived classes that BTextView doesn't directly know about. All stuff in src/kits/ inteface/textview_support/ * Added preliminary and not yet implemented layout friendly BTextView constructors. * I will try to handle the insets imposed by BTextView::fTextRect a bit differently when used inside the new layout management framework. For this, I added BTextView::SetInsets() and GetInsets(). SetInsets() doesn't do anything yet. So far, everything seems to work still... ;-) git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27654 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -21,16 +21,20 @@
|
||||
*
|
||||
* File: WidthBuffer.cpp
|
||||
* Author: Stefano Ceccherini ([email protected])
|
||||
* Description: _BWidthBuffer_ stores charachters widths in a hash table, to be able
|
||||
* Description: WidthBuffer stores charachters widths in a hash table, to be able
|
||||
* to retrieve them without passing through the app server.
|
||||
* Used by BTextView and OpenTracker.
|
||||
*/
|
||||
#ifndef __WIDTHBUFFER_H
|
||||
#define __WIDTHBUFFER_H
|
||||
|
||||
#include <TextView.h>
|
||||
|
||||
#include "TextViewSupportBuffer.h"
|
||||
|
||||
class BFont; // forward declaration
|
||||
|
||||
class BFont;
|
||||
|
||||
|
||||
// TODO: enable this as soon as we are sure opentracker works
|
||||
// with our libraries, since using a BFont here (as Dano does) is much better,
|
||||
@@ -50,16 +54,15 @@ struct _width_table_ {
|
||||
};
|
||||
|
||||
|
||||
class _BTextGapBuffer_;
|
||||
class _BWidthBuffer_ : public _BTextViewSupportBuffer_<_width_table_> {
|
||||
class BTextView::WidthBuffer : public _BTextViewSupportBuffer_<_width_table_> {
|
||||
public:
|
||||
_BWidthBuffer_();
|
||||
virtual ~_BWidthBuffer_();
|
||||
WidthBuffer();
|
||||
virtual ~WidthBuffer();
|
||||
|
||||
float StringWidth(const char *inText, int32 fromOffset, int32 length,
|
||||
const BFont *inStyle);
|
||||
float StringWidth(_BTextGapBuffer_ &gapBuffer, int32 fromOffset, int32 length,
|
||||
const BFont *inStyle);
|
||||
float StringWidth(BTextView::TextGapBuffer &gapBuffer, int32 fromOffset,
|
||||
int32 length, const BFont *inStyle);
|
||||
|
||||
private:
|
||||
bool FindTable(const BFont *font, int32 *outIndex);
|
||||
|
||||
Reference in New Issue
Block a user