Commit Graph
267 Commits
Author SHA1 Message Date
Alex Wilson 0c8b758c09 Add a BView::LayoutChanged() method, called after layout of this view and children.
Fixes #7683.
2011-11-05 01:03:07 -06:00
Alex Wilson e7b0dc78f7 Now that child classes aren't overriding the various InvalidateLayout() methods, we can take advantage of some guarantees to simplify/clean/optimize the layout invalidation propagation mechanisms! 2011-10-28 14:16:54 -06:00
Alex Wilson eee4243d35 De-virtualize BView::InvalidateLayout() and introduce LayoutInvalidated() hook, like BLayout. 2011-10-28 14:16:43 -06:00
Alex Wilson fa01d08496 User BView's layout item tracking functionality to simplify and optimize some methods in BLayout and BView.
Delete BLayout::RemoveViewRecursive() as it is no longer needed.
Add a few TODO's.
2011-10-28 14:16:16 -06:00
Alex Wilson bd97b9adba Add a BObjectList<BLayoutItem> to BView::fLayoutData that keeps track of any BLayoutItems that refer to this view that are part of a layout. BLayoutItem does the registering/deregistering of the items, and BView::Private proxies fLayoutData for us. Currently, this is not used anywhere, but there are many places where it will be used soon. 2011-10-28 14:16:07 -06:00
DarkWyrm 884384ff79 Sending B_COUNT_PROPERTIES for the View property now returns the right value.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@39624 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-11-25 09:35:41 +00:00
Clemens Zeidler d0844c50fb Fix typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38749 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-09-20 22:32:36 +00:00
Oliver Tappe 8f88fe1d98 * fix CID-258: BView::SetViewOverlay() shouldn't crash if given a NULL bitmap.
Coverity was complaining because we did a half-ass check against NULL only to
pass that NULL pointer on to a function that deref'd it.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38248 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-18 19:55:51 +00:00
Alex Wilson 1d6c7b6cb6 Big change deriving BLayout from BLayoutItem, and allowing viewless BLayouts.
a few highlights:
* BLayout now derives publicly from BLayoutItem
* Added BAbstractLayout class, which our layouts now derive from
* updated layout builders to avoid creating views when they don't need to
* updated layout classes
* updated AboutSystem to fix a little regression
* more details on #6407
* please tell me about any regressions, I've tried to find them all, but some
  may have slipped by.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38207 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-17 18:43:41 +00:00
Alex Wilson aa818be69a Update BView to call debugger when passed a NULL archive for its archive constructor. This means there is no need to check for a NULL archive in BSeparatorView. Also update BUnarchiver and friends to be NULL safe. Pointed out by Adrien, fixes CID 1754.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@38063 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-12 14:50:57 +00:00
François Revol 3c38ebff78 Use IntegerWidth() & friend to avoid the cast, doesn't hurt.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37841 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 12:48:30 +00:00
François Revol a67b5b9911 Fix the width and height fields of the B_VIEW_RESIZED message to be of type int32 and not float, as stated in the BeBook. They are rarely used since BView::FrameResize() passes the floats directly from the updated bounds, but at least it should fix the XEmacs port.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37839 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-08-02 11:47:12 +00:00
Alex Wilson 4a254e4ddb Generally, clean up new archiving constant names & strings to be consistent in all classes. Modify archiving constants to be const char* const (thanks Ingo). Also modify archiving in many classes to use less fields by storing more data in arrays and structs. The common min, max, and preferred sizes, for example are always stored in an array now. In BTwoDimensionalLayout and BSplitLayout, the insets are archived in a BRect. Also fixed a typo in BGridLayout which caused column info to be incorrect during archival.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37777 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-27 20:17:13 +00:00
Ingo Weinhold cbac1a2355 Patch by Alex Wilson: Added archiving/unarchiving of layout and layout
related data.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37539 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-07-16 17:06:55 +00:00
Axel Dörfler 12c93cc7f8 * Before stippi starts clobbering the sources everywhere with superfluous
work-arounds, I applied the work-around where the problem actually occurs,
  until someone takes the time to look into it.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@37095 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-06-11 07:56:51 +00:00
Axel Dörfler 24386c2937 * Minor cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36300 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-15 15:33:20 +00:00
Jonas Sundström a2224f75d9 Corrected strace output.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36161 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-04-11 17:04:29 +00:00
Stephan Aßmus a9daf3d911 Improved the DrawString() method that takes offsets per glyph by making the
client provide the array size. Added version that doesn't take a string length
for convenience.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35866 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-15 15:08:07 +00:00
Stephan Aßmus 77e5acc0d9 * Extended the BView drawing API by a DrawString() version that takes an array
of locations, one for each glyph.
 * Added a test for the new functionality.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35865 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-03-15 13:59:14 +00:00
Rene Gollent fa5956d5f3 Removed obsolete TODO: BMessage is smart enough to already use area transfers if needed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35688 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-28 23:59:28 +00:00
Stephan Aßmus 4f24f3110b The decision to inform the server about changed flags needs to depend on the
changed flags, not on the new flags! Fixes the server and client going out of
sync when clearing any flag that the server needs to know about.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@35451 a95241bf-73f2-0310-859d-f6bbb57e9c96
2010-02-11 13:47:29 +00:00
Ingo Weinhold 76d24e95aa Ugh, forgot to check this in quite a while ago:
If the view doesn't have a tool tip, pass the B_MOUSE_IDLE to the next handler,
so the parent view can show a tool tip. This makes tool tips in a column list
view possible (or at least reasonably easy).


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@33902 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-11-05 17:29:32 +00:00
Axel Dörfler 2ecef7f379 * Reuse an existing text tool tip, when a new text is set.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32515 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-19 13:56:16 +00:00
Ingo Weinhold a826679822 * Only build the gcc 2 compatibility symbols with gcc 2.
* Added gcc 4 _ReservedView11() compatibility symbol.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32132 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-05 14:26:47 +00:00
Axel Dörfler 8318af01b9 * Added a basic tool tip API, and implementation.
* The BView API can probably be regarded as good enough; the implementation
  might need to be improved over time (also, some things as archivability
  aren't fully implemented yet). The ToolTip.h header should get public once
  finalized.
* Added new B_MOUSE_IDLE message that is sent to a BView after a certain
  time has passed (BToolTipManager::ShowDelay()).
* Added small test app (ToolTipTest) that shows what is already working.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32078 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-08-03 14:47:41 +00:00
Michael Lotz d7a16b238f * Fully switch to the Haiku message format so that it is also used for on-disk
storage.
* Remove reduntant information from the header (field_count vs. fields_size).
* Remove checksums previously used to validate the message passing by area
  mechanism.
* Move variables that are purely used by the instance out of the header and into
  the BMessage object.
* Use more sensible types for the different message fields.
* Reduce some field sizes to realistic values.
* Make size_t values into uint32 values so the message format will not change
  when later moving to 64 bits.
* Pack the structures used for flat message storage so it doesn't change
  because of padding.
* Fix message passing by area. It never worked because the created area was
  never actually filled with any data!
* Some more allocation checks with graceful fallbacks (should be all now).
* Some more checks for negative index values (should also be all now).
* Make printing more inline with how the rest of the class works and make some
  of the output more consistent.
* Also add the new unsigned types to PrintToStream() output.
* Fix printing of unknown types and invalid BMessages, it would always have
  printed only the first entry respectively the same error.
* Added some clarifying comments.
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@32039 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-31 22:19:36 +00:00
Stephan Aßmus 1b98cebd7a Turn off the optimization to skip calling Flush() when an invalidate request
was already sent by this or another view. This was already the case for the
BRect version of Invalidate(), but was forgotten in the BRegion version. I
just had an idea what the problem could be, but I think it's bogus. Needs some
investigation. Should fix ticket #4119 for the time being.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31734 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-24 15:44:15 +00:00
Axel Dörfler 514fcf3be9 * Pass the mouse wheel message to our parent (ie. the next handler) if we don't
have any scrollers.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31580 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 08:07:44 +00:00
Axel Dörfler 68504ee9f2 * Style cleanup.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31579 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-15 08:04:50 +00:00
Axel Dörfler 9515252e02 * The view always included the "error" in the reply, but that's only supposed
to happen when an actual error occured.
* The "set frame" property resized the view incorrectly.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31388 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-07-03 10:42:53 +00:00
Ingo Weinhold a0747aad3b After the first call to BView::InvalidateLayout() further invocations don't
invoke the layout's InvalidateLayout() anymore. This could cause problems when
the layout caches layout related information and also updates those on calls
other than LayoutView(). A call to such a method after an InvalidateLayout()
would mark the cached info valid and the layout would use the cached info
until the first InvalidateLayout() after the next LayoutView(), even if
BView::InvalidateLayout() had been called again in the meantime.

* Introduced a new method BView::ResetLayoutInvalidation(), which must be
  called by layout implementations whenever they have updated their cached
  information and need further InvalidateLayout() notifications.
* Adjusted the existing layout implementations to use the method.

Fixes bug #4047.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31316 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-29 14:18:12 +00:00
Stephan Aßmus 8f24c71102 Reverted my change to usage of _get_object_token_(), it already means to use
a cached token... doh! Thanks Axel!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31140 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-20 15:47:28 +00:00
Stephan Aßmus fa0ba1f855 Cache a view's server token. Avoids getting it for every
BView method that contacts the server.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31134 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-20 14:12:30 +00:00
Stephan Aßmus 19e179ca4f * Moved the implementation of SetViewCursor from the thread of the
window of the view into the application thread. This solves the
  race condition with asynchronous SetViewCursor and deleting the
  cursor immediately afterwards for real.
* The ServerApp now requires a reference to the current cursor,
  just in case...
* Added TODOs for caching the BView token, it's currently resolved
  for every single BView call that talks to the server... not good!


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31133 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-20 12:11:49 +00:00
Axel Dörfler 834a9474ac * Fixed bug that prevented the font state to be properly popped. It could be
solved more efficiently by adding a new app_server call for this, though.
* Fixed stupid operator precedence bug that caused BView to always archive
  everything, instead of only those items with their archiving flag set.
* Minor cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@31091 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-06-17 16:50:14 +00:00
Jérôme Duval a47e7e30e4 * merged Frame and Hidden properties (set and get) (bug #3493).
* changed Hidden set property to not check the current hidden state, as it's not exactly related.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30920 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-30 11:37:25 +00:00
Axel Dörfler d69a73dfc7 * The Be API requires that options and mask is 0 to remove a mask using
BView::SetEventMask(). This fixes bug #3928.
* And while the app_server handled that correctly, BView actually did not, and
  stored the wrong value.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30772 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-05-16 21:09:33 +00:00
Stephan Aßmus 12349c7d3d Begun to use structs for the BView<->app_server communication. This makes
the protocoll less prone to errors, reduces possible points of failure and
most importantly, reduces the number of function calls to the link API.
I only know the numbers for StrokeLine(), which I tested via the Benchmark
test app. With this change, drawing random colored and positioned lines
actually doubled in speed. On the BView side, the calls to
ServerLink::Attach() only halfed, while on the app_server side, the number
of calls to ServerLink::Read() is now 1/4th. It will also be worth
investigating why the link stuff is so slow at all. I also optimized
BView::DrawString() a lot in this change, but I don't have any numbers
yet. Some other commands which used multiple Attach()/Read() calls were
also optimized, at least the most important ones. Begin/EndLineArray() was
also pretty bad on the app_server side. 


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@29937 a95241bf-73f2-0310-859d-f6bbb57e9c96
2009-04-05 14:59:43 +00:00
Axel Dörfler eaccfb9dd0 * Replaced some "new" with new(std::nothrow) where appropriate in our base
classes (BView, BWindow, BAlert, BButton - BTextView should be part of this,
  too, to make BAlerts work).
* However, it's not that simple, because there is often no way to return an
  error. Most of that code obviously assumes to be able to throw exceptions
  (it's just not communicated to the caller). Maybe we should just start
  documenting exceptions for R1 (and properly use exceptions later on).
* Automatic white space cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28646 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-11-14 10:23:38 +00:00
Stephan Aßmus 431dc47dde Patch by Artur Wyszynski with some changes by myself:
* Resolved TODO: The type of the gradient is no longer encoded twice in the
  app_server link protocoll.
* Moved instantiation of the BGradient into the LinkReceiver::ReadGradient()
  method.
* Check success for (at least) ReadGradient() in ServerWindow.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28150 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-15 19:47:00 +00:00
Oliver Tappe 39fbf5509b bonefish + zooey:
* Fixed a general problem with respect to overriding of the reserved
  virtual function slots: instead of statically invoking the method
  that corresponds to the reserved slot on the class that contains the
  slot, we now invoke the virtual Perform() method. Perform() then dispatches 
  the method invocation to the "proper" class, i.e. the highest class in the 
  hierarchy that  actually implements the requested method.
  This fixes a crash in apps that use liblayout's MSlider class and
  should fix one or other spurious bug with old apps or libraries, too.
* added new header folder 'binary_compatibility' that contains files that
  define the method codes and data structures required by Perform()
* looked for and implemented all used reserved virtual slot functions to
  invoke Perform() where necessary or to pass on the method call statically
  (for slots that were already maintained by Be)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28124 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-15 09:29:06 +00:00
Rene Gollent 1138737b87 Fix regression introduced in r28116: Due to the change in variable names, the
wrong version of ConvertFromScreen() was now used, resulting in the calculation
being computed and thrown away. This broke BMenu, probably amongst other things.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28118 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-15 01:59:39 +00:00
Axel Dörfler 0945268d80 * GetMouse() now survives being called with NULL parameters for location or
buttons.
* Automatic whitespace cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28116 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-15 00:02:54 +00:00
Stephan Aßmus 991547ef6c Patch by Artur Wyszynski:
* Implemented BGradient, BGradientLinear, BGradientRadial,
  BGradientDiamond, BGradientConic and BGradientRadialFocus
  new Interface Kit classes.
* Implemented all the (AGG-based) backend necessary in
  the app_server to render gradients (Painter, DrawingEngine)
* app_server/View can convert a BGradient layout to screen
  coordinates.
* Added BGradient methods of the Fill* methods in BView.
* Implemented a test app and added it to the image as a
  demo.
* Adopted Icon-O-Matic and libs/icon in order to avoid
  clashing with the new BGradient class. Re-use some
  parts where possible.

Awesome work, Artur! Thanks a lot. Now a more modern
looking GUI has just become much easier to implement! :-)

TODO:
* Remove the need to have gradient type twice in the
  app_server protocol.
* Refactor some parts of the patch to remove duplicated
  code (Painter, DrawingEngine).
* Adopt the BPicture protocol to know about BGradients.
* Review some parts of the BArchivable implementation.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@28109 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-10-14 21:27:42 +00:00
Philippe Houdoin 7b40eb4206 Fixed a typo.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27601 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-17 22:24:55 +00:00
Stefano Ceccherini 6ee56a00e5 added a comment explaining why the implementation should be moved to the server
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27383 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-08 14:42:38 +00:00
Rene Gollent 0f1d1fbe30 Temporarily disable this check in Invalidate() as requested by Stephan. This fixes the problem with redraws seen in FlattenPictureTest and a few other places.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27337 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-05 17:07:36 +00:00
Stefano Ceccherini 3d2516cb5f implemented a client side (and very slow) version of BView::ClipToPicture. See bug #1397
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27321 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-09-04 13:59:41 +00:00
Stefano Ceccherini 910c4a0106 the Link* api supports sending large messages through areas, thanks to Julun, and this TODO can be removed.
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@27220 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-08-28 15:32:26 +00:00
Stephan Aßmus 162a7f5f8e * Implemented new BView drawing functions DrawBitmap[Async](
const BBitmap* bitmap, BRect bitmapRect, BRect viewRect, uint32 options).
  Only option so far is B_FILTER_BITMAP_BILINEAR.
* BView::DrawBitmap[Async](const BBitmap* bitmap, BRect viewRect) was accessing
  the bitmap pointer without checking it. Would therefore crash when passing
  NULL, unlike the other methods.
* The BPicture code already reserved room for the BBitmap flags, but did not
  store the actual flags and neiter use them for anything. Since the bitmap
  data is stored anyways, the bitmap creation flags do not matter. So I reused
  this for the new bitmap drawing options.
* Rewrote Bitmap.h and removed the B_BITMAP_SCALE_BILINEAR flag again.
* Tried to optimize Painter::_DrawBitmapBilinearCopy32() a little by giving
  the compiler better hints. There seems to be a marginal, possibly imagined
  speed increase < 0.05 ms. ;-)


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@26665 a95241bf-73f2-0310-859d-f6bbb57e9c96
2008-07-28 18:58:30 +00:00